41
42
43
44 USE fail_param_mod
50
51
52
53#include "implicit_f.inc"
54
55
56
57#include "com04_c.inc"
58#include "units_c.inc"
59
60
61
62 INTEGER ,INTENT(IN) :: FAIL_ID
63 INTEGER ,INTENT(IN) :: MAT_ID
64 INTEGER ,INTENT(IN) :: IRUPT
65 CHARACTER(LEN=NCHARTITLE),INTENT(IN) :: TITR
66 TYPE(UNIT_TYPE_) ,INTENT(IN) :: UNITAB
67 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
68 TYPE (FAIL_PARAM_) ,INTENT(INOUT) :: FAIL
69
70
71
72 INTEGER :: ITAB_EPSF,FAILIP,ITAB_INST,
73 . IFUN_EXP,ITAB_SIZE,IREG,IFUN_RATE,IFUN_DLIM,IFUN_TEMP
74 my_real :: fcrit,pthkfail,dn,dcrit,
ecrit,exp_ref,expo,el_ref,sr_ref1,
75 . fscale_el,shrf,biaxf,sr_ref2,fscale_sr,cjc,fscale_dlim,
76 . length_unit,rate_unit,temp_ref,fscale_temp,temp_unit,volfrac
77
78 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
79
80 is_encrypted = .false.
81 is_available = .false.
82
83
84
86
87
88
89
90 CALL hm_get_intv (
'EPSF_ID' ,itab_epsf ,is_available,lsubmodel)
91 CALL hm_get_floatv (
'FCRIT' ,fcrit ,is_available,lsubmodel,unitab)
92 CALL hm_get_intv (
'FAILIP' ,failip ,is_available,lsubmodel)
93 CALL hm_get_floatv (
'PTHK' ,pthkfail ,is_available,lsubmodel,unitab)
94 CALL hm_get_floatv (
'VOLFRAC' ,volfrac ,is_available,lsubmodel,unitab)
95
97 CALL hm_get_floatv (
'DCRIT' ,dcrit ,is_available,lsubmodel,unitab)
98 CALL hm_get_intv (
'INST_ID' ,itab_inst ,is_available,lsubmodel)
100
101 CALL hm_get_intv (
'FCT_EXP' ,ifun_exp ,is_available,lsubmodel)
102 CALL hm_get_floatv (
'EXP_REF' ,exp_ref ,is_available,lsubmodel,unitab)
103 CALL hm_get_floatv (
'EXP' ,expo ,is_available,lsubmodel,unitab)
104 CALL hm_get_intv (
'FCT_TEMP' ,ifun_temp ,is_available,lsubmodel)
105 CALL hm_get_floatv (
'TEMP_REF' ,temp_ref ,is_available,lsubmodel,unitab)
106 CALL hm_get_floatv (
'FSCALE_TEMP' ,fscale_temp ,is_available,lsubmodel,unitab)
107
108 CALL hm_get_intv (
'TAB_EL' ,itab_size ,is_available,lsubmodel)
109 CALL hm_get_intv (
'IREG' ,ireg ,is_available,lsubmodel)
110 CALL hm_get_floatv (
'EL_REF' ,el_ref ,is_available,lsubmodel,unitab)
111 CALL hm_get_floatv (
'SR_REF1' ,sr_ref1 ,is_available,lsubmodel,unitab)
112 CALL hm_get_floatv (
'FSCALE_EL' ,fscale_el ,is_available,lsubmodel,unitab)
113
114 CALL hm_get_floatv (
'SHRF' ,shrf ,is_available,lsubmodel,unitab)
115 CALL hm_get_floatv (
'BIAXF' ,biaxf ,is_available,lsubmodel,unitab)
116
117 CALL hm_get_intv (
'FCT_SR' ,ifun_rate ,is_available,lsubmodel)
118 CALL hm_get_floatv (
'SR_REF2' ,sr_ref2 ,is_available,lsubmodel,unitab)
119 CALL hm_get_floatv (
'FSCALE_SR' ,fscale_sr ,is_available,lsubmodel,unitab)
120 CALL hm_get_floatv (
'CJC' ,cjc ,is_available,lsubmodel,unitab)
121
122 CALL hm_get_intv (
'FCT_DLIM' ,ifun_dlim ,is_available,lsubmodel)
123 CALL hm_get_floatv (
'FSCALE_DLIM' ,fscale_dlim ,is_available,lsubmodel,unitab)
124
125
126
127 IF (itab_epsf == 0 .AND. fcrit == zero) THEN
128 CALL ancmsg(msgid=3000, msgtype=msgerror, anmode=aninfo_blind,
129 . i1=mat_id,
130 . c1=titr)
131 ENDIF
132 IF (fcrit == zero) fcrit = one
133 IF (failip == 0) failip = 1
134 IF (dn <= zero) dn = one
135 IF (dcrit > one) dcrit = one
136 IF (dcrit < zero) dcrit = zero
137 IF ((itab_inst > 0).AND.(
ecrit == zero))
ecrit = one
138 IF ((ifun_exp > 0).AND.(exp_ref == zero)) THEN
140 exp_ref = one*length_unit
141 ENDIF
142 IF (expo == zero) expo = one
143 IF (temp_ref == zero) THEN
145 temp_ref = one*temp_unit
146 ENDIF
147 IF (fscale_temp == zero) fscale_temp = one
148 IF (ireg == 0) ireg = 1
149 IF ((itab_size > 0).AND.(el_ref == zero)) THEN
151 el_ref = one*length_unit
152 ENDIF
153 IF ((ireg == 1).AND.(itab_size > 0).AND.(sr_ref1 == zero)) THEN
155 sr_ref1 = one*rate_unit
156 ENDIF
157 IF (fscale_el == zero) fscale_el = one
158 IF (shrf == zero) shrf = -one
159 IF (biaxf == zero) biaxf = one
160 IF (((ifun_rate > 0).OR.(cjc > zero)).AND.(sr_ref2 == zero)) THEN
162 sr_ref2 = one*rate_unit
163 ENDIF
164 IF (fscale_sr == zero) fscale_sr = one
165 IF (fscale_dlim == zero) fscale_dlim = one
166 IF (pthkfail == zero) pthkfail = em06
167 pthkfail =
min(pthkfail, one)
168 pthkfail =
max(pthkfail,-one)
169
170 volfrac =
min(volfrac,one)
171 volfrac =
max(volfrac,zero)
172
173 IF (volfrac > zero) THEN
174 CALL ancmsg(msgid=3080, msgtype=msginfo, anmode=aninfo_blind,
175 . i1=mat_id,
176 . c1=titr)
177 ENDIF
178
179
180
181
182 fail%KEYWORD = 'TAB2'
183 fail%IRUPT = irupt
184 fail%FAIL_ID = fail_id
185 fail%NUPARAM = 23
186 fail%NIPARAM = 0
187 fail%NUVAR = 3
188 fail%NFUNC = 4
189 fail%NTABLE = 3
190 fail%NMOD = 0
191 fail%PTHK = pthkfail
192
193 ALLOCATE (fail%UPARAM(fail%NUPARAM))
194 ALLOCATE (fail%IPARAM(fail%NIPARAM))
195 ALLOCATE (fail%IFUNC (fail%NFUNC))
196 ALLOCATE (fail%TABLE (fail%NTABLE))
197
198 fail%UPARAM(1) = fcrit
199 fail%UPARAM(2) = failip
200 fail%UPARAM(3) = pthkfail
201 fail%UPARAM(4) = dn
202 fail%UPARAM(5) = dcrit
203 fail%UPARAM(6) =
ecrit
204 fail%UPARAM(7) = exp_ref
205 fail%UPARAM(8) = expo
206 fail%UPARAM(9) = ireg
207 fail%UPARAM(10) = el_ref
208 fail%UPARAM(11) = sr_ref1
209 fail%UPARAM(12) = fscale_el
210 fail%UPARAM(13) = shrf
211 fail%UPARAM(14) = biaxf
212 fail%UPARAM(15) = sr_ref2
213 fail%UPARAM(16) = fscale_sr
214 fail%UPARAM(17) = cjc
215 fail%UPARAM(18) = fscale_dlim
216 fail%UPARAM(19) = temp_ref
217 fail%UPARAM(20) = fscale_temp
218 fail%UPARAM(21) = 0
219 fail%UPARAM(22) = 0
220 fail%UPARAM(23) = volfrac
221
222 fail%IFUNC(1) = ifun_exp
223 fail%IFUNC(2) = ifun_rate
224 fail%IFUNC(3) = ifun_dlim
225 fail%IFUNC(4) = ifun_temp
226
227 fail%TABLE(1) = itab_epsf
228 fail%TABLE(2) = itab_inst
229 fail%TABLE(3) = itab_size
230
231 IF (is_encrypted)THEN
232 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
233 ELSE
234
235 WRITE(iout,1000)
236
237 IF (itab_epsf > 0) THEN
238 WRITE(iout,1001) itab_epsf,fcrit
239 ELSE
240 WRITE(iout,1002) fcrit
241 ENDIF
242 WRITE(iout,1003) dn
243
244 WRITE(iout,1004)
245 IF (itab_inst > 0) THEN
246 WRITE(iout,1005) itab_inst,
ecrit
247 ELSEIF (
ecrit > zero)
THEN
248 WRITE(iout,1006)
ecrit
249 ELSE
250 WRITE(iout,1007) dcrit
251 ENDIF
252
253 WRITE(iout,1008)
254 IF (ifun_exp > 0) THEN
255 WRITE(iout,1009) ifun_exp,exp_ref,expo
256 ELSE
257 WRITE(iout,1010) expo
258 ENDIF
259
260 IF (ifun_temp > 0) THEN
261 WRITE(iout,1020)
262 WRITE(iout,1021) ifun_temp,temp_ref,fscale_temp
263 ENDIF
264
265 IF (itab_size > 0) THEN
266 WRITE(iout,1011) ireg
267 IF (ireg == 1) THEN
268 WRITE(iout,1012) itab_size,el_ref,sr_ref1,fscale_el,shrf,biaxf
269 ELSEIF(ireg == 2) THEN
270 WRITE(iout,1013) itab_size,el_ref,fscale_el
271 ENDIF
272 ENDIF
273
274 IF (ifun_rate > 0) THEN
275 WRITE(iout,1014)
276 WRITE(iout,1015) ifun_rate,sr_ref2,fscale_sr
277 ELSEIF (cjc > zero) THEN
278 WRITE(iout,1014)
279 WRITE(iout,1016) sr_ref2,cjc
280 ENDIF
281
282 IF (ifun_dlim > 0) THEN
283 WRITE(iout,1017)
284 WRITE(iout,1018) ifun_dlim,fscale_dlim
285 ENDIF
286
287 WRITE(iout,1019) failip,pthkfail,volfrac
288 WRITE(iout,1022)
289 ENDIF
290
291 1000 FORMAT(
292 & 5x,' --------------------------------------------------------',/,
293 & 5x,' TABULATED FAILURE CRITERION VERSION 2 ',/,
294 & 5x,' --------------------------------------------------------',/,
295 & 5x,' ',/,
296 & 5x,'FAILURE DEFINITION: ',/,
297 & 5x,'------------------- ',/)
298 1001 FORMAT(
299 & 5x,'FAILURE PLASTIC STRAIN TABLE ID . . . . . . . . . . . . =',i10/,
300 & 5x,' SCALE FACTOR FOR FAILURE PLASTIC STRAIN TABLE . . . =',1pg20.13/)
301 1002 FORMAT(
302 & 5x,'CRITICAL FAILURE PLASTIC STRAIN FCRIT . . . . . . . . . =',1pg20.13/)
303 1003 FORMAT(
304 & 5x,'DAMAGE EVOLUTION EXPONENT N . . . . . . . . . . . . . . =',1pg20.13/)
305 1004 FORMAT(
306 & 5x,' ',/,
307 & 5x,'NECKING CONTROL DEFINITION: ',/,
308 & 5x,'--------------------------- ',/)
309 1005 FORMAT(
310 & 5x,'NECKING PLASTIC STRAIN TABLE ID . . . . . . . . . . . . =',i10/,
311 & 5x,' SCALE FACTOR FOR NECKING PLASTIC STRAIN . . . . . . =',1pg20.13/)
312 1006 FORMAT(
313 & 5x,'CRITICAL NECKING PLASTIC STRAIN VALUE ECRIT . . . . . . =',1pg20.13/)
314 1007 FORMAT(
315 & 5x,'CRITICAL DAMAGE VALUE DCRIT . . . . . . . . . . . . . . =',1pg20.13/)
316 1008 FORMAT(
317 & 5x,' ',/,
318 & 5x,'STRESS SOFTENING EXPONENT DEFINITION: ',/,
319 & 5x,'------------------------------------- ',/)
320 1009 FORMAT(
321 & 5x,'SOFTENING EXPONENT FUNCTION ID. . . . . . . . . . . . . =',i10/,
322 & 5x,' REFERENCE ELEMENT LENGTH. . . . . . . . . . . . . . =',1pg20.13/
323 & 5x,' SCALE FACTOR FOR SOFTENING EXPONENT FUNCTION . . . =',1pg20.13/)
324 1010 FORMAT(
325 & 5x,'STRESS SOFTENING EXPONENT EXPO. . . . . . . . . . . . . =',1pg20.13/)
326 1011 FORMAT(
327 & 5x,' ',/,
328 & 5x,'ELEMENT SIZE SCALING DEFINITION: ',/,
329 & 5x,'-------------------------------- ',/,
330 & 5x,'ELEMENT SIZE SCALING FLAG . . . . . . . . . . . . . . . =',i10/,
331 & 5x,' IREG = 1: FACTOR VS EL. LENGTH (VS STRAIN RATE) ',/,
332 & 5x,' IREG = 2: FACTOR VS EL. LENGTH (VS TRIAXIALITY) ',/)
333 1012 FORMAT(
334 & 5x,'ELEMENT SIZE SCALING TABLE ID . . . . . . . . . . . . . =',i10/,
335 & 5x,' REFERENCE ELEMENT LENGTH. . . . . . . . . . . . . . =',1pg20.13/,
336 & 5x,' REFERENCE STRAIN RATE . . . . . . . . . . . . . . . =',1pg20.13/,
337 & 5x,' SCALE FACTOR FOR SIZE SCALING . . . . . . . . . . . =',1pg20.13/,
338 & 5x,'TRIAXIALITY LOWER BOUNDARY FOR SIZE SCALING . . . . . . =',1pg20.13/,
339 & 5x,'TRIAXIALITY UPPER BOUNDARY FOR SIZE SCALING . . . . . . =',1pg20.13/)
340 1013 FORMAT(
341 & 5x,'ELEMENT SIZE SCALING TABLE ID . . . . . . . . . . . . . =',i10/,
342 & 5x,' SCALE FACTOR FOR SIZE SCALING . . . . . . . . . . . =',1pg20.13/,
343 & 5x,' REFERENCE ELEMENT LENGTH. . . . . . . . . . . . . . =',1pg20.13/)
344 1014 FORMAT(
345 & 5x,' ',/,
346 & 5x,'STRAIN RATE SCALING DEFINITION: ',/,
347 & 5x,'------------------------------- ',/)
348 1015 FORMAT(
349 & 5x,'STRAIN RATE SCALING FUNCTION . . . . . . . . . . . . . =',i10/,
350 & 5x,' REFERENCE STRAIN RATE . . . . . . . . . . . . . . . =',1pg20.13/,
351 & 5x,' STRAIN RATE DEPENDENCY SCALE FACTOR . . . . . . . . =',1pg20.13/)
352 1016 FORMAT(
353 & 5x,'JOHNSON-COOK STRAIN RATE SCALING ',/,
354 & 5x,' REFERENCE STRAIN RATE . . . . . . . . . . . . . . . =',1pg20.13/,
355 & 5x,' JOHNSON-COOK STRAIN RATE FACTOR . . . . . . . . . . =',1pg20.13/)
356 1017 FORMAT(
357 & 5x,' ',/,
358 & 5x,'DAMAGE LIMIT DEFINITION: ',/,
359 & 5x,'------------------------ ',/)
360 1018 FORMAT(
361 & 5x,'DAMAGE LIMIT FUNCTION . . . . . . . . . . . . . . . . . =',i10/,
362 & 5x,' SCALE FACTOR FOR DAMAGE LIMIT FUNCTION . . . . . . =',1pg20.13/)
363 1019 FORMAT(
364 & 5x,' ',/,
365 & 5x,'ELEMENT DELETION PARAMETERS: ',/,
366 & 5x,'---------------------------- ',/,
367 & 5x,'NUMBER OF FAILED INTG. POINTS PRIOR TO SOLID DELETION . =',i10/,
368 & 5x,'SHELL ELEMENT DELETION PARAMETER PTHICKFAIL . . . . . .=',1pg20.13,/,
369 & 5x,' > 0.0 : FRACTION OF FAILED THICKNESS ',/,
370 & 5x,' < 0.0 : FRACTION OF FAILED INTG. POINTS OR LAYERS ',/,
371 & 5x,'FAILED VOLUME FRACTION PRIOR TO SOLID DELETION . . . . =',1pg20.13/)
372 1020 FORMAT(
373 & 5x,' ',/,
374 & 5x,'TEMPERATURE SCALING DEFINITION: ',/,
375 & 5x,'------------------------------- ',/)
376 1021 FORMAT(
377 & 5x,'TEMPERATURE SCALING FUNCTION . . . . . . . . . . . . . =',i10/,
378 & 5x,' REFERENCE TEMPERATURE . . . . . . . . . . . . . . . =',1pg20.13/,
379 & 5x,' TEMPERATURE DEPENDENCY SCALE FACTOR . . . . . . . . =',1pg20.13/)
380 1022 FORMAT(
381 & 5x,' --------------------------------------------------------',/)
382
subroutine ecrit(timers, partsav, ms, v, in, r, dmas, weight, enintot, ekintot, a, ar, fxbipm, fxbrpm, monvol, xmom_sms, sensors, qfricint, ipari, weight_md, wfexth, iflag, ms_2d, multi_fvm, mas_nd, kend, h3d_data, dynain_data, usreint, output)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
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)