40 . FAIL ,MAT_ID ,FAIL_ID ,IRUPT ,
41 . TITR ,LSUBMODEL,UNITAB ,FAIL_TAG )
57#include "implicit_f.inc"
65 INTEGER ,
INTENT(IN) :: FAIL_ID
66 INTEGER ,
INTENT(IN) :: MAT_ID
67 INTEGER ,
INTENT(IN) :: IRUPT
68 CHARACTER ,
INTENT(IN) :: TITR*500
69 TYPE (UNIT_TYPE_) ,
INTENT(IN) :: UNITAB
70 TYPE (SUBMODEL_DATA),
INTENT(IN) :: LSUBMODEL(*)
71 TYPE (FAIL_PARAM_) ,
INTENT(INOUT) :: FAIL
72 TYPE (FAIL_TAG_) ,
INTENT(INOUT) :: FAIL_TAG
76 INTEGER I,J,NSTEP,NCS,fct_IDsm,fct_IDps,fct_IDg12,fct_IDg13,
77 . fct_IDe1c,fct_IDel,Itab,tab_IDfld,Istrain,CRIT,
78 . ismooth,ncrit_max,nfunc,ntable,nuparam,nuvar,nmode,failip
79 INTEGER ,
PARAMETER :: NSIZE = 6
80 integer ,
DIMENSION(NSIZE) :: ifunc
82 . minpres,maxpres,sigp1,tmax,dtmin,epsdot_sm,sigvm,sigth,kf,
83 . epsdot_ps,maxeps,effeps,voleps,mineps,epssh,epsdot_fld,
84 . thin,volfrac,pthk,maxtemp,fscale_el,el_ref
85 . pressure_unit,length_unit
86 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
87 CHARACTER(LEN=NCHARTITLE)DIMENSION(50)
89 is_encrypted = .false.
90 is_available = .false.
107 CALL hm_get_floatv (
'MAT_MINPRES' ,minpres ,is_available,lsubmodel,unitab)
108 IF (minpres /= zero)
THEN
111 modname(nmode) =
"Minimum hydrostatic pressure"
113 CALL hm_get_floatv (
'MAT_MAXPRES' ,maxpres ,is_available,lsubmodel,unitab)
114 IF (maxpres /= zero)
THEN
117 modname(nmode) =
"Maximum hydrostatic pressure"
119 IF ((minpres /= zero).OR.(maxpres /= zero)) ncrit_max = ncrit_max + 1
120 CALL hm_get_floatv (
'MAT_SIGP1' ,sigp1 ,is_available,lsubmodel,unitab)
121 IF (sigp1 /= zero)
THEN
122 ncrit_max = ncrit_max + 1
125 modname(nmode) =
"Maximum principal stress"
127 CALL hm_get_floatv (
'MAT_TMAX' ,tmax ,is_available,lsubmodel,unitab)
128 IF (tmax /= zero)
THEN
129 ncrit_max = ncrit_max + 1
132 modname(nmode) =
"Failure time"
135 IF (dtmin /= zero)
THEN
136 ncrit_max = ncrit_max + 1
139 modname(nmode) =
"Minimum timestep"
144 CALL hm_get_intv (
'fct_IDsm' ,fct_idsm ,is_available,lsubmodel)
146 CALL hm_get_floatv (
'MAT_SIGVM' ,sigvm ,is_available,lsubmodel,unitab)
147 IF ((sigvm /= zero).OR.(fct_idsm /= 0))
THEN
148 ncrit_max = ncrit_max + 1
151 modname(nmode) =
"Maximum equivalent stress"
153 CALL hm_get_floatv (
'MAT_SIGTH' ,sigth ,is_available,lsubmodel,unitab)
154 CALL hm_get_floatv (
'MAT_KF' ,kf ,is_available,lsubmodel,unitab)
155 IF ((sigth /= zero).OR.(kf /= zero))
THEN
156 ncrit_max = ncrit_max + 1
159 modname(nmode) =
"Tuler-Butcher failure"
164 CALL hm_get_intv (
'fct_IDps' ,fct_idps ,is_available,lsubmodel)
165 CALL hm_get_floatv (
'MAT_EPSDPS' ,epsdot_ps ,is_available,lsubmodel,unitab)
167 IF ((maxeps /= zero).OR.(fct_idps /= 0))
THEN
168 ncrit_max = ncrit_max + 1
171 modname(nmode) =
"Maximum principal strain"
173 CALL hm_get_floatv (
'MAT_EFFEPS' ,effeps ,is_available,lsubmodel
174 IF (effeps /= zero)
THEN
175 ncrit_max = ncrit_max + 1
178 modname(nmode) =
"Maximum effective strain"
180 CALL hm_get_floatv (
'MAT_VOLEPS' ,voleps ,is_available,lsubmodel,unitab)
181 IF (voleps /= zero)
THEN
182 ncrit_max = ncrit_max + 1
183 crit = ibset(crit,10)
185 modname(nmode) =
"Maximum volumetric strain"
190 CALL hm_get_floatv (
'MAT_MINEPS' ,mineps ,is_available,lsubmodel,unitab)
191 IF (mineps /= zero)
THEN
192 ncrit_max = ncrit_max + 1
193 crit = ibset(crit,11)
195 modname(nmode) =
"Minimum principal strain"
197 CALL hm_get_floatv (
'MAT_EPSSH' ,epssh ,is_available,lsubmodel,unitab)
198 IF (epssh /= zero)
THEN
199 ncrit_max = ncrit_max + 1
200 crit = ibset(crit,12)
202 modname(nmode) =
"Critical shear strain"
204 CALL hm_get_intv (
'fct_IDg12' ,fct_idg12 ,is_available,lsubmodel)
205 IF (fct_idg12 /= 0)
THEN
206 crit = ibset(crit,13)
208 modname(nmode) =
"Maximum in-plane shear strain"
210 CALL hm_get_intv (
'fct_IDg13' ,fct_idg13 ,is_available,lsubmodel)
211 IF (fct_idg13 /= 0)
THEN
212 crit = ibset(crit,14)
214 modname(nmode) =
"Maximum transversal shear strain"
216 CALL hm_get_intv (
'fct_IDe1c' ,fct_ide1c ,is_available,lsubmodel)
217 IF (fct_ide1c /= 0)
THEN
218 crit = ibset(crit,15)
220 modname(nmode) =
"Maximum in-plane major strain"
222 IF ((fct_idg13 /= 0).AND.(fct_ide1c /= 0))
THEN
223 ncrit_max = ncrit_max + 2
224 ELSEIF ((fct_idg12 /= 0).AND.((fct_idg13 /= 0).OR.(fct_ide1c /=
THEN
225 ncrit_max = ncrit_max + 1
226 ELSEIF ((fct_idg12 == 0).AND.(fct_idg13 == 0).AND.(fct_ide1c == 0
THEN
228 ncrit_max = ncrit_max + 1
233 CALL hm_get_intv (
'tab_IDfld' ,tab_idfld ,is_available,lsubmodel)
234 IF (tab_idfld /= 0)
THEN
235 ncrit_max = ncrit_max + 1
236 crit = ibset(crit,16)
238 modname(nmode) =
"Forming Limit Diagram"
240 CALL hm_get_intv (
'Itab' ,itab ,is_available,lsubmodel)
241 CALL hm_get_floatv (
'MAT_EPSDFLD' ,epsdot_fld,is_available,lsubmodel,unitab)
242 CALL hm_get_intv (
'MAT_NSTEP' ,nstep ,is_available,lsubmodel)
244 CALL hm_get_intv (
'Istrain' ,istrain ,is_available,lsubmodel
246 IF (thin /= zero)
THEN
247 ncrit_max = ncrit_max + 1
248 crit = ibset(crit,17)
250 modname(nmode) =
"Thinning failure"
255 CALL hm_get_intv (
'FAILIP' ,failip ,is_available,lsubmodel)
256 IF (failip == 0) failip = 1
258 CALL hm_get_floatv (
'Pthk' ,pthk ,is_available,lsubmodel,unitab)
259 CALL hm_get_intv (
'MAT_NCS' ,ncs ,is_available,lsubmodel)
260 CALL hm_get_floatv (
'MAT_MAXTEMP' ,maxtemp ,is_available,lsubmodel,unitab)
261 IF (maxtemp /= zero)
THEN
262 ncrit_max = ncrit_max + 1
263 crit = ibset(crit,18)
265 modname(nmode) =
"Maximum temperature"
271 CALL hm_get_floatv (
'Fscale_el' ,fscale_el ,is_available,lsubmodel,unitab)
277 minpres = -abs(minpres)
278 IF (minpres == zero) minpres = -infinity
279 maxpres = abs(maxpres)
280 IF (maxpres == zero) maxpres = infinity
281 IF (sigp1 == zero) sigp1 = infinity
282 IF (tmax == zero) tmax = infinity
283 IF (dtmin == zero) dtmin = -infinity
285 IF (fct_idsm > 0)
THEN
286 IF (epsdot_sm == zero)
THEN
288 epsdot_sm = one*freq_unit
290 IF (sigvm == zero)
THEN
291 CALL hm_get_floatv_dim(
'MAT_SIGVM' ,pressure_unit,is_available, lsubmodel, unitab)
292 sigvm = one*pressure_unit
295 IF (sigvm == zero) sigvm = infinity
297 IF (sigth == zero) sigth = infinity
298 IF (kf == zero) kf = infinity
300 IF (fct_idps > 0)
THEN
301 IF (epsdot_ps == zero)
THEN
303 epsdot_ps = one*freq_unit
305 IF (maxeps == zero)
THEN
309 IF (maxeps == zero) maxeps = two*infinity
311 IF (effeps == zero) effeps = infinity
314 mineps = -abs(mineps)
315 IF (mineps == zero) mineps = -infinity
316 IF (epssh == zero) epssh = infinity
318 IF (tab_idfld > 0)
THEN
321 epsdot_fld = one*freq_unit
324 IF (nstep == 0) nstep = 10
325 IF (ismooth == 0) ismooth = 1
326 IF (thin == zero) thin = -infinity
328 IF (volfrac == zero) volfrac = half
330 volfrac =
max(zero,volfrac)
331 IF (pthk == zero) pthk = one-em06
332 pthk =
min(pthk, one)
333 pthk =
max(pthk,-one)
334 IF (ncs == 0 ) ncs = 1
335 IF (ncs > ncrit_max)
THEN
336 IF (ncrit_max > 0)
THEN
337 CALL ancmsg(msgid=2043,msgtype=msgwarning,
338 . anmode=aninfo_blind_1,i1=mat_id,
339 . c1=titr,i2=ncs,i3=ncrit_max,i4=ncrit_max)
342 CALL ancmsg(msgid=3040,msgtype=msgwarning,
343 . anmode=aninfo_blind_1,i1=mat_id,
348 IF (maxtemp == zero) maxtemp
350 IF (fscale_el == zero) fscale_el = one
351 IF (((fct_idel > 0).OR.(fct_idg12 > 0).OR.(fct_idg13 > 0).OR.(fct_ide1c > 0)
352 . .OR.(tab_idfld > 0.AND.itab == 2)).AND.(el_ref == zero))
THEN
354 el_ref = one*length_unit
363 IF (tab_idfld > 0) ntable = 1
365 fail%KEYWORD =
'GENE1'
367 fail%FAIL_ID = fail_id
368 fail%NUPARAM = nuparam
376 ALLOCATE (fail%UPARAM(fail%NUPARAM))
377 ALLOCATE (fail%IPARAM(fail%NIPARAM))
378 ALLOCATE (fail%IFUNC (fail%NFUNC))
379 ALLOCATE (fail%TABLE (fail%NTABLE))
382 fail_tag%LF_DAMMX = fail_tag%LF_DAMMX + fail%NMOD
383 ALLOCATE (fail%MODE(fail%NMOD))
385 fail%MODE(i) = modname(i)
388 fail%IFUNC(1) = fct_idsm
389 fail%IFUNC(2) = fct_idps
390 fail%IFUNC(3) = fct_idg12
391 fail%IFUNC(4) = fct_idg13
392 fail%IFUNC(5) = fct_ide1c
393 fail%IFUNC(6) = fct_idel
394 IF (ntable == 1) fail%TABLE(1) = tab_idfld
396 fail%IPARAM(1) = crit
397 fail%IPARAM(2) = itab
398 fail%IPARAM(3) = nstep
400 fail%IPARAM(5) = ismooth
401 fail%IPARAM(6) = istrain
403 fail%UPARAM(1) = minpres
404 fail%UPARAM(2) = maxpres
405 fail%UPARAM(3) = sigp1
406 fail%UPARAM(4) = tmax
407 fail%UPARAM(5) = dtmin
408 fail%UPARAM(6) = epsdot_sm
409 fail%UPARAM(7) = sigvm
410 fail%UPARAM(8) = sigth
412 fail%UPARAM(10) = epsdot_ps
413 fail%UPARAM(11) = maxeps
414 fail%UPARAM(12) = effeps
415 fail%UPARAM(13) = voleps
416 fail%UPARAM(14) = mineps
417 fail%UPARAM(15) = epssh
418 fail%UPARAM(16) = epsdot_fld
419 fail%UPARAM(17) = thin
420 fail%UPARAM(18) = volfrac
421 fail%UPARAM(19) = pthk
422 fail%UPARAM(20) = maxtemp
423 fail%UPARAM(21) = fscale_el
424 fail%UPARAM(22) = el_ref
425 fail%UPARAM(23)= failip
429 IF (is_encrypted)
THEN
430 WRITE(iout,
'(5X,A,//)')
'CONFIDENTIAL DATA'
435 WRITE(iout,1001) ncrit_max
441 IF (btest(crit,1))
WRITE(iout,1100) minpres
442 IF (btest(crit,2))
WRITE(iout,1101) maxpres
443 IF (btest(crit,1) .OR. btest(crit,2))
WRITE(iout,1105)
444 IF (btest(crit,3))
WRITE(iout,1102) sigp1
445 IF (btest(crit,4))
WRITE(iout,1103) tmax
446 IF (btest(crit,5))
WRITE(iout,1104) dtmin
448 IF (btest(crit,6))
THEN
449 IF (fct_idsm > 0)
THEN
450 WRITE(iout,2000) fct_idsm,epsdot_sm,sigvm
452 WRITE(iout,2100) sigvm
455 IF (btest(crit,7))
WRITE(iout,2001) sigth,kf
457 IF (btest(crit,8))
THEN
458 IF (fct_idps > 0)
THEN
459 WRITE(iout,3000) fct_idps,epsdot_ps,maxeps
461 WRITE(iout,3100) maxeps
464 IF (btest(crit,9))
WRITE(iout,3001) effeps
465 IF (btest(crit,10))
WRITE(iout,3002) voleps
467 IF (btest(crit,11))
WRITE(iout,4000) mineps
468 IF (btest(crit,12))
WRITE(iout,4001) epssh
469 IF (btest(crit,13))
WRITE(iout,4100) fct_idg12
470 IF (btest(crit,14))
WRITE(iout,4200) fct_idg13
471 IF (btest(crit,15))
WRITE(iout,4300) fct_ide1c
473 IF (btest(crit,16))
THEN
474 WRITE(iout,5000) tab_idfld,itab,epsdot_fld,
477 IF (btest(crit,17))
WRITE(iout,5002) thin
479 IF (btest(crit,18))
WRITE(iout,6001) maxtemp
481 IF (fct_idel > 0)
WRITE(iout,7000) fct_idel,fscale_el
482 IF (((fct_idel > 0).OR.(fct_idg12 > 0).OR.(fct_idg13 > 0).OR.(fct_ide1c > 0)
483 . .OR.(tab_idfld > 0.AND.itab == 2)))
WRITE(iout,7100) el_ref
486 WRITE(iout,6000) volfrac,pthk,failip
487 WRITE(iout,5001) nstep
492 & 5x,
' ----------------------------------------------------',/,
493 & 5x,
' FAILURE CRITERION : GENE1 ',/,
494 & 5x,
' ----------------------------------------------------',/)
496 & 5x,
'NUMBER OF CRITERIA SPECIFIED IN THE INPUT. . . . . .=',i10,/)
498 & 5x,
'NUMBER OF CRITERIA TO REACH FOR ELEMENT DELETION . .=',i10,/)
500 & 5x,
'SPECIFIED ELEMENT DELETION CRITERIA:',/,
501 & 5x,
'------------------------------------',/)
503 & 5x,
'MINIMUM PRESSURE . . . . . . . . . . . . . . . . . .=',1pg20.13,/)
505 & 5x,
'MAXIMUM PRESSURE . . . . . . . . . . . . . . . . . .=',1pg20.13,/)
507 & 5x,
'MAXIMUM PRINCIPAL STRESS . . . . . . . . . . . . . .=',1pg20.13,/
508 & 5x,
' < 0.0 : RESTRICTED TO POSITIVE STRESS TRIAXIALITIES',/,
509 & 5x,
' > 0.0 : UNRESTRICTED ',/)
511 & 5x,
'FAILURE TIME . . . . . . . . . . . . . . . . . . . .=',1pg20.13,/)
513 & 5x,
'MINIMUM TIME STEP . . . . . . . . . . . . . . . . .=',1pg20.13,/)
515 & 5x,
'NOTE : PRESSURE IS DEFINED SO THAT IT IS POSITIVE IN COMPRESSION',/)
517 & 5x,
'FUNCTION ID FOR EQ. STRESS VS STRAIN-RATE . . . . .=',i10,/,
518 & 5x,
'REFERENCE STRAIN-RATE . . . . . . . . . . . . . . .=',1pg20.13,/
519 & 5x,
'EQUIVALENT STRESS SCALE FACTOR . . . . . . . . . . .=',1pg20.13,/)
521 & 5x,
'INITIAL STRESS FOR TULER-BUTCHER CRITERION . . . . .=',1pg20.13,/
522 & 5x,
'CRITICAL TULER-BUTCHER INTEGRAL VALUE . . . . . . .=',1pg20.13,/)
524 & 5x,
'MAXIMUM EQUIVALENT STRESS . . . . . . . . . . . . .=',1pg20.13,/)
526 & 5x,
'FUNCTION ID FOR PRINC. STRAIN VS STRAIN-RATE . . . .=',i10,/,
527 & 5x,
'REFERENCE STRAIN-RATE . . . . . . . . . . . . . . .=',1pg20.13,/
528 & 5x,
'PRINCIPAL STRAIN SCALE FACTOR . . . . . . . . . . .=',1pg20.13,/)
530 & 5x,
'MAXIMUM EFFECTIVE STRAIN . . . . . . . . . . . . . .=',1pg20.13,/)
532 & 5x,
'MAXIMUM VOLUMETRIC STRAIN . . . . . . . . . . . . .=',1pg20.13,/)
534 & 5x,
'MAXIMUM PRINCIPAL STRAIN . . . . . . . . . . . . . .=',1pg20.13,/)
536 & 5x,
'MINIMUM PRINCIPAL STRAIN . . . . . . . . . . . . . .=',1pg20.13,/)
538 & 5x,
'TENSORIAL SHEAR STRAIN AT FAILURE. . . . . . . . . .=',1pg20.13,/)
540 & 5x,
'FUNCTION ID FOR MAX.IN-PLANE SHEAR VS EL.SIZE . . .=',i10,/)
542 & 5x,
'FUNCTION ID FOR MAX.TRANSVERSE SHEAR VS EL.SIZE . .=',i10,/)
544 & 5x,
'FUNCTION ID FOR IN-PLANE MAJOR STRAIN VS EL.SIZE . .=',i10,/)
546 & 5x,
'TABLE ID FOR FORMING LIMIT DIAGRAM . . . . . . . . .=',i10,/,
547 & 5x,'flag
for table dependency . . . . . . . . . . . . .=
',I10,/,
548 & 5X,' = 1 : forming limit diagram vs strain-rate
',/,
549 & 5X,' = 2 : forming limit diagram vs element
SIZE ',/,
550 & 5X,'reference strain-rate . . . . . . . . . . . . . . .=
',1PG20.13,/,
551 & 5X,'tabulated FUNCTION interpolation flag . . . . . . .=
',I10,/,
552 & 5X,'engineering / true input strain flag . . . . . . . .=
',I10,/)
554 & 5X,'number of cycles before element deletion . . . . . .=
',I10,/)
556 & 5X,'shell thinning at failure . . . . . . . . . . . . .=
',1PG20.13,/)
558 & 5X,'volume fraction
for solid element deletion . . . . .=
',1PG20.13,/,
559 & 5X,'shell element deletion parameter pthickfail. . . . .=
',1PG20.13,/,
560 & 5X,' > 0.0 : fraction of failed thickness
',/,
561 & 5X,' < 0.0 : fraction of failed intg. points or layers
',/,
562 & 5X,'number of failed intg. points prior to elem deletion .=
',I10/)
564 & 5X,'maximum temperature . . . . . . . . . . . . . . . .=
',1PG20.13,/)
566 & 5X,'regularization function
id . . . . . . . . . . . . .=
',I10,/,
567 & 5X,'scale factor
for regularization function . . . . . .=
',1PG20.13,/)
569 & 5X,'reference element length . . . . . . . . . . . . . .=
',1PG20.13,/)
571 & 5X,'element deletion properties:
',/,
572 & 5X,'----------------------------
',/)
574 & 5X,' ----------------------------------------------------
',//)