42
43
44
45
46
47
48
49
50
51
52
53 USE fail_param_mod
59
60
61
62#include "implicit_f.inc"
63
64
65
66#include "com04_c.inc"
67#include "units_c.inc"
68
69
70
71 INTEGER ,INTENT(IN) :: FAIL_ID
72 INTEGER ,INTENT(IN) :: MAT_ID
73 INTEGER ,INTENT(IN) :: IRUPT
74 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
75 TYPE(UNIT_TYPE_) ,INTENT(IN) :: UNITAB
76 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
77 TYPE(FAIL_PARAM_) ,INTENT(INOUT) :: FAIL
78
79
80
81 INTEGER :: MFLAG,SFLAG,REG_FUNC,ICOUP,NFUNC,NUVAR,,FAILIP
82 my_real :: c1,c2,c3,c4,c5,e1,e2,e3,e4,pthk,inst,ref_len,ref_siz_unit
86 LOGICAL :: IS_AVAILABLE,
87
88 is_encrypted = .false.
89 is_available = .false.
90
91
92
94
95
96
97
103
104
105
106 CALL hm_get_intv (
'FAILIP' ,failip ,is_available,lsubmodel)
107 IF (failip == 0) failip = 1
108 CALL hm_get_floatv (
'P_thickfail' ,pthk ,is_available,lsubmodel,unitab)
109 CALL hm_get_intv (
'M_Flag' ,mflag ,is_available,lsubmodel)
110 CALL hm_get_intv (
'S_Flag' ,sflag ,is_available,lsubmodel)
111 CALL hm_get_floatv (
'Inst_start' ,inst ,is_available,lsubmodel,unitab)
112 CALL hm_get_intv (
'fct_IDel' ,reg_func ,is_available,lsubmodel)
113 CALL hm_get_floatv (
'EI_ref' ,ref_len ,is_available,lsubmodel,unitab)
114 IF (reg_func > 0 .AND. ref_len == zero) THEN
116 ref_len = one*ref_siz_unit
117 ENDIF
118
119
120
125
126
127
128
129
130 CALL hm_get_intv (
'ICOUP' ,icoup ,is_available,lsubmodel)
131 CALL hm_get_floatv (
'DCRIT' ,dcrit ,is_available,lsubmodel,unitab)
132 CALL hm_get_floatv (
'EXP' ,exp ,is_available,lsubmodel,unitab)
133
134
135
136 pthk =
min(pthk, one)
137 pthk =
max(pthk,-one)
138 IF (pthk == zero) pthk = em06
139
140
141 IF (sflag == 0) sflag = 2
142
143
144
145
146
147 IF (c3 == zero) THEN
148 SELECT CASE (mflag)
149
150 CASE (1)
151 c3 = 0.6
152 CASE (2)
153 c3 = 0.5
154 CASE (3)
155 c3 = 0.12
156 CASE (4)
157 c3 = 0.3
158 CASE (5)
159 c3 = 0.17
160 CASE (6)
161 c3 = 0.1
162 CASE (7)
163 c3 = 0.11
164 CASE DEFAULT
165 c3 = .6
166
167 END SELECT
168 ENDIF
169
170
171 CALL biquad_coefficients(c1,c2,c3,c4,c5,mflag,x_1,x_2,e1,e2,e3,e4)
172
173
174 IF (sflag == 3 .AND. inst <= zero) THEN
175 CALL ancmsg(msgid=3042, msgtype=msgwarning, anmode=aninfo_blind_1,
176 . i1=mat_id,
177 . c1=titr)
178 sflag = 2
179 ELSEIF (sflag == 3 .AND. inst >= c4) THEN
180 CALL ancmsg(msgid=3043, msgtype=msgwarning, anmode=aninfo_blind_1,
181 . i1=mat_id,
182 . c1=titr)
183 sflag = 2
184 ENDIF
185
186
187 dcrit =
min(dcrit,one)
188 dcrit =
max(dcrit,zero)
189 exp = abs(exp)
190 IF (exp == zero) exp = one
191 IF (dcrit /= zero .AND. icoup == 0) icoup = 1
192 IF (sflag /= 3 .AND. icoup == 2) THEN
193 CALL ancmsg(msgid=3044, msgtype=msgwarning, anmode=aninfo_blind_1,
194 . i1=mat_id,
195 . c1=titr)
196 icoup = 0
197 ENDIF
198
199
200 IF(x_1(2) .ne. zero) then
201 xmin = -x_1(1)/(two*x_1(2))
202 ymin = x_1(2)*(xmin**2) + x_1(1)*xmin + c2
203 IF (ymin < zero) THEN
204 CALL ancmsg(msgid=3004, msgtype=msgwarning, anmode=aninfo_blind_1,
205 . i1=mat_id,
206 . c1=titr)
207 ENDIF
208 ENDIF
209
210 IF (sflag == 1 .and. x_2(3) .ne. 0) THEN
211 xmin = -x_2(2)/(two*x_2(3))
212 ymin = x_2(3)*(xmin**2) + x_2(2)*xmin + x_2(1)
213 IF (ymin < zero) THEN
214 CALL ancmsg(msgid=3005, msgtype=msgwarning, anmode=aninfo_blind_1,
215 . i1=mat_id,
216 . c1=titr)
217 ENDIF
218 ENDIF
219
220
221 nuparam = 17
222 IF (reg_func == 0) THEN
223 nfunc = 0
224 nuvar = 2
225 IF (nperturb /= 0) nuvar = 8
226 ELSE
227 nfunc = 1
228 nuvar = 3
229 IF (nperturb /= 0) nuvar = 9
230 ENDIF
231
232 fail%KEYWORD = 'BIQUAD'
233 fail%IRUPT = irupt
234 fail%FAIL_ID = fail_id
235 fail%NUPARAM = nuparam
236 fail%NIPARAM = 0
237 fail%NUVAR = nuvar
238 fail%NFUNC = nfunc
239 fail%NTABLE = 0
240 fail%NMOD = 0
241
242 fail%PTHK = pthk
243
244 ALLOCATE (fail%UPARAM(fail%NUPARAM))
245 ALLOCATE (fail%IPARAM(fail%NIPARAM))
246 ALLOCATE (fail%IFUNC (fail%NFUNC))
247 ALLOCATE (fail%TABLE (fail%NTABLE))
248
249 IF (nfunc == 1) fail%IFUNC(1) = reg_func
250
251 fail%UPARAM(1) = c2
252 fail%UPARAM(2) = x_1(1)
253 fail%UPARAM(3) = x_1(2)
254 fail%UPARAM(4) = x_2(1)
255 fail%UPARAM(5) = x_2(2)
256 fail%UPARAM(6) = x_2(3)
257 fail%UPARAM(7) = pthk
258 fail%UPARAM(8) = 0
259 fail%UPARAM(9) = c3
260 fail%UPARAM(10) = mflag
261 fail%UPARAM(11) = sflag
262 fail%UPARAM(12) = inst
263 fail%UPARAM(13) = ref_len
264 fail%UPARAM(14) = icoup
265 fail%UPARAM(15) = dcrit
266 fail%UPARAM(16) = exp
267 fail%UPARAM(17)= failip
268
269 IF (is_encrypted)THEN
270 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
271 ELSE
272 WRITE(iout,1000)
273 IF (mflag /= 0) WRITE(iout, 1100) mflag
274 WRITE(iout,1200) c1,c2,c3,c4,c5
275 WRITE(iout,1300) x_1(2),x_1(1),c2
276 WRITE(iout,1400) x_2(3),x_2(2),x_2(1)
277 WRITE(iout,1500) sflag
278 IF (sflag == 3) WRITE(iout,1600) inst
279 IF (reg_func > 0) WRITE(iout, 1700) reg_func,ref_len
280 IF (icoup > 0) THEN
281 WRITE(iout,1800) icoup,dcrit,exp
282 ENDIF
283 WRITE(iout, 1900) pthk,failip
284 WRITE(iout, 2000)
285 ENDIF
286
287 RETURN
288
289 1000 FORMAT(
290 & 5x,'-----------------------------------------------',/,
291 & 5x,' BIQUADRATIC FAILURE MODEL ',/,
292 & 5x,'-----------------------------------------------'
293 1100 FORMAT(
294 & 5x,'MATERIAL PARAMETER SELECTOR M-FLAG. . . . . . .=',i10/,
295 & 5x,' = 1 : MILD STEEL ',/,
296 & 5x,' = 2 : HSS STEEL ',/,
297 & 5x,' = 3 : UHSS STEEL ',/,
298 & 5x,' = 4 : ALUMINUM AA5182 ',/,
299 & 5x,' = 5 : ALUMINUM AA6082-T6 ',/,
300 & 5x,' = 6 : PLASTIC PA6GF30 ',/,
301 & 5x,' = 7 : PLASTIC PP T40 ',/,
302 & 5x,' = 99: USER DEFINED STRAIN RATIO ',/)
303 1200 FORMAT(
304 & 5x,'PLASTIC STRAINS AT FAILURE: ',/,
305 & 5x,'--------------------------- ',/,
306 & 5x,'C1 (SIMPLE COMPRESSION). . . . . . . . . . . .=',1pg20.13,/
307 & 5x,'C2 (SHEAR) . . . . . . . . . . . . . . . . . .=',1pg20.13,/
308 & 5x,'C3 (SIMPLE TENSION). . . . . . . . . . . . . .=',1pg20.13,/
309 & 5x,'C4 (PLANE STRAIN). . . . . . . . . . . . . . .=',1pg20.13,/
310 & 5x,'C5 (BIAXIAL TENSION) . . . . . . . . . . . . .=',1pg20.13,/)
311 1300 FORMAT(
312 & 5x,'COEFFICIENTS OF FIRST PARABOLA: ',/,
313 & 5x,'------------------------------ ',/,
314 & 5x,'A. . . . . . . . . . . . . . . . . . . . . . .=',1pg20.13,/
315 & 5x,'B. . . . . . . . . . . . . . . . . . . . . . .=',1pg20.13,/
316 & 5x,'C. . . . . . . . . . . . . . . . . . . . . . .=',1pg20.13,/)
317 1400 FORMAT(
318 & 5x,'COEFFICIENTS OF SECOND PARABOLA: ',/,
319 & 5x,'-------------------------------- ',/,
320 & 5x,'D. . . . . . . . . . . . . . . . . . . . . . .=',1pg20.13,/
321 & 5x,'E. . . . . . . . . . . . . . . . . . . . . . .=',1pg20.13,/
322 & 5x,'F. . . . . . . . . . . . . . . . . . . . . . .=',1pg20.13,/)
323 1500 FORMAT(
324 & 5x,'SPECIFIC BEHAVIOR FLAG S-FLAG. . . . . . . . .=',i10,/
325 & 5x,' = 1: TWO QUADRATIC FUNCTIONS ',/,
326 & 5x,' = 2: PLANE STRAIN VALUE IS THE GLOBAL MINIMUM',/,
327 & 5x,' = 3: PLANE STRAIN IS GLOBAL MINIMUM + INSTABILITY NECKING (SHELLS ONLY)',/)
328 1600 FORMAT(
329 & 5x,'INSTABILITY STRAIN (SHELLS ONLY) . . . . . . .=',1pg20.13,/)
330 1700 FORMAT(
331 & 5x,'ELEMENT LENGTH REGULARIZATION: ',/,
332 & 5x,'------------------------------ ',/,
333 & 5x,'REGULARIZATION FUNCTION ID . . . . . . . . . .=',i10,/
334 & 5x,'REFERENZE ELEMENT LENGTH . . . . . . . . . . .=',1pg20.13,/)
335 1800 FORMAT(
336 & 5x,'STRESS SOFTENING: ',/,
337 & 5x,'----------------- ',/,
338 & 5x,'COUPLING METHOD FLAG ICOUP . . . . . . . . . .=',i10,/,
339 & 5x,' = 1: CLASSICAL COUPLING USING CRITICAL DAMAGE',/,
340 & 5x,' = 2: NECKING INSTABILITY COUPLING (SHELLS ONLY)',/,
341 & 5x,'DAMAGE CRITICAL VALUE DCRIT (IF ICOUP = 1) . .=',1pg20.13,/,
342 & 5x,'STRESS SOFTENING EXPONENT EXP. . . . . . . . .=',1pg20.13,/)
343 1900 FORMAT(
344 & 5x,'ELEMENT DELETION: ',/,
345 & 5x,'----------------- ',/,
346 & 5x,'SHELL ELEMENT DELETION PARAMETER PTHICKFAIL. .=',1pg20.13,/
347 & 5x,' > 0.0: FRACTION OF FAILED THICKNESS ',/,
348 & 5x,' < 0.0: FRACTION OF FAILED INTG. POINTS ',/,
349 & 5x,'NUMBER OF FAILED INTG. POINTS PRIOR TO ELEM DELETION .=',i10/)
350 2000 FORMAT(
351 & 5x,'-----------------------------------------------',/)
352
subroutine biquad_coefficients(c1, c2, c3, c4, c5, l, x_1, x_2, e1, e2, e3, e4)
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_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
integer, parameter nchartitle
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)