41
42
43
48 USE matparam_def_mod
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64#include "implicit_f.inc"
65
66
67
68#include "com01_c.inc"
69#include "units_c.inc"
70#include "param_c.inc"
71
72
73
74 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
75 INTEGER, INTENT(IN) :: MAT_ID
76 INTEGER, INTENT(INOUT) :: ISRATE
77 INTEGER, DIMENSION(NPROPMI) ,INTENT(INOUT) :: IPM
78 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
79 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
80 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
81 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
82 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
83
84
85
86 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
87 INTEGER ICC,IFLAG
89 . n12, n23, n31, e11, e22, e33, g12, g23, g31, sigt1, sigt2,
90 . sigt3, delta, ca, cb, cn, fmax, sigyt1, sigyt2, sigyc1,
91 . sigyc2,sigyt3,sigyc3,sigyt12, sigyc12, sigyt23, sigyc23,
92 . sigy12t,sigyt13, sigyc13, f3,f33,
93 . f6,f66,f13,
alpha, efib, epsft,
94 . epsfc, c11, c22, c33, c12, c13, c23, detc, d11, d12, d13, d22,
95 . d23, d33, d21, d31, d32, a11, a12, a13, a22, a23, a33, c1, ssp,
96 . f1, f2, f4, f5, f11, f22, f44, f55, f12, f23, ft1, ft2,
97 . cc,eps0,dmin,wplaref,rhor,rho0
98 CHARACTER*64 :: chain
99
100
101
102 is_encrypted = .false.
103 is_available = .false.
104 israte = 0
105
107
108 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
109 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
110
111 CALL hm_get_floatv(
'MAT_EA' ,e11 ,is_available, lsubmodel, unitab)
112 CALL hm_get_floatv(
'MAT_EB' ,e22 ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv(
'MAT_EC' ,e33 ,is_available, lsubmodel, unitab)
114
115 CALL hm_get_floatv(
'MAT_PRAB' ,n12 ,is_available, lsubmodel, unitab)
117 CALL hm_get_floatv(
'MAT_PRCA' ,n31 ,is_available, lsubmodel, unitab)
118
119 CALL hm_get_floatv(
'MAT_GAB' ,g12 ,is_available, lsubmodel, unitab)
120 CALL hm_get_floatv(
'MAT_GBC' ,g23 ,is_available, lsubmodel, unitab)
121 CALL hm_get_floatv(
'MAT_GCA' ,g31 ,is_available, lsubmodel, unitab)
122
123 CALL hm_get_floatv(
'MAT_SIGT1' ,sigt1 ,is_available, lsubmodel, unitab)
124 CALL hm_get_floatv(
'MAT_SIGT2' ,sigt2 ,is_available, lsubmodel, unitab)
125 CALL hm_get_floatv(
'MAT_SIGT3' ,sigt3 ,is_available, lsubmodel, unitab)
126 CALL hm_get_floatv(
'MAT_DAMAGE' ,delta ,is_available, lsubmodel, unitab)
127
128 CALL hm_get_floatv(
'MAT_BETA' ,cb ,is_available, lsubmodel, unitab)
129 CALL hm_get_floatv(
'MAT_HARD' ,cn ,is_available, lsubmodel, unitab
131 CALL hm_get_floatv(
'WPREF' ,wplaref ,is_available, lsubmodel, unitab
132
133 CALL hm_get_floatv(
'MAT_SIGYT1' ,sigyt1 ,is_available, lsubmodel, unitab
134 CALL hm_get_floatv(
'MAT_SIGYT2' ,sigyt2 ,is_available, lsubmodel, unitab
135 CALL hm_get_floatv(
'MAT_SIGYC1' ,sigyc1 ,is_available, lsubmodel, unitab
136 CALL hm_get_floatv(
'MAT_SIGYC2' ,sigyc2 ,is_available, lsubmodel, unitab
137
139 CALL hm_get_floatv(
'MAT_SIGC12' ,sigyc12 ,is_available, lsubmodel, unitab)
140 CALL hm_get_floatv(
'MAT_SIGT23' ,sigyt23 ,is_available, lsubmodel, unitab)
141 CALL hm_get_floatv(
'MAT_SIGC23' ,sigyc23 ,is_available, lsubmodel, unitab)
142
143 CALL hm_get_floatv(
'MAT_SIGYT3' ,sigyt3 ,is_available, lsubmodel, unitab)
144 CALL hm_get_floatv(
'MAT_SIGYC3' ,sigyc3 ,is_available, lsubmodel, unitab)
145 CALL hm_get_floatv(
'MAT_SIGYT13' ,sigyt13 ,is_available, lsubmodel, unitab)
146 CALL hm_get_floatv(
'MAT_SIGYC13' ,sigyc13 ,is_available, lsubmodel, unitab)
147
149 CALL hm_get_floatv(
'MAT_EFIB' ,efib ,is_available, lsubmodel, unitab)
150 CALL hm_get_floatv(
'MAT_SRC' ,cc ,is_available, lsubmodel, unitab)
151 CALL hm_get_floatv(
'MAT_SRP' ,eps0 ,is_available, lsubmodel, unitab)
152
153 CALL hm_get_intv (
'STRFLAG' ,icc ,is_available,lsubmodel)
154
155 IF (rhor==zero) rhor=rho0
156 pm(1) = rhor
157 pm(89)= rho0
158
159 IF(e11 == zero .OR.e22 == zero .OR. e33 == zero) THEN
161 . msgtype=msgerror,
162 . anmode=aninfo,
163 . i1=12,
164 . i2=mat_id,
165 . c1=titr,
166 . c2='E11, E22 or E33')
167 ENDIF
168 IF(n2d > 0) THEN
170 . msgtype=msgerror,
171 . anmode=aninfo,
172 . i1=12,
173 . i2=mat_id,
174 . c1=titr)
175 ENDIF
176
177
178
179 IF(wplaref == zero) wplaref = one
181 IF(delta==zero)delta= fiveem2
182 IF(sigt1==zero)sigt1= infinity
183 IF(sigt2==zero)sigt2= sigt1
184 IF(sigt3==zero)sigt3= sigt1
185 IF(sigyt1==zero)sigyt1= infinity
186 IF(sigyc1==zero)sigyc1= sigyt1
187 IF(sigyt2==zero)sigyt2= sigyt1
188 IF(sigyc2==zero)sigyc2= sigyc1
189 IF(sigyt3 == zero) sigyt3 = sigyt2
190 IF(sigyc3 == zero) sigyc3 = sigyc2
191 IF(sigyt12 == zero) sigyt12 = infinity
192 IF(sigyc12 == zero) sigyc12 = infinity
193 IF(sigyt23 == zero) sigyt23 = infinity
194 IF(sigyc23 == zero) sigyc23 = infinity
195 IF(sigyt13 == zero) sigyt13 = sigyt12
196 IF(sigyc13 == zero) sigyc13 = sigyc12
197 ca=one
198 IF(cn==zero) cn = one
199 IF(fmax==zero)fmax= ep10
200 IF(cc==zero) eps0 = one
201 IF(icc==0.) icc = 1
202 epsfc=-infinity
203 epsft= infinity
204
205 WRITE(iout,1001) trim(titr),mat_id,12
206 WRITE(iout,1000)
207 IF(is_encrypted)THEN
208 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
209 ELSE
210 WRITE(iout,1002) rho0,rhor
211 WRITE(iout,1100) e11,e22,e33
212 WRITE(iout,1200) n12,n23,n31
213 WRITE(iout,1300) g12,g23,g31
214 WRITE(iout,1400) sigt1,sigt2,sigt3,delta
215 WRITE(iout,1510) cb,cn,fmax,wplaref
216 WRITE(iout,1550) sigyt1,sigyt2,sigyc1,sigyc2
217 WRITE(iout,1560) sigyt12,sigyc12,sigyt23,sigyc23
218 WRITE(iout,1610)
alpha,efib
219 WRITE(iout,1620) cc,eps0,icc
220 ENDIF
221
222 c11 = one/e11
223 c22 = one/e22
224 c33 = one/e33
225 c12 =-n12/e11
226 c13 =-n31/e33
227 c23 =-n23/e22
228
229
230
231 detc= c11*c22*c33-c11*c23*c23-c12*c12*c33+c12*c13*c23
232 + +c13*c12*c23-c13*c22*c13
233 IF(detc <= zero) THEN
235 . msgtype=msgerror,
236 . anmode=aninfo,
237 . i1=mat_id,
238 . c1=titr)
239 ENDIF
240 d11 = (c22*c33-c23*c23)/detc
241 d12 =-(c12*c33-c13*c23)/detc
242 d13 = (c12*c23-c13*c22)/detc
243 d22 = (c11*c33-c13*c13)/detc
244 d23 =-(c11*c23-c13*c12)/detc
245 d33 = (c11*c22-c12*c12)/detc
246 d21 = d12
247 d31 = d13
248 d32 = d23
249
250
251 a11 = c11*d11+c12*d21+c13*d31
252 a12 = c11*d12+c12*d22+c13*d32
253 a13 = c11*d13+c12*d23+c13*d33
254 a22 = c12*d12+c22*d22+c23*d23
255 a23 = c12*d13+c22*d23+c23*d33
256 a33 = c13*d13+c23*d23+c33*d33
257
258 pm(20)=
max(e11,e22,e33)
259 pm(21)= third*(n12+n31+n23)
260 pm(22)= third*(g12+g23+g31)
261 pm(25)= 1.
262 pm(26)= cb
263 pm(27)= cn
264
265 pm(28) =
max(onep0001,fmax)
266 c1 =
max(d11,d22,d33)
267 ssp = sqrt(c1/
max(pm(1),em20))
268 pm(32)= c1
269 pm(37)=-infinity
270 pm(38)= efib
272
273
274
275
276 pm(40)= d11
277 pm(41)= d12
278 pm(42)= d13
279 pm(43)= d22
280 pm(44)= d23
281 pm(45)= d33
282 pm(46)= g12
283 pm(47)= g23
284 pm(48)= g31
285
286 pm(49)= ssp
287 pm(68)=wplaref
288
289
290
291
292 f1 = one/sigyt1-one/sigyc1
293 f2 = one/sigyt2-one/sigyc2
294 f3 = one/sigyt3-one/sigyc3
295 f4 = one/sigyt12-one/sigyc12
296 f5 = one/sigyt23-one/sigyc23
297 f6 = one/sigyt13-one/sigyc13
298 f11 = one/(sigyt1*sigyc1)
299 f22 = one/(sigyt2*sigyc2)
300 f33 = one/(sigyt3*sigyc3)
301 f44 = one/(sigyt12*sigyc12)
302 f55 = one/(sigyt23*sigyc23)
303 f66 = one/(sigyt13*sigyc13)
304 f12 = -half/sqrt(sigyt1*sigyc1*sigyt2*sigyc2)
305 f23 = -half/sqrt(sigyt2*sigyc2*sigyt3*sigyc3)
306 f13= - half/sqrt(sigyt1*sigyc1*sigyt3*sigyc3)
307 ft1=f11*f22- four*f12**2
308 ft2=f22**2- four*f23**2
309 IF(.NOT.is_encrypted)THEN
310 WRITE(iout,1650) f1,f2,f3,f4,f5,f6,f11,f22,f33,f44,f55,f66,f12,f23,f13,ft1,ft2
311 ENDIF
312 pm(50)=cc
313 pm(51)=eps0
314 pm(52)=icc
315 IF(eps0==zero) THEN
317 . msgtype=msgerror,
318 . anmode=aninfo,
319 . i1=12,
320 . i2=mat_id,
321 . c1=titr)
322 ENDIF
323 pm(53)=f1
324 pm(54)=f2
325 pm(55)=f3
326 pm(56)=f4
327 pm(57)=f5
328 pm(58)=f6
329 pm(59)=f11
330 pm(60)=f22
331 pm(61)=f33
332 pm(62)=f44
333 pm(63)=f55
334 pm(64)=f66
335 pm(65)=f12
336 pm(66)= f23
337 pm(67)= f13
338 pm(73)=c11
339 pm(74)=c22
340 pm(75)=c33
341 pm(76)=c12
342 pm(77)=c23
343 pm(78)=c13
344 pm(79)=delta
345 pm(81)= sigt1
346 pm(82)= sigt2
347 pm(83)= sigt3
348 pm(84)= epsft
349 pm(85)= epsfc
350
351 ipm(252)=1
352 dmin =
min(d11*d22-d12**2,d22*d33-d23**2,d11*d33-d13**2)
353 pm(105) =dmin/c1**2
354
355
356
357
358 mtag%G_PLA = 1
359 mtag%L_PLA = 1
360 mtag%L_SIGF = 1
361 mtag%L_EPSF = 1
362 mtag%L_DAM = 5
363 mtag%L_EPE = 6
364 mtag%G_TSAIWU = 1
365 mtag%L_TSAIWU = 1
366
367!-------------------------------------------------------------
368 matparam%IEOS
369
370 ! matparam keywords
371
374
375
378
379
381
384
385 IF(.NOT.is_encrypted)THEN
386 WRITE(iout,'(A)')' COMPOSITE CONSTITUTIVE LAW'
387 WRITE(iout,'( 1P3G20.13 )') pm(40),pm(41),pm(42)
388 WRITE(iout,'(20X,1P2G20.13 )') pm(43),pm(44)
389 WRITE(iout,'(40X, 1PG20.13/)') pm(45)
390 ENDIF
391
392 RETURN
393
394 1000 FORMAT(
395 & 5x,' ORTHOTROPIC MATERIAL WITH FIBERS ',/,
396 & 5x,' --------------------------------- ',//)
397 1001 FORMAT(/
398 & 5x,a,/,
399 & 5x,'MATERIAL NUMBER . . . . . . . . . . . .=',i10/,
400 & 5x,'MATERIAL LAW. . . . . . . . . . . . . .=',i10/)
401 1002 FORMAT(
402 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/,
403 & 5x,'REFERENCE DENSITY . . . . . . . . . . .=',1pg20.13)
404 1100 FORMAT(
405 & 5x,'YOUNG MODULUS E11 . . . . . . . . . . .=',1pg20.13/,
406 & 5x,'YOUNG MODULUS E22 . . . . . . . . . . .=',1pg20.13/,
407 & 5x,'YOUNG MODULUS E33 . . . . . . . . . . .=',1pg20.13//)
408 1200 FORMAT(
409 & 5x,'POISSON RATIO N12 . . . . . . . . . . .=',1pg20.13/,
410 & 5x,'POISSON RATIO N23 . . . . . . . . . . .=',1pg20.13/,
411 & 5x,'POISSON RATIO N31 . . . . . . . . . . .=',1pg20.13//)
412 1300 FORMAT(
413 & 5x,'SHEAR MODULUS G12 . . . . . . . . . .=',1pg20.13/,
414 & 5x,'SHEAR MODULUS G23 . . . . . . . . . .=',1pg20.13/,
415 & 5x,'SHEAR MODULUS G31 . . . . . . . . . .=',1pg20.13//)
416 1400 FORMAT(
417 & 5x,'MATRIX TENSILE FAILURE STRESS DIR-1 . .=',1pg20.13/,
418 & 5x,'MATRIX TENSILE FAILURE STRESS DIR-2 . .=',1pg20.13/,
419 & 5x,'MATRIX TENSILE FAILURE STRESS DIR-3 . .=',1pg20.13/,
420 & 5x,'DAMAGE PARAMETER . . . . . . . . . . . =',1pg20.13//)
421 1500 FORMAT(
422 & 5x,'COMPOSITE YIELD STRESS (A) . . . . . .=',1pg20.13/,
423 & 5x,'COMPOSITE HARDENING PARAMETER (B). . .=',1pg20.13/,
424 & 5x,'COMPOSITE HARDENING PARAMETER (N). . .=',1pg20.13/,
425 & 5x,'COMPOSITE MAXIMUM STRESS. . . . . . . .=',1pg20.13//)
426 1510 FORMAT(
427 & 5x,'COMPOSITE HARDENING PARAMETER (B). . .=',1pg20.13/,
428 & 5x,'COMPOSITE HARDENING PARAMETER (N). . .=',1pg20.13/,
429 & 5x,'COMPOSITE MAXIMUM YIELD FUNCTION FMAX .=',1pg20.13/,
430 & 5x,'REFERENCE PLASTIC WORK WPLAREF .=',1pg20.13//)
431 1550 FORMAT(
432 & 5x,'COMPOSITE YIELD IN TRACTION (1) . . . .=',1pg20.13/,
433 & 5x,'COMPOSITE YIELD IN TRACTION (2-3) . . =',1pg20.13/,
434 & 5x,'COMPOSITE YIELD IN COMPRESSION (1) . =',1pg20.13/,
435 & 5x,'COMPOSITE YIELD IN COMPRESSION (2-3). =',1pg20.13//)
436 1560 FORMAT(
437 & 5x,'COMPOSITE YIELD IN SHEAR (+12) . . . . =',1pg20.13/,
438 & 5x,'COMPOSITE YIELD IN SHEAR (-12) . . . . =',1pg20.13/,
439 & 5x,'COMPOSITE YIELD IN SHEAR (+23) . . . . =',1pg20.13/,
440 & 5x,'COMPOSITE YIELD IN SHEAR (-23) . . . . =',1pg20.13//)
441 1600 FORMAT(
442 & 5x,'FIBER VOLUME FRACTION . . . . . . . . .=',1pg20.13/,
443 & 5x,'FIBER MODULUS . . . . . . . . . . . . .=',1pg20.13/,
444 & 5x,'FIBER TENSILE FAILURE STRAIN. . . . . .=',1pg20.13/,
445 & 5x,'FIBER COMPRESSIVE FAILURE STRAIN. . . .=',1pg20.13//)
446 1610 FORMAT(
447 & 5x,'FIBER VOLUME FRACTION . . . . . . . . .=',1pg20.13/,
448 & 5x,'FIBER MODULUS . . . . . . . . . . . . .=',1pg20.13//)
449 1620 FORMAT(
450 & 5x,'STRAIN RATE COEFFICIENT CC. . . . . . .=',1pg20.13/,
451 & 5x,'REFERENCE STRAIN RATE . . . . . . . . .=',1pg20.13/,
452 & 5x,'FLAG FOR STRAIN RATE ON F-MAX Wp-MAX. .=',i10//)
453 1650 FORMAT(
454 & 5x,' YIELD FUNCTION CONSTANTS ,'/,
455 & 5x,' ------------------------ ,'//,
456 & 5x,'F1 , F2 , F3 . . . . . . . . . . . . .=',3e12.4/,
457 & 5x,'F4 , F5 , F6. . . . . . . . . . . . . .=',3e12.4/,
458 & 5x,'F11, F22, F33 . . . . . . . . . . . . =',3e12.4/,
459 & 5x,'F44, F55, F66 . . . . . . . . . . . . . =',3e12.4/,
460 & 5x,'F12, F23, F13 . . . . . . . . . . . . ..=',3e12.4/,
461 & 5x,'FT1, FT2. . . . . . . . . . . . . . . .=',2e12.4//)
462 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)
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)