OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
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!|| fail_johnson ../engine/source/materials/fail/johnson_cook/fail_johnson.F
25!||--- called by ------------------------------------------------------
26!|| mmain ../engine/source/materials/mat_share/mmain.F90
27!|| mmain8 ../engine/source/materials/mat_share/mmain8.F
28!|| mulaw ../engine/source/materials/mat_share/mulaw.F90
29!|| mulaw8 ../engine/source/materials/mat_share/mulaw8.F90
30!|| usermat_solid ../engine/source/materials/mat_share/usermat_solid.F
31!||====================================================================
32 SUBROUTINE fail_johnson(
33 1 NEL ,NUPARAM,NUVAR ,
34 2 TIME ,TIMESTEP ,UPARAM ,NGL ,
35 4 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
36 5 DPLA ,EPSP ,TSTAR ,UVAR ,OFF ,
37 6 DFMAX ,TDELE )
38c-----------------------------------------------
39c Johnson cook failure model
40C-----------------------------------------------
41C I m p l i c i t T y p e s
42C-----------------------------------------------
43#include "implicit_f.inc"
44C---------+---------+---+---+--------------------------------------------
45C VAR | SIZE |TYP| RW| DEFINITION
46C---------+---------+---+---+--------------------------------------------
47C NEL | 1 | I | R | SIZE OF THE ELEMENT GROUP NEL
48C NUPARAM | 1 | I | R | SIZE OF THE USER PARAMETER ARRAY
49C NUVAR | 1 | I | R | NUMBER OF FAILURE ELEMENT VARIABLES
50C---------+---------+---+---+--------------------------------------------
51C TIME | 1 | F | R | CURRENT TIME
52C TIMESTEP| 1 | F | R | CURRENT TIME STEP
53C UPARAM | NUPARAM | F | R | USER FAILURE PARAMETER ARRAY
54C---------+---------+---+---+--------------------------------------------
55C SIGNXX | NEL | F | W | NEW ELASTO PLASTIC STRESS XX
56C SIGNYY | NEL | F | W | NEW ELASTO PLASTIC STRESS YY
57C ... | | | |
58C ... | | | |
59C---------+---------+---+---+--------------------------------------------
60C UVAR |NEL*NUVAR| F |R/W| USER ELEMENT VARIABLE ARRAY
61C OFF | NEL | F |R/W| DELETED ELEMENT FLAG (=1. ON, =0. OFF)
62C---------+---------+---+---+--------------------------------------------
63#include "scr17_c.inc"
64#include "units_c.inc"
65#include "comlock.inc"
66#include "param_c.inc"
67#include "impl1_c.inc"
68C-----------------------------------------------
69 INTEGER NEL, NUPARAM, NUVAR,NGL(NEL)
70 my_real TIME,TIMESTEP,UPARAM(NUPARAM),
71 . SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
72 . SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),UVAR(NEL,NUVAR),
73 . DPLA(NEL),EPSP(NEL),TSTAR(NEL),OFF(NEL),DFMAX(NEL),TDELE(NEL)
74C-----------------------------------------------
75C L o c a l V a r i a b l e s
76C-----------------------------------------------
77 INTEGER I,J,JJ,IDEL,IDEV,IFLAG,NINDX,IR,IFAIL,ISOLID
78 INTEGER ,DIMENSION(NEL) :: INDX
79 my_real :: D1,D2,D3,D4,D5,EPSP0,P,EPSF,SVM,SCALE,SXX,SYY,SZZ,EPSF_MIN
80C--------------------------------------------------------------
81 D1 = uparam(1)
82 d2 = uparam(2)
83 d3 = uparam(3)
84 d4 = uparam(4)
85 d5 = uparam(5)
86 epsp0 = uparam(6)
87 isolid = int(uparam(8))
88 epsf_min = uparam(12)
89
90C-----------------------------------------------
91 idel=0
92 idev=0
93 scale = zero
94 IF ((isolid==1).OR.(isolid == 4)) THEN
95 idel=1
96 ELSEIF ((isolid==2).OR.(isolid == 3)) THEN
97 idev =1
98 ENDIF
99C...
100 IF(idel==1)THEN
101 DO i=1,nel
102 IF(off(i)<0.1) off(i)=0.0
103 IF(off(i)<1.0) off(i)=off(i)*0.8
104 END DO
105 END IF
106C
107 IF(idel==1)THEN
108 nindx=0
109 DO i=1,nel
110 IF ((isolid==1.AND.off(i)==one).OR.(isolid==4))THEN
111 IF(dpla(i)/=zero)THEN
112 p = third*(signxx(i) + signyy(i) + signzz(i))
113 sxx = signxx(i) - p
114 syy = signyy(i) - p
115 szz = signzz(i) - p
116 svm =half*(sxx**2 + syy**2 + szz**2)
117 . +signxy(i)**2 + signzx(i)**2 + signyz(i)**2
118 svm=sqrt(three*svm)
119 epsf = d3*p/max(em20,svm)
120 epsf = d1 + d2*exp(epsf)
121 IF(d4/=zero) epsf = epsf * (one + d4*log(max(one,epsp(i)/epsp0))) ! if d4=0, epsp is not correctly defined
122 IF(d5/=zero) epsf = epsf * (one + d5*tstar(i)) ! if d5=0, tsart is not correctly defined
123 epsf = max(epsf,epsf_min)
124 IF(epsf>zero) dfmax(i) = dfmax(i) + dpla(i)/epsf
125 dfmax(i) = min(one,dfmax(i))
126 ENDIF
127 IF (dfmax(i)>=one.AND.off(i)==one) THEN
128 IF (isolid == 1) THEN
129 off(i)=four_over_5
130 nindx=nindx+1
131 indx(nindx)=i
132 tdele(i) = time
133 ELSEIF (isolid == 4) THEN
134 dfmax(i) = one
135 off(i) = one
136 signxx(i) = zero
137 signyy(i) = zero
138 signzz(i) = zero
139 signxy(i) = zero
140 signyz(i) = zero
141 signzx(i) = zero
142 ENDIF
143 ENDIF
144 ENDIF
145 ENDDO
146 IF(nindx>0.AND.imconv==1)THEN
147 DO j=1,nindx
148#include "lockon.inc"
149 WRITE(iout, 1000) ngl(indx(j))
150 WRITE(istdo,1100) ngl(indx(j)),time
151#include "lockoff.inc"
152 END DO
153 END IF
154 ENDIF
155Cc deviatoric will be vanished
156 IF(idev==1)THEN
157 nindx=0
158 DO i=1,nel
159 IF((isolid==2.OR.isolid==3).AND.off(i)==one)THEN
160 IF(dfmax(i)<one.AND.dpla(i)/=zero)THEN
161 p = third*(signxx(i) + signyy(i) + signzz(i))
162 sxx = signxx(i) - p
163 syy = signyy(i) - p
164 szz = signzz(i) - p
165 svm =half*(sxx**2+ syy**2 + szz**2)
166 . +signxy(i)**2 + signzx(i)**2 + signyz(i)**2
167 svm=sqrt(three*svm)
168 epsf = d3*p/max(em20,svm)
169 epsf = (d1 +
170 . d2*exp(epsf))*(one
171 . + d4*log(max(one,epsp(i)/epsp0)))
172 . *(one + d5*tstar(i))
173 epsf = max(epsf,epsf_min)
174 IF(epsf>zero) dfmax(i) = dfmax(i) + dpla(i)/epsf
175 dfmax(i) = min(one,dfmax(i))
176 IF(dfmax(i)>=one.AND.off(i)==one) THEN
177 nindx=nindx+1
178 indx(nindx)=i
179 dfmax(i) = one
180 IF (isolid == 2) THEN
181 signxx(i) = p
182 signyy(i) = p
183 signzz(i) = p
184 signxy(i) = zero
185 signyz(i) = zero
186 signzx(i) = zero
187 ELSEIF (isolid == 3) THEN
188 signxx(i) = min(p,zero)
189 signyy(i) = min(p,zero)
190 signzz(i) = min(p,zero)
191 signxy(i) = zero
192 signyz(i) = zero
193 signzx(i) = zero
194 ENDIF
195 ENDIF
196c
197 ELSEIF(dfmax(i)>=one)THEN
198 p = third*(signxx(i) + signyy(i) + signzz(i))
199 dfmax(i) = one
200 IF (isolid == 2) THEN
201 signxx(i) = p
202 signyy(i) = p
203 signzz(i) = p
204 signxy(i) = zero
205 signyz(i) = zero
206 signzx(i) = zero
207 ELSEIF (isolid == 3) THEN
208 signxx(i) = min(p,zero)
209 signyy(i) = min(p,zero)
210 signzz(i) = min(p,zero)
211 signxy(i) = zero
212 signyz(i) = zero
213 signzx(i) = zero
214 ENDIF
215 ENDIF
216 ENDIF
217 ENDDO
218 IF(nindx>0.AND.imconv==1)THEN
219 DO j=1,nindx
220 i = indx(j)
221#include "lockon.inc"
222 WRITE(iout, 2000) ngl(i)
223 WRITE(istdo,2100) ngl(i),time
224#include "lockoff.inc"
225 END DO
226 END IF
227 ENDIF
228C---------Damage for output 0 < DFMAX < 1 --------------------
229c DO J=1,IR
230c I=JST(J)
231c DFMAX(I)= MIN(ONE,DFMAX(I))
232c ENDDO
233C------------------
234C-----------------------------------------------
235 1000 FORMAT(1x,'DELETE SOLID ELEMENT NUMBER ',i10)
236 1100 FORMAT(1x,'DELETE SOLID ELEMENT NUMBER ',i10,
237 . ' AT TIME :',1pe12.4)
238C
239 2000 FORMAT(1x,' DEVIATORIC STRESS WILL BE VANISHED',i10)
240 2100 FORMAT(1x,' DEVIATORIC STRESS WILL BE VANISHED',i10,
241 . ' AT TIME :',1pe12.4)
242 RETURN
243 END
subroutine fail_johnson(nel, nuparam, nuvar, time, timestep, uparam, ngl, signxx, signyy, signzz, signxy, signyz, signzx, dpla, epsp, tstar, uvar, off, dfmax, tdele)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21