43
44
45
46
47
48
49
50 USE fail_param_mod
55
56
57
58#include "implicit_f.inc"
59
60
61
62#include "units_c.inc"
63
64
65
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
73
74
75
76 INTEGER :: I,IFAIL_SH,ISOLID,NRATE,IFUN_SIZE,IFUN_TEMP
77 my_real :: p_thick,scale_temp,scale_el,el_ref,dcrit,dd,dn,dadv,
78 . fscal_unit
79 INTEGER ,PARAMETER :: MAXFUNC = 100
80 INTEGER, DIMENSION(MAXFUNC) :: IFUNC
81 my_real,
DIMENSION(MAXFUNC) :: yfac,rate
82
83 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
84
85 is_encrypted = .false.
86 is_available = .false.
87 dadv = zero
88
89
90
92
93
94
95
96 CALL hm_get_intv (
'Ifail_sh' ,ifail_sh ,is_available,lsubmodel)
97 CALL hm_get_intv (
'Ifail_so' ,isolid ,is_available,lsubmodel)
98 CALL hm_get_intv (
'N_rate' ,nrate ,is_available,lsubmodel)
99 CALL hm_get_floatv (
'P_THICK' ,p_thick ,is_available,lsubmodel,unitab)
100 CALL hm_get_intv (
'Ixfem' ,ixfem ,is_available,lsubmodel)
101
102 CALL hm_get_floatv (
'Dcrit' ,dcrit ,is_available,lsubmodel,unitab
105 CALL hm_get_floatv (
'Dadv' ,dadv ,is_available,lsubmodel,unitab
106
107 DO i = 1,nrate
111 ENDDO
112
113 CALL hm_get_intv (
'fct_IDel' ,ifun_size ,is_available,lsubmodel)
114 CALL hm_get_floatv (
'Fscale_el' ,scale_el ,is_available,lsubmodel,unitab)
115 CALL hm_get_floatv (
'EI_ref' ,el_ref ,is_available,lsubmodel,unitab)
116
117 CALL hm_get_intv (
'fct_IDt' ,ifun_temp ,is_available,lsubmodel)
118 CALL hm_get_floatv (
'FscaleT' ,scale_temp ,is_available,lsubmodel,unitab)
119
120
121
122 IF (dcrit == zero) dcrit = one
123 IF (dadv == zero) dadv = dcrit
124 IF (dadv > dcrit) THEN
125 dadv = dcrit
126 CALL ancmsg(msgid=974, msgtype=msgwarning, anmode=aninfo,
127 . i1=mat_id)
128 ENDIF
129 IF (el_ref == zero) THEN
131 el_ref = one*fscal_unit
132 END IF
133 IF (dd == one ) dd = 0.999
134 IF (dn == zero) dn = one
135 IF (ifail_sh == 0) ifail_sh = 1
136 IF (isolid == 0) isolid = 1
137 IF (ixfem /= 1 .AND. ixfem /= 2) ixfem = 0
138 IF (ixfem > 0) isolid = 0
139 IF (scale_el == zero) scale_el = one
140 IF (scale_temp == zero) scale_temp = one
141
142 IF (p_thick == one) p_thick = p_thick - em06
143
144 IF (p_thick > zero .and. ifail_sh > 1) THEN
145 CONTINUE
146 ELSEIF (ifail_sh == 1) THEN
147 p_thick = em06
148 ELSEIF (ifail_sh == 2) THEN
149 p_thick = one - em06
150 ENDIF
151
152
153
154 fail%KEYWORD = 'FAIL_TAB'
155 fail%IRUPT = irupt
156 fail%FAIL_ID = fail_id
157 fail%NUPARAM = 11 + nrate * 2
158 fail%NIPARAM = 0
159 fail%NUVAR = 3
160 fail%NFUNC = nrate + 2
161 fail%NTABLE = 0
162 fail%NMOD = 0
163 fail%PTHK = p_thick
164
165 ALLOCATE (fail%UPARAM(fail%NUPARAM))
166 ALLOCATE (fail%IPARAM(fail%NIPARAM))
167 ALLOCATE (fail%IFUNC (fail%NFUNC))
168 ALLOCATE (fail%TABLE (fail%NTABLE))
169
170 fail%UPARAM(1) = isolid
171 fail%UPARAM(2) = ifail_sh
172 fail%UPARAM(3) = 0
173 fail%UPARAM(4) = dcrit
174 fail%UPARAM(5) = dd
175 fail%UPARAM(6) = dn
176 fail%UPARAM(7) = scale_temp
177 fail%UPARAM(8) = scale_el
178 fail%UPARAM(9) = el_ref
179 fail%UPARAM(10)= ixfem
180 fail%UPARAM(11)= dadv
181 DO i = 1,nrate
182 fail%UPARAM(11 + i) = yfac(i)
183 fail%UPARAM(11 + i + nrate) = rate(i)
184 ENDDO
185
186 fail%IFUNC(1:nrate) = ifunc(1:nrate)
187 fail%IFUNC(nrate+1) = ifun_size
188 fail%IFUNC(nrate+2) = ifun_temp
189
190 IF (is_encrypted)THEN
191 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
192 ELSE
193 WRITE(iout, 1000) fail_id
194 WRITE(iout, 1001)(fail%IFUNC(i),yfac(i),rate(i),i=1,nrate)
195 WRITE(iout, 1002) ixfem,dadv,fail%UPARAM(3)
196 WRITE(iout, 1003) dcrit,dd,dn
197 WRITE(iout, 1004) ifun_size,scale_temp,ifun_temp,scale_el,el_ref
198
199 IF (ixfem == 0) THEN
200 IF(ifail_sh == 1) THEN
201 WRITE(iout, 1100)
202 ELSEIF (ifail_sh == 2) THEN
203 WRITE(iout, 1200)
204 ELSEIF (ifail_sh == 3) THEN
205 WRITE(iout, 1300)
206 ENDIF
207 ELSE IF (ixfem == 1) THEN
208 WRITE(iout, 1400)
209 END IF
210
211 IF (isolid == 1) THEN
212 WRITE(iout, 2100)
213 ELSEIF(isolid == 2) THEN
214 WRITE(iout, 2200)
215 ENDIF
216
217 ENDIF
218
219 RETURN
220
221 1000 FORMAT(
222 & 5x,'TABULATED FAILURE CRITERIA WITH DAMAGE',//,
223 & 5x,'FAILURE MODEL ID. . . . . . . . . . . . . . .=',i10/
224 & 5x,'FAILURE STRAIN FUNCTIONS : ')
225 1001 FORMAT(
226 & 5x,' YIELD STRESS FUNCTION NUMBER. . . . . .=',i10/
227 & 5x,' YIELD SCALE FACTOR. . . . . . . . . . .=',1pg20.13/
228 & 5x,' STRAIN RATE . . . . . . . . . . . . . .=',1pg20.13)
229 1002 FORMAT(
230 & 5x,'FLAG XFEM. . . . . . . .. . . . . . . . . . .=',i10
231 & 5x,'CRITICAL ADVANCEMENT VALUE . . . . . . . . .=',e12.4/
232 & 5x,'PER HUNDRED OF SHELL THICKNESS FAILURE . . . . .=',e12.4)
233 1003 FORMAT(
234 & 5x,'CRITICAL DAMAGE VALUE . . . . . . . . . . . .=',e12.4/
235 & 5x,'DAMAGE PARAMETER D. . . . . . . . . . . . . .=',e12.4/
236 & 5x,'DAMAGE PARAMETER N. . . . . . . . . . . . . .=',e12.4)
237 1004 FORMAT(
238 & 5x,'TEMPERATURE SCALE FUNCTION. . . . . . . . . .=',i10/
239 & 5x,'SCALE FACTOR OF TEMPERATURE FUNCTION. . . . .=',e12.4/
240 & 5x,'ELEMENT LENGTH FUNCTION . . . . . . . . . . .=',i10/
241 & 5x,'SCALE FACTOR OF LENGTH FUNCTION . . . . . . .=',e12.4/
242 & 5x,'REFERENCE ELEMENT LENGTH. . . . . . . . . . .=',e12.4/
243 & 5x,'REGULARIZATION FLAG . . . . . . . . . . . . .=',i10/
244 & 5x,'FAILURE OPTION:')
245 1100 FORMAT(
246 & 5x,' SHELL ELEMENT DELETION AFTER FAILURE OF ONE LAYER')
247 1200 FORMAT(
248 & 5x,' STRESS TENSOR IN SHELL LAYER SET TO ZERO AFTER FAILURE')
249 1300 FORMAT(
250 & 5x,' SHELL ELEMENT DELETION AFTER FAILURE OF ALL LAYERS')
251 1400 FORMAT(
252 & 5x,' SHELL ELEMENT CRACKING AFTER FAILURE')
253 2100 FORMAT(
254 & 5x,' SOLID ELEMENT DELETION AFTER FAILURE')
255 2200 FORMAT(
256 & 5x,' DEVIATORIC STRESS IN SOLID WILL VANISH AFTER FAILURE')
257
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
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)