OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_fail_biquad.F File Reference
#include "implicit_f.inc"
#include "com04_c.inc"
#include "units_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_fail_biquad (fail, mat_id, fail_id, irupt, titr, lsubmodel, unitab)

Function/Subroutine Documentation

◆ hm_read_fail_biquad()

subroutine hm_read_fail_biquad ( type(fail_param_), intent(inout) fail,
integer, intent(in) mat_id,
integer, intent(in) fail_id,
integer, intent(in) irupt,
character(len=nchartitle), intent(in) titr,
type(submodel_data), dimension(*), intent(in) lsubmodel,
type(unit_type_), intent(in) unitab )

Definition at line 39 of file hm_read_fail_biquad.F.

42C-----------------------------------------------
43c ROUTINE DESCRIPTION :
44c Read read double parabolic analytical failure model parameters
45c-----------------------------------------------
46c UVAR1 = damage due to instability (triax between 1/3 and 2/3)
47c UVAR2 = integration point
48c UVAR3-8 = perturbated parameter
49c UVAR3 (if perturbation is not used) or UVAR9 (if used) = initial element length
50C-----------------------------------------------
51C M o d u l e s
52C-----------------------------------------------
53 USE fail_param_mod
54 USE unitab_mod
55 USE message_mod
56 USE submodel_mod
59C-----------------------------------------------
60C I m p l i c i t T y p e s
61C-----------------------------------------------
62#include "implicit_f.inc"
63C-----------------------------------------------
64C C o m m o n B l o c k s
65C-----------------------------------------------
66#include "com04_c.inc"
67#include "units_c.inc"
68C-----------------------------------------------
69C D u m m y A r g u m e n t s
70C-----------------------------------------------
71 INTEGER ,INTENT(IN) :: FAIL_ID ! failure model ID
72 INTEGER ,INTENT(IN) :: MAT_ID ! material law ID
73 INTEGER ,INTENT(IN) :: IRUPT ! failure model type number
74 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR ! material model title
75 TYPE(UNIT_TYPE_) ,INTENT(IN) :: UNITAB ! table of input units
76 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*) ! submodel table
77 TYPE(FAIL_PARAM_) ,INTENT(INOUT) :: FAIL ! failure model data structure
78C-----------------------------------------------
79C L o c a l V a r i a b l e s
80C-----------------------------------------------
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
83 my_real :: x_1(2)
84 my_real :: x_2(3)
85 my_real :: xmin,ymin,dcrit,exp
86 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
87C=======================================================================
88 is_encrypted = .false.
89 is_available = .false.
90C--------------------------------------------------
91C EXTRACT DATA (IS OPTION CRYPTED)
92C--------------------------------------------------
93 CALL hm_option_is_encrypted(is_encrypted)
94C--------------------------------------------------
95C EXTRACT INPUT DATA
96C--------------------------------------------------
97card1
98 CALL hm_get_floatv ('c1' ,C1 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
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)
103c
104card2 damage accumulation parametars
105c
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
118c---------------------------------------------------
119c Optional input
120c---------------------------------------------------
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)
125c---------------------------------------------------
126c
127c---------------------------------------------------
128c Stress softening input
129c---------------------------------------------------
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)
133c---------------------------------------------------
134c
135 ! Check Pthickfail parameter
136 PTHK = MIN(PTHK, ONE)
137 PTHK = MAX(PTHK,-ONE)
138 IF (PTHK == ZERO) PTHK = EM06
139c
140 ! Check SFLAG formulation parameter
141 IF (SFLAG == 0) SFLAG = 2
142c
143c---------------------------------------------------
144c pre definition for user-input data when only
145c tension test data are provided
146c---------------------------------------------------
147 IF (C3 == ZERO) THEN
148 SELECT CASE (MFLAG)
149c
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
166c
167 END SELECT
168 ENDIF
169c---------------------------------------------------
170c
171 CALL BIQUAD_COEFFICIENTS(C1,C2,C3,C4,C5,MFLAG,X_1,X_2,E1,E2,E3,E4)
172c
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
185c
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
198c
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
217c
218c---------------------------------------------------
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
229c-------------------------
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
239c
240 FAIL%PTHK = PTHK
241c
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
266c---------------------------------------------------
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
284c-----------------------------------------------------------------------
285 RETURN
286c-----------------------------------------------------------------------
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,'-----------------------------------------------',/)
350c-----------------------------------------------------------------------
#define my_real
Definition cppsort.cpp:32
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)
initmumps id
integer, parameter nchartitle
real function second()
SECOND Using ETIME