40
41
42
43
44
45
46 USE fail_param_mod
51
52
53
54#include "implicit_f.inc"
55
56
57
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 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
66 TYPE (SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
67 INTEGER ,INTENT(INOUT) :: IXFEM
68 TYPE (FAIL_PARAM_) ,INTENT(INOUT) :: FAIL
69
70
71
72 INTEGER :: IFAIL_SH,ISOLID,IBRIT
73 my_real :: tba,tbk,sigr,fac_l,fac_t,fac_m,fac_c,brit_b,brit_c,dadv,pthkf
74 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
75
76
77
78 is_encrypted = .false.
79 is_available = .false.
80
82
83 CALL hm_get_floatv (
'Lambda' ,tba ,is_available,lsubmodel,unitab)
85 CALL hm_get_floatv (
'Sigma_r' ,sigr ,is_available,lsubmodel,unitab)
86 CALL hm_get_intv (
'Ifail_sh' ,ifail_sh ,is_available,lsubmodel)
87 CALL hm_get_intv (
'Ifail_so' ,isolid ,is_available,lsubmodel)
88 CALL hm_get_intv (
'Iduct' ,ibrit ,is_available,lsubmodel)
89 CALL hm_get_intv (
'Ixfem' ,ixfem ,is_available,lsubmodel)
90
91 CALL hm_get_floatv (
'a_TBUTCHER_XFEMTBUTC',brit_b ,is_available,lsubmodel,unitab)
92 CALL hm_get_floatv (
'b_TBUTCHER_XFEMTBUTC',brit_c ,is_available,lsubmodel,unitab)
93 CALL hm_get_floatv (
'Dadv' ,dadv ,is_available,lsubmodel,unitab)
94
95 IF (dadv == zero) dadv=zep85
96 IF (dadv > one) THEN
97 dadv = one
98 CALL ancmsg(msgid=1049, msgtype=msgwarning, anmode=aninfo,
99 . i1=mat_id)
100 ENDIF
101
102 IF(ifail_sh==0)ifail_sh=1
103 IF(isolid==0)isolid= 1
104 IF(ibrit==0)ibrit= 1
105 IF(ixfem /= 1 .AND. ixfem /= 2)ixfem = 0
106 IF(ixfem > 0)isolid = 0
107 IF(ixfem == 0)ibrit = 0
108 IF(sigr <= zero)sigr=ep30
109 IF(tbk <= zero)tbk=ep30
110
111 IF (ifail_sh == 1) THEN
112 pthkf = em06
113 ELSEIF (ifail_sh == 2) THEN
114 pthkf = one
115 ENDIF
116
117 fail%KEYWORD = 'TULER-BUTCHER'
118 fail%IRUPT = irupt
119 fail%FAIL_ID = fail_id
120 fail%NUPARAM = 10
121 fail%NIPARAM = 0
122 fail%NUVAR = 2
123 fail%NFUNC = 0
124 fail%NTABLE = 0
125 fail%NMOD = 0
126 fail%PTHK = pthkf
127
128 ALLOCATE (fail%UPARAM(fail%NUPARAM))
129 ALLOCATE (fail%IPARAM(fail%NIPARAM))
130 ALLOCATE (fail%IFUNC (fail%NFUNC))
131 ALLOCATE (fail%TABLE (fail%NTABLE))
132
133 fail%UPARAM(1) = tba
134 fail%UPARAM(2) = tbk
135 fail%UPARAM(3) = sigr
136 fail%UPARAM(4) = ifail_sh
137 fail%UPARAM(5) = isolid
138 fail%UPARAM(6) = ibrit
139 fail%UPARAM(7) = ixfem
140 fail%UPARAM(8) = brit_b
141 fail%UPARAM(9) = brit_c
142 fail%UPARAM(10)= dadv
143
144
145
146 IF(is_encrypted)THEN
147 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
148 ELSE
149
150
151
152 IF(ixfem == 0)THEN
153 WRITE(iout, 1000)tba,tbk,sigr,ixfem
154 IF(ifail_sh==1)THEN
155 WRITE(iout, 1100)
156 ELSEIF(ifail_sh==2)THEN
157 WRITE(iout, 1200)
158 ENDIF
159 ELSE
160 WRITE(iout, 1010)tba,tbk,sigr,ixfem,ibrit,brit_b,brit_c,dadv
161 WRITE(iout, 1400)
162 END IF
163
164
165
166 IF(ixfem == 0)THEN
167 IF(isolid==1)THEN
168 WRITE(iout, 2100)
169 ELSEIF(isolid==2)THEN
170 WRITE(iout, 2200)
171 ENDIF
172 END IF
173 ENDIF
174
175 1000 FORMAT(
176 & 5x,40h tuler butcher damage PARAMETER /,
177 & 5x,40h ----------------------------- /,
178 & 5x,40hexponent lambda . . . . . . . . . . . .=,e12.4/,
179 & 5x,40hdamage integral k. . . . . . . . . . .=,e12.4/,
180 & 5x,40hfracture stress . . . . . . . . . . . .=,e12.4/,
181 & 5x,40hxfem failure flag . . . . . . . . . . .=,i10//)
182 1100 FORMAT(
183 & 5x,' SHELL ELEMENT DELETION AFTER FAILURE')
184 2100 FORMAT(
185 & 5x,' SOLID ELEMENT DELETION AFTER FAILURE')
186 1200 FORMAT(
187 & 5x,' STRESS TENSOR IN SHELL LAYER SET TO ZERO AFTER FAILURE')
188 1400 FORMAT(
189 & 5x,' SHELL ELEMENT CRACKING AFTER FAILURE')
190 2200 FORMAT(
191 & 5x,' DEVIATORIC STRESS IN SOLID WILL VANISH AFTER FAILURE')
192 1010 FORMAT(
193 & 5x,40h xfem tuler butcher damage PARAMETER /,
194 & 5x,40h ----------------------------- /,
195 & 5x,40hexponent lambda . . . . . . . . . . . .=,e12.4/,
196 & 5x,40hdamage integral k. . . . . . . . . . .=,e12.4/,
197 & 5x,40hfracture stress . . . . . . . . . . . .=,e12.4/,
198 & 5x,40hxfem failure flag . . . . . . . . . . .=,i10/,
199 & 5x,40hductile/brittle failure flag . . . . .=,i10/,
200 & 5x,40hbrittle fracture exponent a . . . . . =,e12.4/,
201 & 5x,40hbrittle fracture exponent b . . . . . =,e12.4/,
202 & 5x
203
204 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
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)