42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
65 USE matparam_def_mod
67
68
69
70#include "implicit_f.inc"
71
72
73
74#include "param_c.inc"
75#include "units_c.inc"
76
77
78
79 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
80 INTEGER, INTENT(INOUT) :: IFUNC(MAXFUNC),NFUNC,MAXFUNC,MAXUPARAM,
81 . NUPARAM,NUVAR
82 INTEGER, INTENT(IN) :: MAT_ID
83 my_real,
INTENT(INOUT) :: pm(npropm),parmat(100),uparam(maxuparam)
84 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
85 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
86 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
87 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
88
89
90
91 INTEGER :: ILAW,IMASS,IDEL,IORDER1,IORDER2,
92 . IFAIL1,IFAIL2,ICRIT
93 my_real :: rho0,e,g,thick,gc1_ini,gc2_ini,gc1_inf,gc2_inf,ratg1,ratg2,
94 . fg1,fg2,siga1,siga2,sigb1,sigb2,rate1,rate2,unit_l,
alpha
95 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
96
97 ilaw = 116
98
99 is_encrypted = .false.
100 is_available = .false.
101
103
105 CALL hm_get_floatv(
'MAT_E' ,e ,is_available, lsubmodel, unitab)
106 CALL hm_get_floatv(
'MAT_G' ,g ,is_available, lsubmodel, unitab)
107 CALL hm_get_floatv(
'MAT_THICK' ,thick ,is_available, lsubmodel, unitab)
108 CALL hm_get_intv (
'MAT_IMASS' ,imass ,is_available, lsubmodel)
109 CALL hm_get_intv (
'MAT_IDEL' ,idel ,is_available, lsubmodel)
110 CALL hm_get_intv (
'MAT_ICRIT' ,icrit ,is_available, lsubmodel)
111
112 CALL hm_get_floatv('mat_gc1_ini
' ,GC1_INI ,IS_AVAILABLE, LSUBMODEL, UNITAB)
113 CALL HM_GET_FLOATV('mat_gc1_inf' ,GC1_INF ,IS_AVAILABLE, LSUBMODEL, UNITAB)
114 CALL HM_GET_FLOATV('mat_sratg1' ,RATG1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
115 CALL HM_GET_FLOATV('mat_fg1' ,FG1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
116
117 CALL HM_GET_FLOATV('mat_gc2_ini' ,GC2_INI ,IS_AVAILABLE, LSUBMODEL, UNITAB)
118 CALL HM_GET_FLOATV('mat_gc2_inf' ,GC2_INF ,IS_AVAILABLE, LSUBMODEL, UNITAB)
119 CALL HM_GET_FLOATV('mat_sratg2' ,RATG2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
120 CALL HM_GET_FLOATV('mat_fg2' ,FG2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
121
122 CALL HM_GET_FLOATV('mat_siga1' ,SIGA1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
123 CALL HM_GET_FLOATV('mat_sigb1' ,SIGB1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
124 CALL HM_GET_FLOATV('mat_srate1' ,RATE1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
125 CALL HM_GET_INTV ('mat_order1' ,IORDER1 ,IS_AVAILABLE, LSUBMODEL)
126 CALL HM_GET_INTV ('mat_fail1' ,IFAIL1 ,IS_AVAILABLE, LSUBMODEL)
127
128 CALL HM_GET_FLOATV('mat_siga2' ,SIGA2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
129 CALL HM_GET_FLOATV('mat_sigb2' ,SIGB2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
130 CALL HM_GET_FLOATV('mat_srate2' ,RATE2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
131 CALL HM_GET_INTV ('mat_order2' ,IORDER2 ,IS_AVAILABLE, LSUBMODEL)
132 CALL HM_GET_INTV ('mat_fail2' ,IFAIL2 ,IS_AVAILABLE, LSUBMODEL)
133
134 PM(1) = RHO0 ! RHOR
135 PM(89)= RHO0
136
137
138
139 IF (G == ZERO) G = E
140 IF (IMASS == 0) IMASS = 1
141 IF (IDEL == 0) IDEL = 1
142 IF (IORDER1 == 0) IORDER1 = 1
143 IF (IORDER2 == 0) IORDER2 = 1
144 IF (IFAIL1 == 0) IFAIL1 = 1
145 IF (IFAIL2 == 0) IFAIL2 = 1
146 IF (ICRIT == 0) ICRIT = 1
147.or. IF (FG1 == ZERO GC1_INI == ZERO) IFAIL1 = 0
148.or. IF (FG2 == ZERO GC2_INI == ZERO) IFAIL2 = 0
149 IF (THICK == ZERO) THEN
150 CALL HM_GET_FLOATV_DIM('mat_thick' ,UNIT_L ,IS_AVAILABLE, LSUBMODEL, UNITAB)
151 THICK = ONE * UNIT_L
152 ENDIF
153 ALPHA = 0.005 ! strain rate filtering coefficient (exp average)
154
155
156
157 IF (IFAIL1 == 1) THEN
158 IF (FG1 >= ONE - HALF*SIGA1**2 / (E * GC1_INI)) THEN
159 CALL ANCMSG(MSGID=1825,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_1,
160 . I1 = MAT_ID,
161 . C1 = TITR,
162 . C2 = 'fg1',
163 . R1 = HALF*SIGA1**2 / (E * GC1_INI) )
164 END IF
165 ELSE IF (IFAIL1 == 2) THEN
166 IF (FG1 >= ONE) THEN
167 CALL ANCMSG(MSGID=1825,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_1,
168 . I1 = MAT_ID,
169 . C1 = TITR,
170 . C2 = 'fg1',
171 . R1 = ONE)
172 END IF
173 END IF
174
175 IF (IFAIL2 == 1) THEN
176 IF (FG2 >= ONE - HALF*SIGA2**2 / (E * GC2_INI)) THEN
177 CALL ANCMSG(MSGID=1825,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_1,
178 . I1 = MAT_ID,
179 . C1 = TITR,
180 . C2 = 'fg2',
181 . R1 = HALF*SIGA2**2 / (E * GC2_INI) )
182 END IF
183 ELSE IF (IFAIL2 == 2) THEN
184 IF (FG2 >= ONE) THEN
185 CALL ANCMSG(MSGID=1825,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_1,
186 . I1 = MAT_ID,
187 . C1 = TITR,
188 . C2 = 'fg2',
189 . R1 = ONE)
190 END IF
191 END IF
192
193 NFUNC = 0
194 NUPARAM = 25
195 NUVAR = 12
196
197 UPARAM(1) = E / THICK
198 UPARAM(2) = G / THICK
199 UPARAM(3) = IMASS
200 UPARAM(4) = IDEL
201 UPARAM(5) = GC1_INI
202 UPARAM(6) = GC1_INF
203 UPARAM(7) = RATG1
204 UPARAM(8) = FG1
205 UPARAM(9) = GC2_INI
206 UPARAM(10) = GC2_INF
207 UPARAM(11) = RATG2
208 UPARAM(12) = FG2
209 UPARAM(13) = SIGA1
210 UPARAM(14) = SIGB1
211 UPARAM(15) = RATE1
212 UPARAM(16) = IORDER1
213 UPARAM(17) = IFAIL1
214 UPARAM(18) = SIGA2
215 UPARAM(19) = SIGB2
216 UPARAM(20) = RATE2
217 UPARAM(21) = IORDER2
218 UPARAM(22) = IFAIL2
219 UPARAM(23) = ICRIT
220 UPARAM(24) = THICK
221 UPARAM(25) = ALPHA
222
223 PARMAT(1) = MAX(E,G) / THREE
224 PARMAT(2) = MAX(E,G)
225 PARMAT(17) = ONE ! (ONE - TWO*NU)/(ONE - NU), NU=0
226
227 MTAG%G_PLA = 2
228 MTAG%G_EPSD = 1
229 MTAG%L_PLA = 2
230 MTAG%L_EPSD = 1
231 MTAG%L_EPE = 3
232 MTAG%L_DMG = 1
233 MTAG%G_DMG = 1
234
235 ! MATPARAM keywords
236 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
237
238 ! Properties compatibility
239 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_COHESIVE")
240
241
242
243 WRITE(IOUT,1100) TRIM(TITR),MAT_ID,ILAW
244 WRITE(IOUT,1000)
245 IF (IS_ENCRYPTED) THEN
246 WRITE(IOUT,'(5x,a,//)')'confidential data'
247 ELSE
248 WRITE(IOUT,1200) RHO0,E,G,THICK,IMASS,IDEL,ICRIT,
249 . GC1_INI,GC1_INF,RATG1,FG1,
250 . GC2_INI,GC2_INF,RATG2,FG2,
251 . SIGA1,SIGB1,RATE1,IORDER1,IFAIL1,
252 . SIGA2,SIGB2,RATE2,IORDER2,IFAIL2
253 ENDIF
254
255 RETURN
256
257 1000 FORMAT(
258 & 10X,' mixed mode cohesive law 116 ',/,
259 & 10X,' --------------------------- ',/)
260 1100 FORMAT(/
261 & 5X,A,/,
262 & 5X,'material number . . . . . . . . . . . . . . .=',I10/,
263 & 5X,'material law. . . . . . . . . . . . . . . . .=',I10/)
264 1200 FORMAT(
265 & 5X,'material density. . . . . . . . . . . . . . .=',1PG20.13/,
266 & 5X,'young modulus per thickness unit . . . . =',1PG20.13/,
267 & 5X,'shear modulus per thickness unit . . . . =',1PG20.13/,
268 & 5X,'cohesive element thickness . . . . . . . =',1PG20.13/,
269 & 5X,'mass calculation flag . . . . . . . . . . . .=',I10/,
270 & 5X,' = 0 => using volume density '/,
271 & 5X,' = 1 => using surface density '/,
272 & 5X,'nb of failing gauss points to delete element =',I10/,
273 & 5X,'icrit : yield and damage initiation flag . . =',I10/,
274 & 5X,'initial energy release rate in mod i . . . . =',1PG20.13/,
275 & 5X,'final energy release rate in mod i . . . . =',1PG20.13/,
276 & 5X,'reference strain rate
for gc in mod i. . . . =
',1PG20.13/,
277 & 5X,'shape factor
for gc at fail in mod i . . . . =
',1PG20.13/,
278 & 5X,'initial energy release rate in mod ii . . . =',1PG20.13/,
279 & 5X,'final energy release rate in mod ii . . . . =',1PG20.13/,
280 & 5X,'reference strain rate
for gc in mod ii . . . =
',1PG20.13/,
281 & 5X,'shape factor
for gc at fail in mod ii . . . =
',1PG20.13/,
282 & 5X,'static yield stress term in mode i . . . . =
',1PG20.13/,
283 & 5X,'dynamic yield stress term in mode i . . . . =',1PG20.13/,
284 & 5X,'reference strain rate
for yld in mode i. . . =
',1PG20.13/,
285 & 5X,'order of yield FUNCTION in mode i . . . . . =',I10/,
286 & 5X,'failure criterion flag in mode i . . . . . =',I10/,
287 & 5X,'static yield stress term in mode ii . . . . =
',1PG20.13/,
288 & 5X,'dynamic yield stress term in mode ii . . . . =',1PG20.13/,
289 & 5X,'reference strain rate
for yld in mode ii . . =
',1PG20.13/,
290 & 5X,'order of yield function in mode ii . . . . . =',I10/,
291 & 5X,'failure criterion flag in mode ii . . . . . =',I10/)
292
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)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle
subroutine static(v, vr, a, ar, ms, in, igrnod, weight_md, wfext)