40 . MAT_ID ,FAIL_ID ,IRUPT ,IXFEM ,
58#include "implicit_f.inc"
66 INTEGER ,
INTENT(IN) :: FAIL_ID
67 INTEGER ,
INTENT(IN) :: MAT_ID
68 INTEGER ,
INTENT(IN) :: IRUPT
69 TYPE (UNIT_TYPE_) ,
INTENT(IN) :: UNITAB
70 TYPE (SUBMODEL_DATA),
INTENT(IN) :: LSUBMODEL(*)
71 INTEGER ,
INTENT(INOUT) :: IXFEM
72 TYPE (FAIL_PARAM_) ,
INTENT(INOUT) :: FAIL
76 INTEGER :: IFAIL_SH,ISOLID,DMG_FLAG,INST_FLAG,
77 . IFUN_DMG,ITAB_EPSF,ITAB_INST,IFUN_SIZE,IFUN_TEMP
78 my_real :: p_thick,pthkf,p_thinnfail,scale_temp,scale_el,el_ref,
79 . y1scale,x1scale,y2scale,x2scale,dcrit,dd,dn,dadv,
80 .
ecrit,fade_expo,fscal_unit,shrf,biaxf
82 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
94 is_encrypted = .false.
95 is_available = .false.
106 CALL hm_get_intv (
'Ifail_sh' ,ifail_sh ,is_available,lsubmodel)
107 CALL hm_get_intv (
'Ifail_so' ,isolid ,is_available,lsubmodel)
108 CALL hm_get_floatv (
'P_thickfail' ,p_thick ,is_available,lsubmodel,unitab)
109 CALL hm_get_floatv (
'P_thinfail' ,p_thinnfail ,is_available,lsubmodel,unitab)
110 CALL hm_get_intv (
'Ixfem' ,ixfem ,is_available,lsubmodel)
112 CALL hm_get_floatv (
'Dcrit' ,dcrit ,is_available,lsubmodel,unitab)
115 CALL hm_get_floatv (
'Dadv' ,dadv ,is_available,lsubmodel,unitab)
116 CALL hm_get_intv (
'fct_IDd' ,ifun_dmg ,is_available,lsubmodel)
118 CALL hm_get_intv (
'table1_ID' ,itab_epsf ,is_available,lsubmodel)
119 CALL hm_get_floatv (
'Xscale1' ,y1scale ,is_available,lsubmodel,unitab)
120 CALL hm_get_floatv (
'Xscale2' ,x1scale ,is_available,lsubmodel,unitab)
121 CALL hm_get_intv (
'table2_ID' ,itab_inst ,is_available,lsubmodel)
122 CALL hm_get_floatv (
'Xscale3' ,y2scale ,is_available,lsubmodel,unitab)
123 CALL hm_get_floatv (
'Xscale4' ,x2scale ,is_available,lsubmodel,unitab)
125 CALL hm_get_intv (
'fct_IDel' ,ifun_size ,is_available,lsubmodel)
126 CALL hm_get_floatv (
'Fscale_el' ,scale_el ,is_available,lsubmodel,unitab)
127 CALL hm_get_floatv (
'EI_ref' ,el_ref ,is_available,lsubmodel,unitab)
129 CALL hm_get_floatv (
'Fad_exp' ,fade_expo ,is_available,lsubmodel,unitab)
130 CALL hm_get_intv (
'Ch_i_f' ,inst_flag ,is_available,lsubmodel)
132 CALL hm_get_intv (
'fct_IDt' ,ifun_temp ,is_available,lsubmodel)
133 CALL hm_get_floatv (
'FscaleT' ,scale_temp ,is_available,lsubmodel,unitab)
134 CALL hm_get_floatv ('shear_limit
' ,SHRF ,IS_AVAILABLE,LSUBMODEL,UNITAB)
135 CALL HM_GET_FLOATV ('biax_limit
' ,BIAXF ,IS_AVAILABLE,LSUBMODEL,UNITAB)
137 ! Error massage: 'table1_id
' is mandatory:
138 IF (ITAB_EPSF == 0) THEN
139 CALL ANCMSG(MSGID=2068, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND,
145 IF (DCRIT == ZERO) DCRIT = ONE
146 IF (DADV == ZERO) DADV = DCRIT
147 IF (DADV > DCRIT) THEN
149 CALL ANCMSG(MSGID=974, MSGTYPE=MSGWARNING, ANMODE=ANINFO,
152 IF (DD == ONE ) DD = 0.999
153 IF (ITAB_INST > 0) THEN
155 ELSEIF (ECRIT == ZERO) THEN
158 IF (DN == ZERO) DN = ONE
159 IF (IFAIL_SH == 0) IFAIL_SH = 1
160 IF (ISOLID == 0) ISOLID = 1
161.AND.
IF (IXFEM /= 1 IXFEM /= 2) IXFEM = 0
162 IF (IXFEM > 0) ISOLID = 0
163 IF (Y1SCALE == ZERO) Y1SCALE = ONE
164 IF (Y2SCALE == ZERO) Y2SCALE = ONE
165 IF (SCALE_EL == ZERO) SCALE_EL = ONE
166 IF (SCALE_TEMP == ZERO) SCALE_TEMP = ONE
167 IF (SHRF == ZERO) SHRF =-ONE
168 IF (BIAXF == ZERO) BIAXF = ONE
170.or.
IF (FADE_EXPO > ZERO ECRIT /= ZERO) THEN
175.OR.
IF (INST_FLAG == 0 INST_FLAG > 3) INST_FLAG = 1
176 IF (P_THICK == ONE ) P_THICK = P_THICK - EM06
177 IF (P_THICK == ZERO) P_THICK = ONE-EM06
178 P_THICK = MIN(P_THICK, ONE)
179 P_THICK = MAX(P_THICK,-ONE)
181.and.
IF (P_THICK > ZERO IFAIL_SH > 1) THEN
183 ELSEIF (IFAIL_SH == 1) THEN
185 ELSEIF (IFAIL_SH == 2) THEN
189 CALL HM_GET_FLOATV_DIM('xscale2
' ,FSCAL_UNIT ,IS_AVAILABLE ,LSUBMODEL ,UNITAB)
190 IF (X1SCALE == ZERO) X1SCALE = ONE*FSCAL_UNIT
192 CALL HM_GET_FLOATV_DIM('xscale4
' ,FSCAL_UNIT ,IS_AVAILABLE ,LSUBMODEL ,UNITAB)
193 IF (X2SCALE == ZERO) X2SCALE = ONE*FSCAL_UNIT
195 CALL HM_GET_FLOATV_DIM('ei_ref
' ,FSCAL_UNIT ,IS_AVAILABLE ,LSUBMODEL ,UNITAB)
196 IF (EL_REF == ZERO) EL_REF = ONE*FSCAL_UNIT
198 FAIL%KEYWORD = 'tab1
'
200 FAIL%FAIL_ID = FAIL_ID
209 ALLOCATE (FAIL%UPARAM(FAIL%NUPARAM))
210 ALLOCATE (FAIL%IPARAM(FAIL%NIPARAM))
211 ALLOCATE (FAIL%IFUNC (FAIL%NFUNC))
212 ALLOCATE (FAIL%TABLE (FAIL%NTABLE))
214 FAIL%UPARAM(1) = ISOLID
215 FAIL%UPARAM(2) = IFAIL_SH
216 FAIL%UPARAM(3) = 0 ! not used (P_THICK)
217 FAIL%UPARAM(4) = DCRIT
220 FAIL%UPARAM(7) = SCALE_TEMP
221 FAIL%UPARAM(8) = SCALE_EL
222 FAIL%UPARAM(9) = EL_REF
223 FAIL%UPARAM(10)= 0 ! not used (xfem)
224 FAIL%UPARAM(11)= DADV
225 FAIL%UPARAM(12)= Y1SCALE
226 FAIL%UPARAM(13)= ONE / X1SCALE
227 FAIL%UPARAM(14)= Y2SCALE
228 FAIL%UPARAM(15)= ONE / X2SCALE
229 FAIL%UPARAM(16)= P_THINNFAIL
230 FAIL%UPARAM(17)= ECRIT
231 FAIL%UPARAM(18)= FADE_EXPO
232 FAIL%UPARAM(19)= DMG_FLAG
233 FAIL%UPARAM(20)= INST_FLAG
234 FAIL%UPARAM(21)= SHRF
235 FAIL%UPARAM(22)= BIAXF
237 FAIL%TABLE(1) = ITAB_EPSF
238 FAIL%TABLE(2) = ITAB_INST
239 FAIL%IFUNC(1) = IFUN_SIZE
240 FAIL%IFUNC(2) = IFUN_TEMP
241 FAIL%IFUNC(3) = IFUN_DMG
242 IF (FADE_EXPO < ZERO) THEN
243 FAIL%IFUNC(4) = INT(ABS(FADE_EXPO))
248 IF (IS_ENCRYPTED)THEN
249 WRITE(IOUT,'(5x,a,//)
')'confidential data
'
251 WRITE(IOUT,100) MAT_ID,IRUPT,FAIL_ID
253 WRITE(IOUT, 1001) ITAB_EPSF, Y1SCALE, X1SCALE
254 IF (ITAB_INST /= 0) THEN
255 WRITE(IOUT, 1002) ITAB_INST, Y2SCALE, X2SCALE
257 IF (IXFEM > 0) WRITE(IOUT, 1003) IXFEM,DADV
258 WRITE(IOUT, 1004) P_THICK,P_THINNFAIL
259 IF (IFUN_DMG > 0) THEN
260 WRITE(IOUT, 1009) DCRIT,IFUN_DMG,ECRIT
262 WRITE(IOUT, 1005) DCRIT,DD,DN,ECRIT
264 IF (FADE_EXPO >= ZERO) THEN
265 WRITE(IOUT, 1006) FADE_EXPO
267 WRITE(IOUT, 1007) INT(ABS(FADE_EXPO))
269 WRITE(IOUT, 1008) DMG_FLAG,
270 . IFUN_TEMP,SCALE_TEMP,
271 . IFUN_SIZE,SCALE_EL,EL_REF,SHRF,BIAXF,INST_FLAG
272 WRITE(IOUT, 1008) DMG_FLAG,IFUN_TEMP,SCALE_TEMP,IFUN_SIZE,SCALE_EL,
273 . EL_REF,SHRF,BIAXF,INST_FLAG
276 IF(IFAIL_SH == 1) THEN
278 ELSEIF (IFAIL_SH == 2) THEN
280 ELSEIF (IFAIL_SH == 3) THEN
283 ELSE IF (IXFEM == 1) THEN
287 IF (ISOLID == 1) THEN
289 ELSEIF(ISOLID == 2) THEN
298 & 5X,'mat_id . . . . . . . . . . . . . . .=
',I10/
299 & 5X,'failure model. . . . . . . . . . . .=
',I10/
300 & 5X,'fail_id. . . . . . . . . . . . . . .=
',I10/)
302 & 5X,'tabulated failure criteria with damage
',//,
303 & 5X,'strain table
id . . . . . . . . . . . . . . . . . . .=
',I10/
304 & 5X,' scale factor
for failure strain . . . . . . . . .=
',1PG20.13/
305 & 5X,' strain rate factor
for failure strain . . . . . .=
',1PG20.13)
307 & 5X,'necking table
id . . . . . . . . . . . . . . . .=
',I10/
308 & 5X,' scale factor
for necking strain. . . . . . . . .=
',1PG20.13/
309 & 5X,' strain rate factor
for necking strain. . . . . .=
',1PG20.13)
311 & 5X,'flag xfem. . . . . . . .. . . . . . . . . . . . . . .=
',I10/
312 & 5X,' xfem advancement softening factor. . . . . . . .=
',1PG20.13)
314 & 5X,'shell element deletion
PARAMETER pthickfail . . . . .=
',1PG20.13,/,
315 & 5X,' > 0.0 : fraction of failed thickness
',/,
316 & 5X,' < 0.0 : fraction of failed intg. points or layers
',/,
317 & 5X,'shell failure due to thinning . . . . . . . . . . .
',1PG20.13)
319 & 5X,'critical damage
VALUE . . . . . . . . . . . . . . . .=
',1PG20.13/
320 & 5X,'damage
PARAMETER d. . . . . . . . . . . . . . . . . .=
',1PG20.13/
321 & 5X,'damage
PARAMETER n. . . . . . . . . . . . . . . . . .=
',1PG20.13/
322 & 5X,'instability strain. . . . . . . . . . . . . . . . . .=
',1PG20.13)
324 & 5X,'critical damage
VALUE . . . . . . . . . . . . . . . .=
',1PG20.13/
325 & 5X,'damage evolution
FUNCTION . . . . . . . . . . . . . .=
',I10/
326 & 5X,'instability strain. . . . . . . . . . . . . . . . . .=
',1PG20.13)
328 & 5X,'fade parameter. . . . . . . . . . . . . . . . . . . .=
',1PG20.13)
330 & 5X,'fade function . . . . . . . . . . . . . . . . . . . .=',i10)
332 & 5x,
'DAMAGE FLAG . . . . . . . . . . . . . . . . . . . . .=',i10/
333 & 5x,
'TEMPERATURE SCALE FUNCTION. . . . . . . . . . . . . .=',i10/
334 & 5x,
'SCALE FACTOR OF TEMPERATURE FUNCTION. . . . . . . . .='
335 & 5x,
'ELEMENT LENGTH FUNCTION . . . . . . . . . . . . . . .=',i10/
336 & 5x,
'SCALE FACTOR OF LENGTH FUNCTION . . . . . . . . . . .=',1pg20.13/
337 & 5x,
'REFERENCE ELEMENT LENGTH. . . . . . . . . . . . . . .=',1pg20.13/
338 & 5x,
'SHEAR TRIAXIALITY LIMIT FOR ELEMENT SIZE SCALING. . .=',1pg20.13/
339 & 5x,
'BI-TRACT TRIAXIALITY LIMIT FOR ELEMENT SIZE SCALING .=',1pg20.13/
340 & 5x,
'REGULARIZATION FLAG . . . . . . . . . . . . . . . . .=',i10/
341 & 5x,
'FAILURE OPTION:')
343 & 5x,
' SHELL ELEMENT DELETION AFTER FAILURE OF ONE LAYER')
345 & 5x,
' STRESS TENSOR IN SHELL LAYER SET TO ZERO AFTER FAILURE')
347 & 5x,
' SHELL ELEMENT DELETION AFTER FAILURE OF ALL LAYERS')
349 & 5x,
' SHELL ELEMENT CRACKING AFTER FAILURE')
351 & 5x,
' SOLID ELEMENT DELETION AFTER FAILURE')
353 & 5x,
' DEVIATORIC STRESS IN SOLID WILL VANISH AFTER FAILURE')
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)