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 :: NRATE,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
104 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
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 . . . . ='
267 & 5x,'SHEAR MODULUS PER THICKNESS UNIT . . . . =',1pg20.13/,
268 & 5x,'COHESIVE ELEMENT THICKNESS . . . . . . . =',1pg20.13/,
269 & 5x,'MASS CALCULATION FLAG . . . . . . . . . . . .='
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_option_is_encrypted(is_encrypted)
integer, parameter nchartitle