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,NUPARAM,FAILIP
82 my_real :: c1,c2,c3,c4,c5,e1,e2,e3,e4,pthk,inst,ref_len,ref_siz_unit
86 LOGICAL :: ,IS_ENCRYPTED
87
88 is_encrypted = .false.
89 is_available = .false.
90
91
92
94
95
96
97
99 CALL HM_GET_FLOATV ('c2' ,C2 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
100 CALL HM_GET_FLOATV ('c3' ,C3 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
101 CALL HM_GET_FLOATV ('c4' ,C4 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
102 CALL HM_GET_FLOATV ('c5' ,C5 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
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.AND. IF (REG_FUNC > 0 REF_LEN == ZERO) THEN
115 CALL HM_GET_FLOATV_DIM('ei_ref' ,REF_SIZ_UNIT,IS_AVAILABLE, LSUBMODEL, UNITAB)
116 REF_LEN = ONE*REF_SIZ_UNIT
117 ENDIF
118
119
120
121 CALL HM_GET_FLOATV ('r1' ,E1 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
122 CALL HM_GET_FLOATV ('r2' ,E2 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
123 CALL HM_GET_FLOATV ('r4' ,E3 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
124 CALL HM_GET_FLOATV ('r5' ,E4 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
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 ! Check Pthickfail parameter
136 PTHK = MIN(PTHK, ONE)
137 PTHK = MAX(PTHK,-ONE)
138 IF (PTHK == ZERO) PTHK = EM06
139
140 ! Check SFLAG formulation parameter
141 IF (SFLAG == 0) SFLAG = 2
142
143
144
145
146
147 IF (C3 == ZERO) THEN
148 SELECT CASE (MFLAG)
149
150 CASE (1) ! Mild Seel
151 C3 = 0.6
152 CASE (2) ! HSS Seel light e-Body DP600
153 C3 = 0.5
154 CASE (3) ! UHSS Seel light_eBody Boron
155 C3 = 0.12
156 CASE (4) ! Aluminum light_eBody AA5182
157 C3 = 0.3
158 CASE (5) ! Aluminum light_eBody AA6082-T6
159 C3 = 0.17
160 CASE (6) ! Plastic light_eBody PA6GF30
161 C3 = 0.1
162 CASE (7) ! Plastic light_eBody PP T40
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 ! Check necking instability parameters
174.AND. IF (SFLAG == 3 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.AND. ELSEIF (SFLAG == 3 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 ! Check stress softening parameters
187 DCRIT = MIN(DCRIT,ONE)
188 DCRIT = MAX(DCRIT,ZERO)
189 EXP = ABS(EXP)
190 IF (EXP == ZERO) EXP = ONE
191.AND. IF (DCRIT /= ZERO ICOUP == 0) ICOUP = 1
192.AND. IF (SFLAG /= 3 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 ! Check if minimum of first parabola is negative
200 XMIN = -X_1(1)/(TWO*X_1(2))
201 YMIN = X_1(2)*(XMIN**2) + X_1(1)*XMIN + C2
202 IF (YMIN < ZERO) THEN
203 CALL ANCMSG(MSGID=3004, MSGTYPE=MSGWARNING, ANMODE=ANINFO_BLIND_1,
204 . I1=MAT_ID,
205 . C1=TITR)
206 ENDIF
207 ! Check if minimum of second parabola is negative
208 IF (SFLAG == 1) THEN
209 XMIN = -X_2(2)/(TWO*X_2(3))
210 YMIN = X_2(3)*(XMIN**2) + X_2(2)*XMIN + X_2(1)
211 IF (YMIN < ZERO) THEN
212 CALL ANCMSG(MSGID=3005, MSGTYPE=MSGWARNING, ANMODE=ANINFO_BLIND_1,
213 . I1=MAT_ID,
214 . C1=TITR)
215 ENDIF
216 ENDIF
217
218
219 NUPARAM = 17
220 IF (REG_FUNC == 0) THEN
221 NFUNC = 0
222 NUVAR = 2
223 IF (NPERTURB /= 0) NUVAR = 8
224 ELSE
225 NFUNC = 1
226 NUVAR = 3
227 IF (NPERTURB /= 0) NUVAR = 9
228 ENDIF
229
230 FAIL%KEYWORD = 'biquad'
231 FAIL%IRUPT = IRUPT
232 FAIL%FAIL_ID = FAIL_ID
233 FAIL%NUPARAM = NUPARAM
234 FAIL%NIPARAM = 0
235 FAIL%NUVAR = NUVAR
236 FAIL%NFUNC = NFUNC
237 FAIL%NTABLE = 0
238 FAIL%NMOD = 0
239
240 FAIL%PTHK = PTHK
241
242 ALLOCATE (FAIL%UPARAM(FAIL%NUPARAM))
243 ALLOCATE (FAIL%IPARAM(FAIL%NIPARAM))
244 ALLOCATE (FAIL%IFUNC (FAIL%NFUNC))
245 ALLOCATE (FAIL%TABLE (FAIL%NTABLE))
246
247 IF (NFUNC == 1) FAIL%IFUNC(1) = REG_FUNC
248
249 FAIL%UPARAM(1) = C2
250 FAIL%UPARAM(2) = X_1(1)
251 FAIL%UPARAM(3) = X_1(2)
252 FAIL%UPARAM(4) = X_2(1)
253 FAIL%UPARAM(5) = X_2(2)
254 FAIL%UPARAM(6) = X_2(3)
255 FAIL%UPARAM(7) = PTHK
256 FAIL%UPARAM(8) = 0
257 FAIL%UPARAM(9) = C3
258 FAIL%UPARAM(10) = MFLAG
259 FAIL%UPARAM(11) = SFLAG
260 FAIL%UPARAM(12) = INST
261 FAIL%UPARAM(13) = REF_LEN
262 FAIL%UPARAM(14) = ICOUP
263 FAIL%UPARAM(15) = DCRIT
264 FAIL%UPARAM(16) = EXP
265 FAIL%UPARAM(17)= FAILIP
266
267 IF (IS_ENCRYPTED)THEN
268 WRITE(IOUT,'(5x,a,//)')'confidential data'
269 ELSE
270 WRITE(IOUT,1000)
271 IF (MFLAG /= 0) WRITE(IOUT, 1100) MFLAG
272 WRITE(IOUT,1200) C1,C2,C3,C4,C5
273 WRITE(IOUT,1300) X_1(2),X_1(1),C2
274 WRITE(IOUT,1400) X_2(3),X_2(2),X_2(1)
275 WRITE(IOUT,1500) SFLAG
276 IF (SFLAG == 3) WRITE(IOUT,1600) INST
277 IF (REG_FUNC > 0) WRITE(IOUT, 1700) REG_FUNC,REF_LEN
278 IF (ICOUP > 0) THEN
279 WRITE(IOUT,1800) ICOUP,DCRIT,EXP
280 ENDIF
281 WRITE(IOUT, 1900) PTHK,FAILIP
282 WRITE(IOUT, 2000)
283 ENDIF
284
285 RETURN
286
287 1000 FORMAT(
288 & 5X,'-----------------------------------------------',/,
289 & 5X,' biquadratic failure model ',/,
290 & 5X,'-----------------------------------------------',/)
291 1100 FORMAT(
292 & 5X,'material PARAMETER selector m-flag. . . . . . .=',I10/,
293 & 5X,' = 1 : mild steel ',/,
294 & 5X,' = 2 : hss steel ',/,
295 & 5X,' = 3 : uhss steel ',/,
296 & 5X,' = 4 : aluminum aa5182 ',/,
297 & 5X,' = 5 : aluminum aa6082-t6 ',/,
298 & 5X,' = 6 : plastic pa6gf30 ',/,
299 & 5X,' = 7 : plastic pp t40 ',/,
300 & 5X,' = 99: user defined strain ratio ',/)
301 1200 FORMAT(
302 & 5X,'plastic strains at failure: ',/,
303 & 5X,'--------------------------- ',/,
304 & 5X,'c1(simple compression). . . . . . . . . . . .=',1PG20.13,/
305 & 5X,'c2(shear) . . . . . . . . . . . . . . . . . .=',1PG20.13,/
306 & 5X,'c3(simple tension). . . . . . . . . . . . . .=',1PG20.13,/
307 & 5X,'c4(plane strain). . . . . . . . . . . . . . .=',1PG20.13,/
308 & 5X,'c5(biaxial tension) . . . . . . . . . . . . .=',1PG20.13,/)
309 1300 FORMAT(
310 & 5X,'coefficients of first parabola: ',/,
311 & 5X,'------------------------------ ',/,
312 & 5X,'a. . . . . . . . . . . . . . . . . . . . . . .=',1PG20.13,/
313 & 5X,'b. . . . . . . . . . . . . . . . . . . . . . .=',1PG20.13,/
314 & 5X,'c. . . . . . . . . . . . . . . . . . . . . . .=',1PG20.13,/)
315 1400 FORMAT(
316 & 5X,'coefficients of
second parabola:
',/,
317 & 5X,'-------------------------------- ',/,
318 & 5X,'d. . . . . . . . . . . . . . . . . . . . . . .=',1PG20.13,/
319 & 5X,'e. . . . . . . . . . . . . . . . . . . . . . .=',1PG20.13,/
320 & 5X,'f. . . . . . . . . . . . . . . . . . . . . . .=',1PG20.13,/)
321 1500 FORMAT(
322 & 5X,'specific behavior flag s-flag. . . . . . . . .=',I10,/
323 & 5X,' = 1: two quadratic functions ',/,
324 & 5X,' = 2: plane strain
VALUE is
the global minimum
',/,
325 & 5X,' = 3: plane strain is global minimum + instability necking(shells only)',/)
326 1600 FORMAT(
327 & 5X,'instability strain(shells only) . . . . . . .=',1PG20.13,/)
328 1700 FORMAT(
329 & 5X,'element length regularization: ',/,
330 & 5X,'------------------------------ ',/,
331 & 5X,'regularization
FUNCTION id . . . . . . . . . .=
',I10,/
332 & 5X,'referenze element length . . . . . . . . . . .=',1PG20.13,/)
333 1800 FORMAT(
334 & 5X,'stress softening: ',/,
335 & 5X,'----------------- ',/,
336 & 5X,'coupling method flag icoup . . . . . . . . . .=',I10,/,
337 & 5X,' = 1: classical coupling using critical damage',/,
338 & 5X,' = 2: necking instability coupling (SHELLS ONLY)',/,
339 & 5X,'damage critical value dcrit (IF ICOUP = 1) . .=',1PG20.13,/,
340 & 5X,'stress softening exponent exp. . . . . . . . .=',1PG20.13,/)
341 1900 FORMAT(
342 & 5X,'element deletion: ',/,
343 & 5X,'----------------- ',/,
344 & 5X,'shell element deletion parameter pthickfail. .=',1PG20.13,/
345 & 5X,' > 0.0: fraction of failed thickness ',/,
346 & 5X,' < 0.0: fraction of failed intg. points ',/,
347 & 5X,'number of failed intg. points prior to elem deletion .=',I10/)
348 2000 FORMAT(
349 & 5X,'-----------------------------------------------',/)
350
end diagonal values have been computed in the(sparse) matrix id.SOL
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
integer, parameter nchartitle
real function second()
SECOND Using ETIME