23!||====================================================================
25!||--- called by ------------------------------------------------------
38 SUBROUTINE hm_read_mat15(
39 . LSUBMODEL,MTAG ,UNITAB ,IPM ,PM ,
40 . MAT_ID ,TITR ,MATPARAM ,ISRATE ,PARMAT )
57#include "implicit_f.inc"
66 TYPE(SUBMODEL_DATA),
INTENT(IN) :: LSUBMODEL(*)
67 TYPE(MLAW_TAG_),
INTENT(INOUT) :: MTAG
68 CHARACTER(LEN=NCHARTITLE),
INTENT(IN) :: TITR
69 TYPE (UNIT_TYPE_),
INTENT(IN) ::
70 INTEGER,
INTENT(IN) :: MAT_ID
71 INTEGER,
INTENT(INOUT) :: IPM(NPROPMI),ISRATE
72 my_real,
INTENT(INOUT) :: pm(npropm)
73 TYPE(MATPARAM_STRUCT_) ,
INTENT(INOUT) :: MATPARAM
74 my_real,
DIMENSION(100),
INTENT(INOUT) :: parmat
78 INTEGER IOFF,ICC,IFLAG
80 . n12, n21, e11, e22, g12, g23, g31, epst1, epst2, cb, cn,
81 . fmax, sigyt1, sigyt2, sigyc1, sigyc2, sigyt12, sigyc12,
82 . c1, ssp, f1, f2, f11, f22, f33, f12, ft1, wplamx,
83 . epsm1, epsm2, dmax, shrdam, shrmax, shrdmax,
alpha,cc,eps0,
84 . cbt1,cnt1,sigmxt1,cct1,cbt2,cnt2,sigmxt2,cct2,detc, de,
85 . cbc1,cnc1,sigmxc1,ccc1,cbc2,cnc2,sigmxc2,ccc2,fcut,
86 . cbt12,cnt12,sigmxt12,cct12,cbc12,cnc12,sigmxc12,ccc12,
87 . eps1t1,eps2t1,sigrst1,wplamxt1,eps1t2,eps2t2,sigrst2,
88 . wplamxt2,eps1c1,eps2c1,sigrsc1,wplamxc1,eps1c2,eps2c2,
89 . sigrsc2,wplamxc2,eps1t12,eps2t12,sigrst12,wplamxt12,
90 . beta, tmax,s1,s2,s12,c11,c22,wplaref,rho0,rhor
91 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE
98 is_encrypted = .false.
99 is_available = .false.
103 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
104 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
105 IF (rhor == zero)
THEN
129 CALL hm_get_floatv(
'MAT_EA', e11, is_available, lsubmodel, unitab)
130 CALL hm_get_floatv('mat_eb
', E22, IS_AVAILABLE, LSUBMODEL, UNITAB)
131 CALL HM_GET_FLOATV('mat_prab
', N12, IS_AVAILABLE, LSUBMODEL, UNITAB)
133 CALL HM_GET_FLOATV('mat_gab
', G12, IS_AVAILABLE, LSUBMODEL, UNITAB)
134 CALL HM_GET_FLOATV('mat_gbc
', G23, IS_AVAILABLE, LSUBMODEL, UNITAB)
135 CALL HM_GET_FLOATV('mat_gca
', G31, IS_AVAILABLE, LSUBMODEL, UNITAB)
137 CALL HM_GET_FLOATV('mat_beta
', CB, IS_AVAILABLE, LSUBMODEL, UNITAB)
138 CALL HM_GET_FLOATV('mat_hard
', CN, IS_AVAILABLE, LSUBMODEL, UNITAB)
139 CALL HM_GET_FLOATV('mat_sig
', FMAX, IS_AVAILABLE, LSUBMODEL, UNITAB)
141 CALL HM_GET_FLOATV('wpmax
', WPLAMX, IS_AVAILABLE, LSUBMODEL, UNITAB)
142 CALL HM_GET_FLOATV('wpref
', WPLAREF, IS_AVAILABLE, LSUBMODEL, UNITAB)
143 CALL HM_GET_INTV('itype
', IOFF, IS_AVAILABLE, LSUBMODEL)
145 CALL HM_GET_FLOATV('mat_sigyt1
', SIGYT1, IS_AVAILABLE, LSUBMODEL, UNITAB)
146 CALL HM_GET_FLOATV('mat_sigyt2
', SIGYT2, IS_AVAILABLE, LSUBMODEL, UNITAB)
147 CALL HM_GET_FLOATV('mat_sigyc1
', SIGYC1, IS_AVAILABLE, LSUBMODEL, UNITAB)
148 CALL HM_GET_FLOATV('mat_sigyc2
', SIGYC2, IS_AVAILABLE, LSUBMODEL, UNITAB)
149 CALL HM_GET_FLOATV('mat_alpha
', ALPHA, IS_AVAILABLE, LSUBMODEL, UNITAB)
151 CALL HM_GET_FLOATV('mat_sigc12
', SIGYT12, IS_AVAILABLE, LSUBMODEL, UNITAB)
152 CALL HM_GET_FLOATV('mat_sigt12
', SIGYC12, IS_AVAILABLE, LSUBMODEL, UNITAB)
153 CALL HM_GET_FLOATV('mat_src
', CC, IS_AVAILABLE, LSUBMODEL, UNITAB)
154 CALL HM_GET_FLOATV('mat_srp
', EPS0, IS_AVAILABLE, LSUBMODEL, UNITAB)
155 CALL HM_GET_INTV('strflag
', ICC, IS_AVAILABLE, LSUBMODEL)
157 CALL HM_GET_FLOATV('mat_beta
', BETA, IS_AVAILABLE, LSUBMODEL, UNITAB)
158 CALL HM_GET_FLOATV('mat_tmax
', TMAX, IS_AVAILABLE, LSUBMODEL, UNITAB)
159 CALL HM_GET_FLOATV('mchang_s1
', S1, IS_AVAILABLE, LSUBMODEL, UNITAB)
160 CALL HM_GET_FLOATV('mchang_s2
', S2, IS_AVAILABLE, LSUBMODEL, UNITAB)
161 CALL HM_GET_FLOATV('mchang_s12
', S12, IS_AVAILABLE, LSUBMODEL, UNITAB)
163 CALL HM_GET_INTV('fsmooth
', ISRATE, IS_AVAILABLE, LSUBMODEL)
164 CALL HM_GET_FLOATV('fcut
', FCUT, IS_AVAILABLE, LSUBMODEL, UNITAB)
165 CALL HM_GET_FLOATV('mchang_c1
', C11, IS_AVAILABLE, LSUBMODEL, UNITAB)
166 CALL HM_GET_FLOATV('mchang_c2
', C22, IS_AVAILABLE, LSUBMODEL, UNITAB)
168.OR..OR.
IF(E11==ZERO E22==ZERO
169.OR..OR.
& G12==ZERO G23==ZERO G31==ZERO) THEN
170 CALL ANCMSG(MSGID=306,
176 . C2='e11, e22, g12, g23, g31
')
179.AND..AND.
IF(CC > ZERO EPS0 > ZERO ISRATE == 0) THEN
180 CALL ANCMSG(MSGID=1220,
181 . MSGTYPE=MSGWARNING,
182 . ANMODE=ANINFO_BLIND_1,
187.AND..AND.
IF (ICC/=2ISRATE==0FCUT/=ZERO) ISRATE=1
188.AND.
IF (ISRATE > 0 FCUT == ZERO) FCUT = INFINITY
189 IF(CN==ZERO) CN = ONE
190 IF(FMAX==ZERO) FMAX = INFINITY
191 IF(WPLAMX==ZERO)WPLAMX = INFINITY
192 IF (WPLAREF == ZERO) WPLAREF = ONE
193 WPLAMX = WPLAMX / WPLAREF
194 IF(ALPHA==ZERO)ALPHA = ONE
195 IF(CC==ZERO) EPS0 = ONE
196 IF(ICC==ZERO) ICC = 1
198.AND..AND..AND.
IF(S1==ZEROS2==ZEROS12==ZERO
199.AND.
. C11==ZEROC22==ZERO) IFLAG = 1
201 IF(S1==ZERO) S1 = INFINITY
202 IF(S2==ZERO) S2 = INFINITY
203 IF(S12==ZERO) S12 = INFINITY
204 IF(C11==ZERO) C11= INFINITY
205 IF(C22==ZERO) C22= INFINITY
207 IF(TMAX==ZERO)WRITE(*,*)'stop error in tmax input
'
212 CALL ANCMSG(MSGID=307,
220 CALL ANCMSG(MSGID=213,
229 WRITE(IOUT, 900) TRIM(TITR),MAT_ID,15
232 WRITE(IOUT,'(5x,a,//)
')'confidential data
'
234 WRITE(IOUT, 950) RHO0
235 WRITE(IOUT,1100)E11,E22,N12
236 WRITE(IOUT,1300)G12,G23,G31
238 WRITE(IOUT,1510)CB,CN,FMAX,WPLAMX,WPLAREF,IOFF
239 WRITE(IOUT,1550)SIGYT1,SIGYT2,SIGYC1,SIGYC2,ALPHA
240 WRITE(IOUT,1560)SIGYT12,SIGYC12
241 WRITE(IOUT,1610)CC,EPS0,ICC
242 WRITE(IOUT,1611) ISRATE,FCUT
243 WRITE(IOUT,1600)BETA, TMAX
244 WRITE(IOUT,2700) S1,S2,S12,C11,C22
247 PM(20)= MAX(E11,E22)/DETC
264 PM(22)= THIRD*(G12+G23+G31)
266 C1 = MAX(E11,E22)/DETC
267 SSP = SQRT(MAX(C1,G12,G23,G31)/MAX(PM(1),EM20))
270 PM(52)=ONEP414*PM(17)*PM(1)*SSP
278 CALL ANCMSG(MSGID=538,
286 CALL ANCMSG(MSGID=538,
294 CALL ANCMSG(MSGID=538,
302 CALL ANCMSG(MSGID=538,
309 IF (SIGYT12<=0.) THEN
310 CALL ANCMSG(MSGID=538,
317 IF (SIGYC12<=0.) THEN
318 CALL ANCMSG(MSGID=538,
326.AND.
IF((SIGYC1>0.)(SIGYC2>0.))THEN
327 F1 = ONE/SIGYT1-ONE/SIGYC1
328 F2 = ONE/SIGYT2-ONE/SIGYC2
329 F11 = ONE/(SIGYT1*SIGYC1)
330 F22 = ONE/(SIGYT2*SIGYC2)
331 F33 = ONE/(SIGYT12*SIGYC12)
332 F12 = -ALPHA/(TWO*SQRT(SIGYT1*SIGYC1*SIGYT2*SIGYC2))
334 FT1=F11*F22-FOUR*F12**2
336 WRITE(IOUT,1650) F1,F2,F11,F22,F33,F12
363 CALL ANCMSG(MSGID=298,
387 MTAG%L_PLA = 1 ! NB10
392 CALL INIT_MAT_KEYWORD(MATPARAM,"ORTHOTROPIC")
394 ! Properties compatibility
395 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ORTHOTROPIC")
398 CALL INIT_MAT_KEYWORD(MATPARAM,"ELASTO_PLASTIC")
399 CALL INIT_MAT_KEYWORD(MATPARAM,"COMPRESSIBLE")
404 & 5X,'material number. . . . . . . . . . . . . . .=
',I10/,
405 & 5X,'material law . . . . . . . . . . . . . . . .=
',I10/)
407 & 5X,'initial density . . . . . . . . . . . . .=
',1PG20.13/)
409 & 5X,40H ORTHOTROPIC MATERIAL FOR SHELLS ,/,
410 & 5X,40H ------------------------------- ,//)
412 & 5X,40HYOUNG's modulus e11 . . . . . . . . . .=,e12.4/,
413 & 5x,40hyoung
'S MODULUS E22 . . . . . . . . . .=,E12.4/,
414 & 5X,40HPOISSON's ratio n12 . . . . . . . . . .=,e12.4/)
416 & 5x,40hshear modulus g12 . . . . . . . . . .=,e12.4/,
417 & 5x,40hshear modulus g23 . . . . . . . . . .=,e12.4/,
418 & 5x,40hshear modulus g31 . . . . . . . . . .=,e12.4/)
421 & 5x,
'COMPOSITE HARDENING PARAMETER (B). . .=',1pg20.13/,
422 & 5x,
'COMPOSITE HARDENING PARAMETER (N). . .=',1pg20.13/,
423 & 5x,
'COMPOSITE MAXIMUM YIELD FUNCTION FMAX .=',1pg20.13/,
424 & 5x,
'COMPOSITE MAXIMUM PLASTIC WORK WPLAMX .=',1pg20.13/,
425 & 5x,
'REFERENCE PLASTIC WORK WPLAREF. . . . .=',1pg20.13/,
426 & 5x,
'TOTAL ELEMENT FAILURE CRITERIA IOFF =',i10/,
427 & 5x,
' IOFF=0: SHELL DELETE IF WPLA >= WPLAMX FOR 1 LAYER'/,
428 & 5x,
' IOFF=1: SHELL DELETE IF WPLA >= WPLAMX FOR ALL LAYERS'/,
429 & 5x,
' IOFF=2: SHELL DELETE IF FOR EACH LAYER :'/,
430 & 5x,
' WPLA >= WPLAMX OR TENSILE FAILURE DIR 1'/,
431 & 5x,
' IOFF=3: SHELL DELETE IF FOR EACH LAYER :'/,
432 & 5x,
' WPLA >= WPLAMX OR TENSILE FAILURE DIR 2'/,
433 & 5x,' ioff=4: shell delete
IF for each layer :
'/,
434 & 5X,' wpla >= wplamx or tensile failure dir 1 and 2
'/,
435 & 5X,' ioff=5: shell delete
IF for all layers :
'/,
436 & 5X,' wpla >= wplamx or tensile failure dir 1
'/,
438 & 5X,' wpla >= wplamx or tensile failure dir 2
'/,
439 & 5X,' ioff=6: shell delete
IF for each layer :
'/,
440 & 5X,' wpla >= wplamx or tensile failure dir 1 or 2
'//)
442 & 5X,'composite yield in tension dir-1 . . . . . .=
',1PG20.13/,
443 & 5X,'composite yield in tension dir-2 . . . . . .=
',1PG20.13/,
444 & 5X,'composite yield in compression dir-1 . . . .=
',1PG20.13/,
445 & 5X,'composite yield in compression dir-2 . . . .=
',1PG20.13/,
446 & 5X,'f12 reduction factor . . . . . . . . . . . .=
',1PG20.13//)
448 & 5X,'composite yield in shear(+12) . . . .=
',1PG20.13/,
449 & 5X,'composite yield in shear(-12) . . . .=
',1PG20.13//)
451 & 5X,'shear scaling factor . . . . . . . . . . .=
',1PG20.13/,
452 & 5X,'time of relaxation. . . . . . . . . . . . .=
',1PG20.13/)
454 & 5X,' yield
FUNCTION constants
'/,
455 & 5X,' ------------------------
'//,
456 & 5X,'f1 , f2 . . . . . . . . . . . . . . .
',2E12.4/,
457 & 5X,'f11, f22. . . . . . . . . . . . . . . .=
',2E12.4/,
458 & 5X,'f33 . . . . . . . . . . . . . . . . . .=
', E12.4/,
459 & 5X,'f12 . . . . . . . . . . . . . . . . . .=
', E12.4//)
461 & 5X,'strain rate coefficient cc. . . . . . .=
',1PG20.13/,
462 & 5X,'reference strain rate . . . . . . . . .=
',1PG20.13/,
463 & 5X,'flag
for strain rate on f-
max wp-
max. .=
',I10//)
465 & 5X,'smooth strain rate option . . . . . . .=
',I10/,
466 & 5X,'strain rate cutting frequency . . . . .=
',1PG20.13/)
468 & 5X,'longitudinal tensile strength . . . . . .=
',1PG20.13/,
469 & 5X,'transverse tension strength . . . . . .=
',1PG20.13/,
470 & 5X,'shear strength . . . . . . . . . . . . .=
',1PG20.13/,
471 & 5X,' longitudinal compressive strength . . .=
',1PG20.13/,
472 & 5X,' transverse compressive strength . . .=
',1PG20.13//)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle