OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_fail_johnson.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| hm_read_fail_johnson ../starter/source/materials/fail/johnson_cook/hm_read_fail_johnson.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_fail ../starter/source/materials/fail/hm_read_fail.f
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
30!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
31!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
32!||--- uses -----------------------------------------------------
33!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
34!|| message_mod ../starter/share/message_module/message_mod.F
35!|| submodel_mod ../starter/share/modules1/submodel_mod.F
36!||====================================================================
38 . FAIL ,MAT_ID ,FAIL_ID ,ILAW ,IRUPT ,IXFEM ,
39 . TITR ,LSUBMODEL,UNITAB )
40C-----------------------------------------------
41c ROUTINE DESCRIPTION :
42c Read Johnoson-Cook failure model parameters
43C-----------------------------------------------
44C M o d u l e s
45C-----------------------------------------------
46 USE fail_param_mod
47 USE unitab_mod
48 USE message_mod
49 USE submodel_mod
52C-----------------------------------------------
53C I m p l i c i t T y p e s
54C-----------------------------------------------
55#include "implicit_f.inc"
56C-----------------------------------------------
57#include "units_c.inc"
58C-----------------------------------------------
59C D u m m y A r g u m e n t s
60C-----------------------------------------------
61 INTEGER ,INTENT(IN) :: FAIL_ID ! failure model ID
62 INTEGER ,INTENT(IN) :: MAT_ID ! material law ID
63 INTEGER ,INTENT(IN) :: ILAW ! material law type number
64 INTEGER ,INTENT(IN) :: IRUPT ! failure model type number
65 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR ! material model title
66 TYPE(unit_type_) ,INTENT(IN) :: UNITAB ! table of input units
67 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*) ! submodel table
68 INTEGER ,INTENT(INOUT) :: IXFEM ! XFEM activation flag
69 TYPE(fail_param_) ,INTENT(INOUT) :: FAIL ! failure model data structure
70C-----------------------------------------------
71C L o c a l V a r i a b l e s
72C-----------------------------------------------
73 INTEGER IFAIL_SH,ISOLID,I,FAILIP
74 my_real D1,D2,D3,D4,D5,EPSP0,UNIT_T,DADV,PTHKF,EPSF_MIN
75 my_real triax,epsf,depsf_dtriax
76 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
77C=======================================================================
78 is_encrypted = .false.
79 is_available = .false.
80C--------------------------------------------------
81C Check encryption
82C--------------------------------------------------
83 CALL hm_option_is_encrypted(is_encrypted)
84C--------------------------------------------------
85C EXTRACT PARAMETERS
86C--------------------------------------------------
87 CALL hm_get_floatv ('d1' ,D1 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
88 CALL HM_GET_FLOATV ('d2' ,D2 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
89 CALL HM_GET_FLOATV ('d3' ,D3 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
90 CALL HM_GET_FLOATV ('d4' ,D4 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
91 CALL HM_GET_FLOATV ('d5' ,D5 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
92 CALL HM_GET_FLOATV ('epsilon_dot_0',EPSP0 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
93 CALL HM_GET_INTV ('ifail_sh' ,IFAIL_SH,IS_AVAILABLE,LSUBMODEL)
94 CALL HM_GET_INTV ('ifail_so' ,ISOLID ,IS_AVAILABLE,LSUBMODEL)
95 CALL HM_GET_FLOATV ('epsf_min' ,EPSF_MIN,IS_AVAILABLE,LSUBMODEL,UNITAB)
96 CALL HM_GET_FLOATV ('dadv' ,DADV ,IS_AVAILABLE,LSUBMODEL,UNITAB)
97 CALL HM_GET_INTV ('ixfem' ,IXFEM ,IS_AVAILABLE,LSUBMODEL)
98 CALL HM_GET_INTV ('failip' ,FAILIP ,IS_AVAILABLE,LSUBMODEL)
99 IF (FAILIP == 0) FAILIP = 1
100!
101 ! CHECK COMPATIBILITY WITH MATERIAL LAW
102 IF (ILAW == 25) THEN
103 CALL ANCMSG(MSGID=3001, MSGTYPE=MSGWARNING, ANMODE=ANINFO_BLIND,
104 . I1=MAT_ID,
105 . C1=TITR)
106 ENDIF
107!
108 ! Check the Johnson-Cook Failure criterion
109 TRIAX = ONE
110 EPSF = D1 + D2*EXP(D3*TRIAX)
111 ! -> Check if criterion reaches negative values
112.AND. IF ((EPSF <= ZERO)(EPSF_MIN == ZERO)) THEN
113 DO I = 1,10
114 DEPSF_DTRIAX = D2*D3*EXP(D3*TRIAX)
115 TRIAX = TRIAX - EPSF/DEPSF_DTRIAX
116 TRIAX = MIN(TRIAX, ONE)
117 TRIAX = MAX(TRIAX,-ONE)
118 EPSF = D1 + D2*EXP(D3*TRIAX)
119 ENDDO
120 ! -> Print warning message
121.AND..AND. IF ((ABS(EPSF) < EM06) (TRIAX < ONE) (TRIAX > -ONE)) THEN
122 CALL ANCMSG(MSGID=3058,
123 . MSGTYPE=MSGWARNING,
124 . ANMODE=ANINFO_BLIND,
125 . I1=MAT_ID,
126 . C1=TITR,
127 . R1=TRIAX)
128 ENDIF
129 ENDIF
130!
131 IF (EPSP0 == ZERO) EPSP0=EM20
132 IF (IFAIL_SH == 0) IFAIL_SH=1
133 IF (ISOLID == 0) ISOLID=1
134.AND. IF (IXFEM /= 1 IXFEM /= 2) IXFEM = 0
135 IF (IXFEM > 0) ISOLID = 0
136.OR. IF (DADV == ZERO DADV > ONE) DADV = ONE
137c-----------------------------
138 IF (IFAIL_SH == 1) THEN
139 PTHKF = EM06
140 ELSEIF (IFAIL_SH == 2) THEN
141 PTHKF = ONE
142 ENDIF
143c----------------------------------
144 FAIL%KEYWORD = 'johnson-cook'
145 FAIL%IRUPT = IRUPT
146 FAIL%FAIL_ID = FAIL_ID
147 FAIL%NUPARAM = 13
148 FAIL%NIPARAM = 0
149 FAIL%NUVAR = 0
150 FAIL%NFUNC = 0
151 FAIL%NTABLE = 0
152 FAIL%NMOD = 0
153 FAIL%PTHK = PTHKF
154c
155 ALLOCATE (FAIL%UPARAM(FAIL%NUPARAM))
156 ALLOCATE (FAIL%IPARAM(FAIL%NIPARAM))
157 ALLOCATE (FAIL%IFUNC (FAIL%NFUNC))
158 ALLOCATE (FAIL%TABLE (FAIL%NTABLE))
159c
160 FAIL%UPARAM(1) = D1
161 FAIL%UPARAM(2) = D2
162 FAIL%UPARAM(3) = D3
163 FAIL%UPARAM(4) = D4
164 FAIL%UPARAM(5) = D5
165 FAIL%UPARAM(6) = EPSP0
166 FAIL%UPARAM(7) = IFAIL_SH
167 FAIL%UPARAM(8) = ISOLID
168 FAIL%UPARAM(9) = 0 ! not used
169 FAIL%UPARAM(10)= DADV
170 FAIL%UPARAM(11)= IXFEM
171 FAIL%UPARAM(12)= EPSF_MIN
172 FAIL%UPARAM(13)= FAILIP
173c---------------------------
174c OUTPUT
175c---------------------------
176 IF (IS_ENCRYPTED) THEN
177 WRITE(IOUT,'(5x,a,//)')'confidential data'
178 ELSE
179
180 WRITE(IOUT,500) MAT_ID,IRUPT,FAIL_ID
181
182C---
183C for shell
184C---
185 IF (IXFEM == 0)THEN
186 WRITE(IOUT, 1000)D1,D2,D3,D4,D5,EPSF_MIN,FAILIP
187 IF (IFAIL_SH == 1)THEN
188 WRITE(IOUT, 1100)
189 ELSEIF(IFAIL_SH == 2)THEN
190 WRITE(IOUT, 1200)
191 ENDIF
192 ELSE
193 WRITE(IOUT, 1010)D1,D2,D3,D4,D5,IXFEM,DADV,EPSF_MIN
194 WRITE(IOUT, 1400)
195 END IF
196C---
197C for solid
198C---
199 IF (IXFEM == 0) THEN ! XFEM is not available for solids
200 IF(ISOLID == 1) THEN
201 WRITE(IOUT, 2100)
202 ELSEIF (ISOLID == 2) THEN
203 WRITE(IOUT, 2200)
204 ELSEIF (ISOLID == 3) THEN
205 WRITE(IOUT, 2300)
206 ELSEIF (ISOLID == 4) THEN
207 WRITE(IOUT, 2400)
208 ENDIF
209 ENDIF
210C
211 IF (D3 > ZERO)THEN
212 CALL ANCMSG(MSGID=831, MSGTYPE=MSGWARNING, ANMODE=ANINFO,
213 . I1=MAT_ID)
214 ENDIF
215 ENDIF ! IF (IS_ENCRYPTED)
216c-----------------------------------------------------------
217 500 FORMAT(//
218 & 5X,'mat_id . . . . . . . . . . . . . . .=',I10/
219 & 5X,'failure model. . . . . . . . . . . .=',I10/
220 & 5X,'fail_id. . . . . . . . . . . . . . .=',I10/)
221 1000 FORMAT(
222 & 5X,' ---------------------------------------------------- ',/
223 & 5X,' failure criterion : johnson-cook ',/,
224 & 5x,' ---------------------------------------------------- ',/
225 & 5x,'FIRST FAILURE PARAMETER (D1). . . . . . . . . . . . . .=',1pg20.13/
226 & 5x,'SECOND FAILURE PARAMETER (D2). . . . . . . . . . . . . .=',1pg20.13/
227 & 5x,'THIRD FAILURE PARAMETER (D3). . . . . . . . . . . . . .=',1pg20.13/
228 & 5x,'FORTH FAILURE PARAMETER (D4). . . . . . . . . . . . . .=',1pg20.13/
229 & 5x,'FIFTH FAILURE PARAMETER (D5). . . . . . . . . . . . . .=',1pg20.13/
230 & 5x,'LOWER PLASTIC STRAIN AT FAILURE (EPSF_MIN). . . . . . . =',1pg20.13/
231 & 5x,'NUMBER OF FAILED INTG. POINTS PRIOR TO ELEM DELETION .=',i10/)
232 1100 FORMAT(
233 & 5x,' SHELL ELEMENT DELETION AFTER FAILURE')
234 2100 FORMAT(
235 & 5x,' SOLID ELEMENT DELETION AFTER FAILURE')
236
237 1200 FORMAT(
238 & 5x,' STRESS TENSOR IN SHELL LAYER SET TO ZERO AFTER FAILURE')
239 1400 FORMAT(
240 & 5x,' SHELL ELEMENT CRACKING AFTER FAILURE')
241 2200 FORMAT(
242 & 5x,' DEVIATORIC STRESS TENSOR IN SOLID WILL VANISH AFTER FAILURE')
243 2300 FORMAT(
244 & 5x,' DEVIATORIC STRESS TENSOR IN SOLID WILL VANISH AFTER FAILURE',/,
245 & 5x,' PRESSURE CAN STILL BE POSITIVE OR NULL')
246 2400 FORMAT(
247 & 5x,' THE STRESS TENSOR IN SOLID WILL VANISH AFTER FAILURE')
248C
249 1010 FORMAT(
250 & 5x,' ---------------------------------------------------- ',/
251 & 5x,' FAILURE CRITERION : X-FEM JOHNSON-COOK ',/,
252 & 5x,' ---------------------------------------------------- ',/
253 & 5x,'FIRST FAILURE PARAMETER (D1). . . . . . . . . . . . . .=',1pg20.13/
254 & 5x,'SECOND FAILURE PARAMETER (D2). . . . . . . . . . . . . .=',1pg20.13/
255 & 5x,'THIRD FAILURE PARAMETER (D3). . . . . . . . . . . . . .=',1pg20.13/
256 & 5x,'FORTH FAILURE PARAMETER (D4). . . . . . . . . . . . . .=',1pg20.13/
257 & 5x,'FIFTH FAILURE PARAMETER (D5). . . . . . . . . . . . . .=',1pg20.13/
258 & 5x,'FLAG XFEM. . . . . . . . . . . . . . . . . . . . . . . .=',i10/
259 & 5x,'CRITICAL ADVANCEMENT VALUE . . . . . . . . . . . . . . .=',1pg20.13/
260 & 5x,'LOWER PLASTIC STRAIN AT FAILURE (EPSF_MIN). . . . . . . =',1pg20.13//)
261C-----------
262 RETURN
263 END
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_fail(mat_param, nummat, maxfail, fail_tag, ntable, table, failwave, nloc_dmg, unitab, lsubmodel)
subroutine hm_read_fail_johnson(fail, mat_id, fail_id, ilaw, irupt, ixfem, titr, lsubmodel, unitab)
integer, parameter nchartitle
program starter
Definition starter.F:39