40
41
42
43
44
45
46
50 USE matparam_def_mod
53
54
55
56#include "implicit_f.inc"
57
58
59
60#include "param_c.inc"
61#include "com01_c.inc"
62#include "units_c.inc"
63
64
65
66 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
67 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
68 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
69 CHARACTER(LEN=NCHARTITLE), INTENT(IN) :: TITR
70 INTEGER, INTENT(IN) :: MAT_ID
71 INTEGER, INTENT(INOUT) :: IPM(NPROPMI)
72 my_real,
INTENT(INOUT) :: pm(npropm)
73
74
75
76 INTEGER ICC
78 . n12, n23, n31, e11, e22, e33, g12, g23, g31, sigt1, sigt2,
79 . sigt3, delta, ca, cb, cn, sigmx, sigyt1, sigyt2, sigyc1,
80 . sigyc2, sysp12, sysn12, sysp23, sysn23,
alpha, efib, epsft,
81 . epsfc, c11, c22, c33, c12, c13, c23, detc, d11, d12, d13, d22,
82 . d23, d33, d21, d31, d32, a11, a12, a13, a22, a23, a33, c1, ssp,
83 . f1, f2, f4, f5, f11, f22, f44, f55, f12, f23, ft1, ft2,
84 . cc,eps0,wplaref,rho0,rhor
85 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
86
87 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE
88
89
90
91 is_encrypted = .false.
92 is_available = .false.
93
95
96 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
97 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
98 IF (rhor == zero) THEN
99 rhor = rho0
100 ENDIF
101 pm(1) = rhor
102 pm(89) = rho0
103
104 CALL hm_get_floatv(
'MAT_EA', e11, is_available, lsubmodel, unitab)
105 CALL hm_get_floatv(
'MAT_EB', e22, is_available, lsubmodel, unitab)
106 CALL hm_get_floatv(
'MAT_EC', e33, is_available, lsubmodel, unitab)
107
108 CALL hm_get_floatv(
'MAT_PRAB', n12, is_available, lsubmodel, unitab)
109 CALL hm_get_floatv(
'MAT_PRBC', n23, is_available, lsubmodel, unitab)
110 CALL hm_get_floatv(
'MAT_PRCA', n31, is_available, lsubmodel, unitab)
111
112 CALL hm_get_floatv(
'MAT_GAB', g12, is_available, lsubmodel, unitab)
113 CALL hm_get_floatv(
'MAT_GBC', g23, is_available, lsubmodel, unitab)
114 CALL hm_get_floatv(
'MAT_GCA', g31, is_available, lsubmodel, unitab)
115
116 CALL hm_get_floatv(
'MAT_SIGT1', sigt1, is_available, lsubmodel, unitab)
117 CALL hm_get_floatv(
'MAT_SIGT2', sigt2, is_available, lsubmodel, unitab)
118 CALL hm_get_floatv(
'MAT_SIGT3', sigt3, is_available, lsubmodel, unitab)
119 CALL hm_get_floatv(
'MAT_DAMAGE', delta, is_available, lsubmodel, unitab)
120
121 CALL hm_get_floatv(
'MAT_BETA', cb, is_available, lsubmodel, unitab)
122 CALL hm_get_floatv(
'MAT_HARD', cn, is_available, lsubmodel, unitab)
123 CALL hm_get_floatv(
'MAT_SIG', sigmx, is_available, lsubmodel, unitab)
124 CALL hm_get_floatv(
'MAT_WPREF', wplaref, is_available, lsubmodel, unitab)
125
126 CALL hm_get_floatv(
'MAT_SIGYT1', sigyt1, is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'MAT_SIGYT2', sigyt2, is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'MAT_SIGYC1', sigyc1, is_available, lsubmodel, unitab)
129 CALL hm_get_floatv(
'MAT_SIGYC2', sigyc2, is_available, lsubmodel, unitab)
130
131 CALL hm_get_floatv(
'MAT_SIGT12', sysp12, is_available, lsubmodel, unitab)
132 CALL hm_get_floatv(
'MAT_SIGT23', sysn12, is_available, lsubmodel, unitab)
133 CALL hm_get_floatv(
'MAT_SIGC12', sysp23, is_available, lsubmodel, unitab)
134 CALL hm_get_floatv(
'MAT_SIGC23', sysn23, is_available, lsubmodel, unitab)
135
137 CALL hm_get_floatv(
'MAT_EFIB', efib, is_available, lsubmodel, unitab)
138 CALL hm_get_floatv(
'MAT_SRC', cc, is_available, lsubmodel, unitab)
139 CALL hm_get_floatv(
'MAT_SRP', eps0, is_available, lsubmodel, unitab)
140 CALL hm_get_intv(
'STRFLAG', icc, is_available, lsubmodel)
141
142 IF(e11==0..OR.e22==0..OR.e33==0.) THEN
144 . msgtype=msgerror,
145 . anmode=aninfo,
146 . i1=14,
147 . i2=mat_id,
148 . c1=titr,
149 . c2='E11, E22 or E33')
150 ENDIF
151 IF(n2d>0) THEN
153 . msgtype=msgerror,
154 . anmode=aninfo,
155 . i1=14,
156 . i2=mat_id,
157 . c1=titr)
158 ENDIF
159
160
161 IF(wplaref == zero) wplaref = one
162
164 IF(delta==zero)delta= fiveem2
165 IF(sigt1==zero)sigt1= infinity
166 IF(sigt2==zero)sigt2= sigt1
167 IF(sigt3==zero)sigt3= sigt1
168 ca=one
169 IF(cn==zero) cn = one
170 IF(sigmx==zero)sigmx= ep10
171 IF(cc==zero) eps0 = one
172 IF(icc==0.) icc = 1
173 epsfc=-infinity
174 epsft= infinity
175
176 WRITE(iout, 900) trim(titr),mat_id,14
177 WRITE(iout,1000)
178 IF(is_encrypted)THEN
179 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
180 ELSE
181 WRITE(iout,950)rho0
182 WRITE(iout,1100)e11,e22,e33
183 WRITE(iout,1200)n12,n23,n31
184 WRITE(iout,1300)g12,g23,g31
185 WRITE(iout,1400)sigt1,sigt2,sigt3,delta
186 WRITE(iout,1510)cb,cn,sigmx,wplaref
187 WRITE(iout,1550)sigyt1,sigyt2,sigyc1,sigyc2
188 WRITE(iout,1560)sysp12,sysn12,sysp23,sysn23
189 WRITE(iout,1610)
alpha,efib
190 WRITE(iout,1620)cc,eps0,icc
191 ENDIF
192
193 c11 = one/e11
194 c22 = one/e22
195 c33 = one/e33
196 c12 =-n12/e11
197 c13 =-n31/e33
198 c23 =-n23/e22
199
200
201
202 detc= c11*c22*c33-c11*c23*c23-c12*c12*c33+c12*c13*c23
203 + +c13*c12*c23-c13*c22*c13
204 IF(detc<=zero) THEN
206 . msgtype=msgerror,
207 . anmode=aninfo,
208 . i1=mat_id,
209 . c1=titr)
210 ENDIF
211 d11 = (c22*c33-c23*c23)/detc
212 d12 =-(c12*c33-c13*c23)/detc
213 d13 = (c12*c23-c13*c22)/detc
214 d22 = (c11*c33-c13*c13)/detc
215 d23 =-(c11*c23-c13*c12)/detc
216 d33 = (c11*c22-c12*c12)/detc
217 d21 = d12
218 d31 = d13
219 d32 = d23
220
221
222 a11 = c11*d11+c12*d21+c13*d31
223 a12 = c11*d12+c12*d22+c13*d32
224 a13 = c11*d13+c12*d23+c13*d33
225 a22 = c12*d12+c22*d22+c23*d23
226 a23 = c12*d13+c22*d23+c23*d33
227 a33 = c13*d13+c23*d23+c33*d33
228
229 pm(20)=
max(e11,e22,e33)
230 pm(21)= third*(n12+n31+n23)
231 pm(22)= third*(g12+g23+g31)
232 pm(25)= 1.
233 pm(26)= cb
234 pm(27)= cn
235
236 pm(28) =
max(onep0001,(sigmx/ca)**2)
237 c1 =
max(d11,d22,d33)
238 ssp = sqrt(c1/
max(pm(1),em20))
239 pm(32)= c1
240 pm(33)= sigt1
241 pm(34)= sigt2
242 pm(35)= sigt3
243 pm(36)= efib
244 pm(37)= epsft
245 pm(38)= epsfc
247
248
249
250
251 pm(40)= d11
252 pm(41)= d12
253 pm(42)= d13
254 pm(43)= d22
255 pm(44)= d23
256 pm(45)= d33
257 pm(46)= g12
258 pm(47)= g23
259 pm(48)= g31
260
261 pm(49)= ssp
262
263 ipm(252)=1
264 pm(105) =
min(d11*d22-d12**2,d22*d33-d23**2,d11*d33-d13**2)/c1**2
265
266
267
268 IF ( sigyt1==zero.OR.sigyt2==zero
269 . .OR.sigyc1==zero.OR.sigyc2==zero
270 . .OR.sysp12==zero.OR.sysp23==zero
271 . .OR.sysn12==zero.OR.sysn23==zero ) THEN
273 . msgtype=msgerror,
274 . anmode=aninfo,
275 . i1=mat_id,
276 . c1=titr)
277 ENDIF
278 f1 = one/sigyt1-one/sigyc1
279 f2 = one/sigyt2-one/sigyc2
280 f4 = one/sysp12-one/sysn12
281 f5 = one/sysp23-one/sysn23
282 f11 = one/(sigyt1*sigyc1)
283 f22 = one/(sigyt2*sigyc2)
284 f44 = one/(sysp12*sysn12)
285 f55 = one/(sysp23*sysn23)
286 f12 = -one/(two*sqrt(sigyt1*sigyc1*sigyt2*sigyc2))
287 f23 = -one/(two*sqrt(sigyt2*sigyc2*sigyt2*sigyc2))
288
289 ft1=f11*f22- four*f12**2
290 ft2=f22**2- four*f23**2
291 IF(is_encrypted)THEN
292 WRITE(iout,1650) f1,f2,f4,f5,f11,f22,f44,f55,f12,f23,ft1,ft2
293 ENDIF
294
295
296
297
298 pm(50)=cc
299 pm(51)=eps0
300 pm(52)=icc
301
302 IF(eps0==zero) THEN
304 . msgtype=msgerror,
305 . anmode=aninfo,
306 . i1=14,
307 . i2=mat_id,
308 . c1=titr)
309 ENDIF
310
311 pm(59)=f1
312 pm(60)=f2
313 pm(61)=f4
314 pm(62)=f5
315 pm(63)=f11
316 pm(64)=f22
317 pm(65)=f44
318 pm(66)=f55
319 pm(67)=f12
320 pm(68)=f23
321
322 pm(69)=c11
323 pm(73)=c22
324 pm(74)=c33
325 pm(75)=c12
326 pm(76)=c23
327 pm(77)=c13
328 pm(78)=delta
329 pm(98)=wplaref
330
331 IF(.NOT.is_encrypted)THEN
332 WRITE(iout,'(A)')' COMPOSITE CONSTITUTIVE LAW'
333 WRITE(iout,'( 1P3G20.13 )') pm(40),pm(41),pm(42)
334 WRITE(iout,'(20X,1P2G20.13 )') pm(43),pm(44)
335 WRITE(iout,'(40X, 1PG20.13/)') pm(45)
336 ENDIF
337
338
339
340
341 mtag%G_PLA = 1
342
343 mtag%L_PLA = 1
344 mtag%L_SIGF = 1
345 mtag%L_EPSF = 1
346 mtag%L_DAM = 5
347 mtag%L_EPE = 6
348 mtag%G_TSAIWU = 1
349 mtag%L_TSAIWU = 1
350
351
354
355
358
359
362
363 RETURN
364
365 900 FORMAT(/
366 & 5x,a,/,
367 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . . . .=',i10/,
368 & 5x,'MATERIAL LAW . . . . . . . . . . . . . . . .=',i10/)
369 950 FORMAT(
370 & 5x,'INITIAL DENSITY . . . . . . . . . . . . .=',1pg20.13/)
371 1000 FORMAT(
372 & 5x,' ORTHOTROPIC MATERIAL WITH FIBERS ',/,
373 & 5x,' --------------------------------- ',//)
374 1100 FORMAT(
375 & 5x,'YOUNG MODULUS E11 . . . . . . . . . .=',1pg20.13/,
376 & 5x,'YOUNG MODULUS E22 . . . . . . . . . .=',1pg20.13/,
377 & 5x,'YOUNG MODULUS E33 . . . . . . . . . .=',1pg20.13//)
378 1200 FORMAT(
379 & 5x,'POISSON RATIO N12 . . . . . . . . . .=',1pg20.13/,
380 & 5x,'POISSON RATIO N23 . . . . . . . . . .=',1pg20.13/,
381 & 5x,'POISSON RATIO N31 . . . . . . . . . .=',1pg20.13//)
382 1300 FORMAT(
383 & 5x,'SHEAR MODULUS G12 . . . . . . . . . .=',1pg20.13/,
384 & 5x,'SHEAR MODULUS G23 . . . . . . . . . .=',1pg20.13/,
385 & 5x,'SHEAR MODULUS G31 . . . . . . . . . .=',1pg20.13//)
386 1400 FORMAT(
387 & 5x,'MATRIX TENSILE FAILURE STRESS DIR-1 . .=',1pg20.13/,
388 & 5x,'MATRIX TENSILE FAILURE STRESS DIR-2 . .=',1pg20.13/,
389 & 5x,'MATRIX TENSILE FAILURE STRESS DIR-3 . .=',1pg20.13/,
390 & 5x,'DAMAGE PARAMETER . . . . . . . . . . . =',1pg20.13//)
391 1500 FORMAT(
392 & 5x,'COMPOSITE YIELD STRESS (A) . . . . . .=',1pg20.13/,
393 & 5x,'COMPOSITE HARDENING PARAMETER (B). . .=',1pg20.13/,
394 & 5x,'COMPOSITE HARDENING PARAMETER (N). . .=',1pg20.13/,
395 & 5x,'COMPOSITE MAXIMUM STRESS. . . . . . . .=',1pg20.13//)
396 1510 FORMAT(
397 & 5x,'COMPOSITE HARDENING PARAMETER (B). . .=',1pg20.13/,
398 & 5x,'COMPOSITE HARDENING PARAMETER (N). . .=',1pg20.13/,
399 & 5x,'COMPOSITE MAXIMUM YIELD FUNCTION FMAX .=',1pg20.13/,
400 & 5x,'REFERENCE PLASTIC WORK WPLAREF .=',1pg20.13//)
401 1550 FORMAT(
402 & 5x,'COMPOSITE YIELD IN TRACTION (1) . . . . . . .=',1pg20
403 & 5x,'COMPOSITE YIELD IN TRACTION (2-3) . . . . . .=',1pg20.13/,
404 & 5x,'COMPOSITE YIELD IN COMPRESSION (1) . . . . .=',1pg20.13/,
405 & 5x,'COMPOSITE YIELD IN COMPRESSION (2-3) . . . . =',1pg20.13//)
406 1560 FORMAT(
407 & 5x,'COMPOSITE YIELD IN SHEAR (+12) . . . .=',1pg20.13/,
408 & 5x,'COMPOSITE YIELD IN SHEAR (-12) . . . .=',1pg20.13/,
409 & 5x,'COMPOSITE YIELD IN SHEAR (+23) . . . .=',1pg20.13/,
410 & 5x,'COMPOSITE YIELD IN SHEAR (-23) . . . .=',1pg20.13//)
411 1600 FORMAT(
412 & 5x,'FIBER VOLUME FRACTION . . . . . . . . .=',1pg20.13/,
413 & 5x,'FIBER MODULUS . . . . . . . . . . . . .=',1pg20.13/,
414 & 5x,'FIBER TENSILE FAILURE STRAIN. . . . . .=',1pg20.13/,
415 & 5x,'FIBER COMPRESSIVE FAILURE STRAIN. . . .=',1pg20.13//)
416 1610 FORMAT(
417 & 5x,'FIBER VOLUME FRACTION . . . . . . . . .=',1pg20.13/,
418 & 5x,'FIBER MODULUS . . . . . . . . . . . . .=',1pg20.13//)
419 1620 FORMAT(
420 & 5x,'STRAIN RATE COEFFICIENT CC. . . . . . .=',1pg20.13/,
421 & 5x,'REFERENCE STRAIN RATE . . . . . . . . .=',1pg20.13/,
422 & 5x,'flag
for strain rate on f-
max wp-
max. .=
',I10//)
423 1650 FORMAT(
424 & 5X,' yield FUNCTION constants ,'/,
425 & 5X,' ------------------------ ,'//,
426 & 5X,'f1 , f2 . . . . . . . . . . . . . . . .=',2E12.4/,
427 & 5X,'f4 , f5 . . . . . . . . . . . . . . . .=',2E12.4/,
428 & 5X,'f11, f22. . . . . . . . . . . . . . . .=',2E12.4/,
429 & 5X,'f44, f55. . . . . . . . . . . . . . . .=',2E12.4/,
430 & 5X,'f12, f23. . . . . . . . . . . . . . . .=',2E12.4/,
431 & 5X,'ft1, ft2. . . . . . . . . . . . . . . ',2E12.4//)
432
433 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine init_mat_keyword(matparam, keyword)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)