90 . NTABLE ,TABLE ,FAILWAVE,NLOC_DMG ,
104 USE hm_read_fail_spalling_mod
105 USE hm_read_fractal_dmg_mod
106 USE hm_read_fail_lemaitre_mod
107 USE hm_read_fail_composite_mod
112#include "implicit_f.inc"
116#include "units_c.inc"
117#include "com_xfem1.inc"
118#include "userlib.inc"
122 INTEGER ,
INTENT(IN) :: NUMMAT
123 INTEGER ,
INTENT(IN) :: NTABLE
124 INTEGER ,
INTENT(IN) :: MAXFAIL
125 TYPE (FAIL_TAG_),
DIMENSION(0:MAXFAIL ) :: FAIL_TAG
126 TYPE (FAILWAVE_STR_) :: FAILWAVE
127 TYPE (NLOCAL_STR_) :: NLOC_DMG
128 TYPE (TTABLE) ,
INTENT(IN) :: TABLE(NTABLE)
129 TYPE (MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT) ,
INTENT(INOUT) :: MAT_PARAM
130 TYPE (SUBMODEL_DATA),
INTENT(IN) ::LSUBMODEL(*)
131 TYPE (UNIT_TYPE_),
INTENT(IN) :: UNITAB
135 INTEGER ,J,N,IMAT,IFAIL,IFL,ILAW,MAT_ID,FAIL_ID,
136 . ILOC,IRUPT,IFAILWAVE,UNIT_ID,IXFEM,HM_NBFAIL,IUNIT,IFLAGUNIT
137 INTEGER ,
DIMENSION(:) ,
ALLOCATABLE :: FAIL_MAT_NUM
139 CHARACTER(LEN = NCHARKEY) :: KEY
140 CHARACTER(LEN=NCHARTITLE) :: TITR
143 CHARACTER(LEN=NCHARLINE) :: IUSER_KEY
145 LOGICAL :: IS_AVAILABLE,IS_ID_LINE
147 DATA mess /
'FAILURE MODELS DEFINITION '/
149 is_available = .false.
155 fail_tag(i)%LF_DAM = 0
156 fail_tag(i)%LF_DAMMX = 1
157 fail_tag(i)%LF_DAMINI = 0
159 fail_tag(i)%LF_INDX = 0
160 fail_tag(i)%LF_OFF = 1
161 fail_tag(i)%LF_DIR = 0
174 ALLOCATE (fail_mat_num(hm_nbfail))
179 DO ifail = 1,hm_nbfail
182 . option_id = fail_id,
183 . unit_id = unit_id ,
186 CALL hm_get_intv(
'mat_id' ,mat_id ,is_available,lsubmodel)
190 IF (mat_param(imat)%MAT_ID == mat_id)
THEN
191 mat_param(imat)%NFAIL = mat_param(imat)%NFAIL + 1
192 fail_mat_num(ifail) = imat
203 mat_param(1:nummat)%NFAIL = 0
209 DO ifail = 1,hm_nbfail
210 imat = fail_mat_num(ifail)
213 . option_id = fail_id, !
read in
optional line
if added
214 . unit_id = unit_id ,
216 CALL hm_get_intv(
'mat_id' ,mat_id ,is_available,lsubmodel)
219 CALL ancmsg(msgid=3050,anmode=aninfo,msgtype=msgwarning,
224 ELSE IF (imat > 0)
THEN
228 IF (unit_id > 0)
THEN
230 DO iunit=1,unitab%NUNITS
231 IF (unitab%UNIT_ID(iunit) == unit_id)
THEN
237 IF (iflagunit == 0)
THEN
238 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
242 . c2=
'FAILURE MODEL',
247 CALL hm_get_intv(
'mat_id' ,mat_id ,is_available,lsubmodel)
248 CALL hm_get_boolv (
'ID_CARD_EXIST',is_id_line,is_available)
249 IF ( .NOT. (is_id_line)) fail_id = 0
256 WRITE(iout,1000) mat_id,adjustr(key(1:10)),fail_id
258 IF (mat_param(imat)%MAT_ID == mat_id)
THEN
259 mat_param(imat)%NFAIL = mat_param(imat)%NFAIL + 1
260 ifl = mat_param(imat)%NFAIL
261 ilaw = mat_param(imat)%ILAW
264 IF (key(1:5) ==
'JOHNS')
THEN
267 . mat_id ,fail_id ,ilaw ,irupt ,ixfem ,
268 . mat_param(imat)%TITLE ,lsubmodel ,unitab )
271 ELSEIF (key(1:5) ==
'TBUTC')
THEN
274 . mat_id ,fail_id ,irupt ,ixfem ,
277 ELSEIF (key(1:5) ==
'WILKI')
THEN
280 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
282 ELSEIF (key(1:5) ==
'USER1')
THEN
284 unitab_sub(1) = unitab%UNIT_ID(iunit)
285 unitab_sub(2) = unitab%FAC_M(iunit)
286 unitab_sub(3) = unitab%FAC_L(iunit)
287 unitab_sub(4) = unitab%FAC_T(iunit)
289 iuser_key(1:len_trim(key)) = key(1:len_trim(key))
292 . irupt,iuser_key,userl_avail,
293 . lsubmodel,unitab_sub,mat_id)
295 ELSEIF (key(1:5) ==
'USER2')
THEN
297 unitab_sub(1) = unitab%UNIT_ID(iunit)
298 unitab_sub(2) = unitab%FAC_M(iunit)
299 unitab_sub(3) = unitab%FAC_L(iunit)
300 unitab_sub(4) = unitab%FAC_T(iunit)
302 iuser_key(1:len_trim(key)) = key(1:len_trim(key))
305 . irupt,iuser_key,userl_avail,
306 . lsubmodel,unitab_sub,mat_id)
308 ELSEIF (key(1:5) ==
'USER3')
THEN
310 unitab_sub(1) = unitab%UNIT_ID(iunit)
311 unitab_sub(2) = unitab%FAC_M(iunit)
312 unitab_sub(3) = unitab%FAC_L(iunit)
313 unitab_sub(4) = unitab%FAC_T(iunit)
315 iuser_key(1:len_trim(key)) = key(1:len_trim(key))
319 . lsubmodel,unitab_sub,mat_id)
321 ELSEIF (key(1:3) ==
'FLD')
THEN
324 . mat_id ,fail_id ,irupt ,ixfem ,
325 . lsubmodel,unitab ,fail_tag(irupt))
327 ELSEIF (key(1:5) ==
'SPALL')
THEN
329 CALL hm_read_fail_spalling(mat_param(imat)%FAIL(ifl),
330 . mat_id ,fail_id ,irupt ,
331 . lsubmodel,unitab ,fail_tag(irupt),iout )
333 ELSEIF (key(1:6) ==
'WIERZB'THEN
336 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
338 ELSEIF (key(1:8) ==
'TENSSTRA')
THEN
341 . mat_id ,fail_id ,irupt ,
342 . lsubmodel,unitab ,unit_id
344 ELSEIF (key(1:6) ==
'ENERGY')
THEN
347 . mat_id ,fail_id ,irupt ,lsubmodel,unitab)
349 ELSEIF (key(1:11) ==
'FRACTAL_DMG')
THEN
351 CALL hm_read_fractal_dmg(mat_param(imat)%FAIL(ifl),
352 . mat_id ,fail_id ,irupt ,lsubmodel,unitab ,iout )
354 fail_tag(irupt)%LF_DAMMX = 1
356 ELSEIF (key(1:5) ==
'CHANG')
THEN
359 . mat_id ,fail_id ,irupt ,
360 . lsubmodel,unitab ,fail_tag(irupt))
362 ELSEIF (key(1:6) ==
'HASHIN')
THEN
365 . mat_id ,fail_id ,irupt ,ifailwave,
366 . lsubmodel,unitab ,fail_tag(irupt))
371 ELSEIF (key(1:4) ==
'PUCK')
THEN
375 . lsubmodel,unitab ,fail_tag(irupt))
380 ELSEIF (key(1:8) ==
'LAD_DAMA')
THEN
383 . mat_id ,fail_id ,irupt ,
389 ELSEIF (key(1:7) ==
'CONNECT')
THEN
392 . mat_id ,fail_id ,irupt ,unit_id ,
393 . lsubmodel,unitab ,fail_tag(irupt))
401 ELSEIF (key(1:4) ==
'TAB1')
THEN
404 . mat_id ,fail_id ,irupt ,ixfem ,
407 ELSEIF (key(1:4) ==
'TAB2')
THEN
410 . mat_id ,fail_id ,irupt ,mat_param(imat)%TITLE,
413 ELSEIF (key(1:3) ==
'TAB')
THEN
416 . mat_id ,fail_id ,irupt ,ixfem ,
419 ELSEIF (key(1:10) ==
'ORTHSTRAIN')
THEN
422 . fail_id ,irupt ,lsubmodel,unitab ,
425 ELSEIF (key(1:3) ==
'NXT')
THEN
428 . mat_id ,fail_id ,irupt ,
429 . lsubmodel,unitab ,fail_tag(irupt))
431 ELSEIF (key(1:9) ==
'SNCONNECT')
THEN
434 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
435 fail_tag(irupt)%LF_DAM = 3
437 ELSEIF (key(1:3) ==
'EMC')
THEN
440 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
442 ELSEIF (key(1:5) ==
'ALTER')
THEN
445 . maxfail ,mat_id ,fail_id ,irupt ,ixfem ,
446 . ifailwave,lsubmodel,unitab )
448 ELSEIF (key(1:8) ==
'SAHRAEI')
THEN
451 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
453 ELSEIF (key(1:6) ==
'BIQUAD')
THEN
456 . mat_id ,fail_id ,irupt ,
457 . mat_param(imat)%TITLE ,lsubmodel,unitab )
459 ELSEIF (key(1:6) ==
'FABRIC')
THEN
462 . mat_id ,fail_id ,irupt ,unit_id ,
465 ELSEIF (key(1:7) ==
'HC_DSSE')
THEN
468 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
469 fail_tag(irupt)%LF_DAM = 1
470 fail_tag(irupt)%LF_INDX = 1
471 ELSEIF (key(1:10) ==
'MULLINS_OR')
THEN
474 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
476 ELSEIF (key(1:9) ==
'COCKCROFT')
THEN
479 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
481 ELSEIF (key(1:6) ==
'GURSON')
THEN
484 . mat_id ,fail_id ,irupt ,iloc ,
485 . mat_param(imat)%TITLE ,lsubmodel,unitab )
487 ELSEIF (key(1:6) ==
'VISUAL')
THEN
490 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
492 ELSEIF (key(1:10) ==
'ORTHBIQUAD')
THEN
495 . mat_id ,fail_id ,irupt ,
496 . mat_param(imat)%TITLE ,lsubmodel,unitab
498 ELSEIF (key(1:5) ==
'GENE1')
THEN
501 . mat_id ,fail_id ,irupt ,
502 . mat_param(imat)%TITLE ,lsubmodel,unitab,
505 ELSEIF (key(1:4) ==
'RTCL')
THEN
508 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
510 ELSEIF (key(1:6) ==
'INIEVO')
THEN
513 . mat_id ,fail_id ,irupt ,
514 . mat_param(imat)%TITLE ,lsubmodel,unitab )
515 fail_tag(irupt)%LF_DAMINI = 1
517 ELSEIF (key(1:7) ==
'SYAZWAN')
THEN
520 . mat_id ,fail_id ,irupt ,
521 . mat_param(imat)%TITLE ,lsubmodel,unitab )
523 ELSEIF (key(1:6) ==
'TSAIWU')
THEN
526 . mat_id ,fail_id ,irupt ,lsubmodel,unitab,
529 ELSEIF (key(1:8) ==
'TSAIHILL')
THEN
532 . mat_id ,fail_id ,irupt ,lsubmodel,unitab ,
535 ELSEIF (key(1:7) ==
'HOFFMAN')
THEN
538 . mat_id ,fail_id ,irupt ,lsubmodel,unitab,
541 ELSEIF (key(1:9) ==
'MAXSTRAIN')
THEN
544 . mat_id ,fail_id ,irupt ,lsubmodel,unitab ,
547 ELSEIF(key(1:9) ==
'ORTHENERG')
THEN
550 . fail_id ,irupt ,lsubmodel,unitab )
552 ELSEIF (key(1:8) ==
'LEMAITRE')
THEN
554 CALL hm_read_fail_lemaitre(mat_param(imat)%FAIL(ifl),
555 . fail_id ,irupt ,lsubmodel,unitab ,iout )
557 ELSEIF (key(1:9) ==
'COMPOSITE')
THEN
559 CALL hm_read_fail_composite(mat_param(imat)%FAIL(ifl),
560 . fail_id ,irupt ,lsubmodel,unitab ,fail_tag(irupt),
565 nloc_dmg%IMOD =
max(nloc_dmg%IMOD, iloc)
566 failwave%WAVE_MOD =
max(failwave%WAVE_MOD,ifailwave)
568 mat_param(imat)%IFAILWAVE = ifailwave
569 mat_param(imat)%NLOC = iloc
570 mat_param(imat)%IXFEM = ixfem
571 IF (ixfem == 1) icrack3d = 1
578 DEALLOCATE (fail_mat_num)
583 & 5x,
'MAT_ID . . . . . . . . . . . . . . .=',i10/
584 & 5x,
'FAILURE MODEL TYPE . . . . . . . . .=',a/
585 & 5x,
'FAIL_ID. . . . . . . . . . . . . . .=',i10/)