92
93
94
95 USE matparam_def_mod
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
109
110
111
112#include "implicit_f.inc"
113
114
115
116#include "units_c.inc"
117#include "com_xfem1.inc"
118#include "userlib.inc"
119
120
121
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
132
133
134
135 INTEGER I,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
138 CHARACTER MESS*40
139 CHARACTER(LEN = NCHARKEY) :: KEY
140 CHARACTER(LEN=NCHARTITLE) :: TITR
141
143 CHARACTER(LEN=NCHARLINE) :: IUSER_KEY
144
145 LOGICAL :: IS_AVAILABLE,IS_ID_LINE
146
147 DATA mess /'FAILURE MODELS DEFINITION '/
148
149 is_available = .false.
150 is_id_line = .false.
151
152
153
154 DO i = 0,maxfail
155 fail_tag(i)%LF_DAM = 0
156 fail_tag(i)%LF_DAMMX = 1
157 fail_tag(i)%LF_DAMINI = 0
158 fail_tag(i)%LF_TDEL = 1
159 fail_tag(i)%LF_INDX = 0
160 fail_tag(i)%LF_OFF = 1
161 fail_tag(i)%LF_DIR = 0
162 ENDDO
163
164 icrack3d = 0
165
166
167
168
170
171
172
173
174 ALLOCATE (fail_mat_num(hm_nbfail))
175 fail_mat_num(:) = 0
176
178
179 DO ifail = 1,hm_nbfail
180
182 . option_id = fail_id,
183 . unit_id = unit_id ,
184 . keyword2 = key )
185
186 CALL hm_get_intv(
'mat_id' ,mat_id ,is_available,lsubmodel)
187
188
189 DO imat = 1,nummat-1
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
193 EXIT
194 ENDIF
195 END DO
196 END DO
197
198
199
200
202
203 mat_param(1:nummat)%NFAIL = 0
204
205
206
208
209 DO ifail = 1,hm_nbfail
210 imat = fail_mat_num(ifail)
211
213 . option_id = fail_id,
214 . unit_id = unit_id ,
215 . keyword2 = key )
216 CALL hm_get_intv(
'mat_id' ,mat_id ,is_available,lsubmodel)
217
218 IF (imat == 0) THEN
219 CALL ancmsg(msgid=3050,anmode=aninfo,msgtype=msgwarning,
220 . c1= key ,
221 . i1= fail_id,
222 . i2= mat_id)
223
224 ELSE IF (imat > 0) THEN
225
226
227 iunit = 1
228 IF (unit_id > 0) THEN
229 iflagunit = 0
230 DO iunit=1,unitab%NUNITS
231 IF (unitab%UNIT_ID(iunit) == unit_id) THEN
232 iflagunit = 1
233 unit_id = iunit
234 EXIT
235 ENDIF
236 ENDDO
237 IF (iflagunit == 0) THEN
238 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
239 . i1= mat_id,
240 . i2= unit_id,
241 . c1='MATERIAL',
242 . c2='FAILURE MODEL',
243 . c3=' ')
244 ENDIF
245 ENDIF
246
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
250
251 ixfem = 0
252 iloc = 0
253 ifailwave = 0
254
255
256 WRITE(iout,1000) mat_id,adjustr(key(1:10)),fail_id
257
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
262
263
264 IF (key(1:5) == 'JOHNS') THEN
265 irupt = 1
267 . mat_id ,fail_id ,ilaw ,irupt ,ixfem ,
268 . mat_param(imat)%TITLE ,lsubmodel ,unitab )
269
270
271 ELSEIF (key(1:5) == 'TBUTC') THEN
272 irupt = 2
274 . mat_id ,fail_id ,irupt ,ixfem ,
275 . lsubmodel,unitab )
276
277 ELSEIF (key(1:5) == 'WILKI') THEN
278 irupt = 3
280 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
281
282 ELSEIF (key(1:5) == 'USER1') THEN
283 irupt = 4
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))
290
292 . irupt,iuser_key,userl_avail,
293 . lsubmodel,unitab_sub,mat_id)
294
295 ELSEIF (key(1:5) == 'USER2') THEN
296 irupt = 5
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))
303
305 . irupt,iuser_key,userl_avail,
306 . lsubmodel,unitab_sub,mat_id)
307
308 ELSEIF (key(1:5) == 'USER3') THEN
309 irupt = 6
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))
316
318 . irupt,iuser_key,userl_avail,
319 . lsubmodel,unitab_sub,mat_id)
320
321 ELSEIF (key(1:3) == 'FLD') THEN
322 irupt = 7
324 . mat_id ,fail_id ,irupt ,ixfem ,
325 . lsubmodel,unitab ,fail_tag(irupt))
326
327 ELSEIF (key(1:5) == 'SPALL') THEN
328 irupt = 8
329 CALL hm_read_fail_spalling(mat_param(imat)%FAIL(ifl),
330 . mat_id ,fail_id ,irupt ,
331 . lsubmodel,unitab ,fail_tag(irupt),iout )
332
333 ELSEIF (key(1:6) == 'WIERZB') THEN
334 irupt = 9
336 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
337
338 ELSEIF (key(1:8) == 'TENSSTRA') THEN
339 irupt = 10
341 . mat_id ,fail_id ,irupt ,
342 . lsubmodel,unitab ,unit_id )
343
344 ELSEIF (key(1:6) == 'ENERGY') THEN
345 irupt = 11
347 . mat_id ,fail_id ,irupt ,lsubmodel,unitab)
348
349 ELSEIF (key(1:11) == 'FRACTAL_DMG') THEN
350 irupt = 12
351 CALL hm_read_fractal_dmg(mat_param(imat)%FAIL(ifl),
352 . mat_id ,fail_id ,irupt ,lsubmodel,unitab ,iout )
353 fail_tag(irupt)%LF_DAM = 1
354 fail_tag(irupt)%LF_DAMMX = 1
355
356 ELSEIF (key(1:5) == 'CHANG') THEN
357 irupt = 13
359 . mat_id ,fail_id ,irupt ,
360 . lsubmodel,unitab ,fail_tag(irupt))
361
362 ELSEIF (key(1:6) == 'HASHIN') THEN
363 irupt = 14
365 . mat_id ,fail_id ,irupt ,ifailwave,
366 . lsubmodel,unitab ,fail_tag(irupt))
367
368
369
370
371 ELSEIF (key(1:4) == 'PUCK') THEN
372 irupt = 16
374 . mat_id ,fail_id ,irupt ,
375 . lsubmodel,unitab ,fail_tag(irupt))
376
377
378
379
380 ELSEIF (key(1:8) == 'LAD_DAMA') THEN
381 irupt = 18
383 . mat_id ,fail_id ,irupt ,
384 . lsubmodel,unitab)
385
386
387
388
389 ELSEIF (key(1:7) == 'CONNECT') THEN
390 irupt = 20
392 . mat_id ,fail_id ,irupt ,unit_id ,
393 . lsubmodel,unitab ,fail_tag(irupt))
394
395
396
397
398
399
400
401 ELSEIF (key(1:4) == 'TAB1') THEN
402 irupt = 23
404 . mat_id ,fail_id ,irupt ,ixfem ,
405 . lsubmodel,unitab )
406
407 ELSEIF (key(1:4) == 'TAB2') THEN
408 irupt = 41
410 . mat_id ,fail_id ,irupt ,mat_param(imat)%TITLE,
411 . lsubmodel,unitab )
412
413 ELSEIF (key(1:3) == 'TAB') THEN
414 irupt = 37
416 . mat_id ,fail_id ,irupt ,ixfem ,
417 . lsubmodel,unitab )
418
419 ELSEIF (key(1:10) == 'ORTHSTRAIN') THEN
420 irupt = 24
422 . fail_id ,irupt ,lsubmodel,unitab ,
423 . fail_tag(irupt))
424
425 ELSEIF (key(1:3) == 'NXT') THEN
426 irupt = 25
428 . mat_id ,fail_id ,irupt ,
429 . lsubmodel,unitab ,fail_tag(irupt))
430
431 ELSEIF (key(1:9) == 'SNCONNECT') THEN
432 irupt = 26
434 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
435 fail_tag(irupt)%LF_DAM = 3
436
437 ELSEIF (key(1:3) == 'EMC') THEN
438 irupt = 27
440 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
441
442 ELSEIF (key(1:5) == 'ALTER') THEN
443 irupt = 28
445 . maxfail ,mat_id ,fail_id ,irupt
446 . ifailwave,lsubmodel,unitab )
447
448 ELSEIF (key(1:8) == 'SAHRAEI') THEN
449 irupt = 29
451 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
452
453 ELSEIF (key(1:6) == 'BIQUAD') THEN
454 irupt = 30
456 . mat_id ,fail_id ,irupt ,
457 . mat_param(imat)%TITLE ,lsubmodel,unitab )
458
459 ELSEIF (key(1:6) == 'FABRIC') THEN
460 irupt = 31
462 . mat_id ,fail_id ,irupt ,unit_id ,
463 . lsubmodel,unitab )
464
465 ELSEIF (key(1:7) == 'HC_DSSE') THEN
466 irupt = 32
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
472 irupt = 33
474 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
475
476 ELSEIF (key(1:9) == 'COCKCROFT') THEN
477 irupt = 34
479 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
480
481 ELSEIF (key(1:6) == 'GURSON') THEN
482 irupt = 35
484 . mat_id ,fail_id ,irupt ,iloc ,
485 . mat_param(imat)%TITLE ,lsubmodel,unitab )
486
487 ELSEIF (key(1:6) == 'VISUAL') THEN
488 irupt = 36
490 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
491
492 ELSEIF (key(1:10) == 'ORTHBIQUAD') THEN
493 irupt = 38
495 . mat_id ,fail_id ,irupt ,
496 . mat_param(imat)%TITLE ,lsubmodel,unitab )
497
498 ELSEIF (key(1:5) == 'GENE1') THEN
499 irupt = 39
501 . mat_id ,fail_id ,irupt ,
502 . mat_param(imat)%TITLE ,lsubmodel,unitab,
503 . fail_tag(irupt))
504
505 ELSEIF (key(1:4) == 'RTCL') THEN
506 irupt = 40
508 . mat_id ,fail_id ,irupt ,lsubmodel,unitab )
509
510 ELSEIF (key(1:6) == 'INIEVO') THEN
511 irupt = 42
513 . mat_id ,fail_id ,irupt ,
514 . mat_param(imat)%TITLE ,lsubmodel,unitab )
515 fail_tag(irupt)%LF_DAMINI = 1
516
517 ELSEIF (key(1:7) == 'SYAZWAN') THEN
518 irupt = 43
520 . mat_id ,fail_id ,irupt ,
521 . mat_param(imat)%TITLE ,lsubmodel,unitab )
522
523 ELSEIF (key(1:6) == 'TSAIWU') THEN
524 irupt = 44
526 . mat_id ,fail_id ,irupt ,lsubmodel,unitab,
527 . fail_tag(irupt))
528
529 ELSEIF (key(1:8) == 'TSAIHILL') THEN
530 irupt = 45
532 . mat_id ,fail_id ,irupt ,lsubmodel,unitab ,
533 . fail_tag(irupt))
534
535 ELSEIF (key(1:7) == 'HOFFMAN') THEN
536 irupt = 46
538 . mat_id ,fail_id ,irupt ,lsubmodel,unitab,
539 . fail_tag(irupt))
540
541 ELSEIF (key(1:9) == 'MAXSTRAIN') THEN
542 irupt = 47
544 . mat_id ,fail_id ,irupt ,lsubmodel,unitab ,
545 . fail_tag(irupt))
546
547 ELSEIF(key(1:9) == 'ORTHENERG')THEN
548 irupt = 48
550 . fail_id ,irupt ,lsubmodel,unitab )
551
552 ELSEIF (key(1:8) == 'LEMAITRE') THEN
553 irupt = 50
554 CALL hm_read_fail_lemaitre(mat_param(imat)%FAIL(ifl),
555 . fail_id ,irupt ,lsubmodel,unitab ,iout )
556
557 ELSEIF (key(1:9) == 'COMPOSITE') THEN
558 irupt = 51
559 CALL hm_read_fail_composite(mat_param(imat)%FAIL(ifl),
560 . fail_id ,irupt ,lsubmodel,unitab ,fail_tag(irupt),
561 . iout)
562 ENDIF
563
564
565 nloc_dmg%IMOD =
max(nloc_dmg%IMOD, iloc)
566 failwave%WAVE_MOD =
max(failwave%WAVE_MOD,ifailwave)
567
568 mat_param(imat)%IFAILWAVE = ifailwave
569 mat_param(imat)%NLOC = iloc
570 mat_param(imat)%IXFEM = ixfem
571 IF (ixfem == 1) icrack3d = 1
572
573 ENDIF
574 ENDIF
575
576 END DO
577
578 DEALLOCATE (fail_mat_num)
579
580 RETURN
581
582 1000 FORMAT(//
583 & 5x,'MAT_ID . . . . . . . . . . . . . . .=',i10/
584 & 5x,'FAILURE MODEL TYPE . . . . . . . . .=',a/
585 & 5x,'FAIL_ID. . . . . . . . . . . . . . .=',i10/)
586
subroutine fail_init(mat_param, nummat)
subroutine hm_get_boolv(name, bval, is_available)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_count(entity_type, hm_option_number)
subroutine hm_option_start(entity_type)
subroutine hm_read_fail_alter(fail, fail_tag, maxfail, mat_id, fail_id, irupt, ixfem, ifailwave, lsubmodel, unitab)
subroutine hm_read_fail_biquad(fail, mat_id, fail_id, irupt, titr, lsubmodel, unitab)
subroutine hm_read_fail_chang(fail, mat_id, fail_id, irupt, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_cockcroft(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_connect(fail, mat_id, fail_id, irupt, unit_id, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_emc(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_energy(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_fabric(fail, mat_id, fail_id, irupt, unit_id, lsubmodel, unitab)
subroutine hm_read_fail_fld(fail, mat_id, fail_id, irupt, ixfem, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_gene1(fail, mat_id, fail_id, irupt, titr, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_gurson(fail, mat_id, fail_id, irupt, nloc_mod, titr, lsubmodel, unitab)
subroutine hm_read_fail_hashin(fail, mat_id, fail_id, irupt, frwave, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_hc_dsse(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_hoffman(fail, mat_id, fail_id, irupt, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_inievo(fail, mat_id, fail_id, irupt, titr, lsubmodel, unitab)
subroutine hm_read_fail_johnson(fail, mat_id, fail_id, ilaw, irupt, ixfem, titr, lsubmodel, unitab)
subroutine hm_read_fail_ladeveze(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_maxstrain(fail, mat_id, fail_id, irupt, lsubmodel, unitab, fail_tag)
subroutine hm_read_mullins_or(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_nxt(fail, mat_id, fail_id, irupt, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_orthbiquad(fail, mat_id, fail_id, irupt, titr, lsubmodel, unitab)
subroutine hm_read_fail_orthenerg(fail, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_orthstrain(fail, fail_id, irupt, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_puck(fail, mat_id, fail_id, irupt, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_rtcl(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_sahraei(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_snconnect(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_syazwan(fail, mat_id, fail_id, irupt, titr, lsubmodel, unitab)
subroutine hm_read_fail_tab1(fail, mat_id, fail_id, irupt, ixfem, lsubmodel, unitab)
subroutine hm_read_fail_tab2(fail, mat_id, fail_id, irupt, titr, lsubmodel, unitab)
subroutine hm_read_fail_tab_old(fail, mat_id, fail_id, irupt, ixfem, lsubmodel, unitab)
subroutine hm_read_fail_tbutcher(fail, mat_id, fail_id, irupt, ixfem, lsubmodel, unitab)
subroutine hm_read_fail_tensstrain(fail, mat_id, fail_id, irupt, lsubmodel, unitab, unit_id)
subroutine hm_read_fail_tsaihill(fail, mat_id, fail_id, irupt, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_tsaiwu(fail, mat_id, fail_id, irupt, lsubmodel, unitab, fail_tag)
subroutine hm_read_fail_user(fail, irupt, iuser_key, userl_avail, lsubmodel, unitab_sub, mat_id)
subroutine hm_read_fail_visual(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_wierzbicki(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
subroutine hm_read_fail_wilkins(fail, mat_id, fail_id, irupt, lsubmodel, unitab)
integer, parameter nchartitle
integer, parameter ncharkey
integer, parameter ncharline
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)