OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
fail_wierzbicki_s.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_wierzbicki_s ../engine/source/materials/fail/wierzbicki/fail_wierzbicki_s.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!||====================================================================
33 1 NEL ,NUPARAM,NUVAR ,
34 2 TIME ,TIMESTEP ,UPARAM ,NGL ,
35 4 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
36 5 DPLA ,PLA ,UVAR ,OFF ,DFMAX ,
37 6 TDELE )
38C-----------------------------------------------
39C Xue-Wierbzcki
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 "mvsiz_p.inc"
64#include "scr17_c.inc"
65#include "units_c.inc"
66#include "comlock.inc"
67#include "param_c.inc"
68#include "impl1_c.inc"
69C-----------------------------------------------
70C I N P U T A r g u m e n t s
71C-----------------------------------------------
72C
73 INTEGER NEL, NUPARAM, NUVAR,NGL(NEL)
74 my_real TIME,TIMESTEP,UPARAM(*),
75 . SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
76 . SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
77 . DPLA(NEL),PLA(NEL)
78C-----------------------------------------------
79C O U T P U T A r g u m e n t s
80C-----------------------------------------------
81cc my_real
82
83C-----------------------------------------------
84C I N P U T O U T P U T A r g u m e n t s
85C-----------------------------------------------
86 my_real uvar(nel,nuvar), off(nel),dfmax(nel),tdele(nel)
87C-----------------------------------------------
88C L o c a l V a r i a b l e s
89C-----------------------------------------------
90 INTEGER I,J,IDEL,IDEV,IFLAG,INDX(MVSIZ),IADBUF,NINDX,
91 . nindex,index(mvsiz),ifail,jj,imoy
92 my_real
93 . c1,c2,c3,c4,cm,
94 . cn,p,epsf,svm,j3,eta,xi,sxx,syy,szz,delta,
95 . xi_old, eta_old,pla_old,epsf_old
96C--------------------------------------------------------------
97 c1 = uparam(1)
98 c2 = uparam(2)
99 c3 = uparam(3)
100 c4 = uparam(4)
101 cm = uparam(5)
102 cn = uparam(6)
103 iflag = int(uparam(8))
104 imoy = int( uparam(9))
105Cc
106 idel=0
107 idev=0
108 IF(iflag==1)THEN
109 idel=1
110 ELSEIF(iflag==2)THEN
111 idev =1
112 END IF
113C...
114 IF(idel==1)THEN
115 DO i=1,nel
116 IF(off(i)<0.1) off(i)=0.0
117 IF(off(i)<1.0) off(i)=off(i)*0.8
118 END DO
119 END IF
120C
121 IF(idel==1)THEN
122 nindx=0
123 DO i=1,nel
124 IF(iflag==1.AND.off(i)==1.AND.dpla(i)/=zero)THEN
125 p = third*(signxx(i) + signyy(i) + signzz(i))
126 sxx = signxx(i) - p
127 syy = signyy(i) - p
128 szz = signzz(i) - p
129C Vmises stress
130 svm =half*(sxx**2 + syy**2 + szz**2)
131 . +signxy(i)**2 + signzx(i)**2 + signyz(i)**2
132 svm=sqrt(three*svm)
133C third invariant
134 j3 = sxx*syy*szz + two*signxy(i)*signzx(i)*signyz(i)
135 . - syy*signzx(i)**2 - sxx*signyz(i)**2
136 . - szz*signxy(i)**2
137 eta = p / max(em20,svm)
138 xi = half*(twenty + seven)*j3/max(em20,svm**3)
139c
140 IF(imoy==1)THEN
141 uvar(i,1) = uvar(i,1) + eta*dpla(i)
142 uvar(i,2) = uvar(i,2) + xi*dpla(i)
143 eta = uvar(i,1)/max(em20,pla(i))
144 xi = uvar(i,2)/max(em20,pla(i))
145 ENDIF
146c
147 epsf = (c1*exp(-c2*eta))**cn
148 . - (c3*exp(-c4*eta))**cn
149 epsf = epsf * max(zero,(one - xi**cm))**(one/cm)
150 epsf = ((c1*exp(-c2*eta))**cn - epsf)**(one/cn)
151 IF(epsf>zero)
152 . dfmax(i) = dfmax(i) + dpla(i)*(one/epsf)
153 IF(dfmax(i)>=one.AND.off(i)==one) THEN
154 off(i)=four_over_5
155 nindx=nindx+1
156 indx(nindx)=i
157 tdele(i) = time
158 ENDIF
159 ENDIF
160 ENDDO
161 IF(nindx>0.AND.imconv==1)THEN
162 DO j=1,nindx
163#include "lockon.inc"
164 WRITE(iout, 1000) ngl(indx(j))
165 WRITE(istdo,1100) ngl(indx(j)),time
166#include "lockoff.inc"
167 END DO
168 END IF
169 ENDIF
170Cc deviatoric will vanish
171 IF(idev==1)THEN
172 nindx=0
173 nindex = 0
174 DO i=1,nel
175 IF(iflag==2.AND.off(i)==one)THEN
176 IF(dfmax(i)<one)THEN
177 p = third*(signxx(i) + signyy(i) + signzz(i))
178 sxx = signxx(i) - p
179 syy = signyy(i) - p
180 szz = signzz(i) - p
181C Vmises stress
182 svm =half*(sxx**2 + syy**2 + szz**2)
183 . +signxy(i)**2 + signzx(i)**2 + signyz(i)**2
184 svm=sqrt(three*svm)
185C third invariant
186 j3 = sxx*syy*szz + two*signxy(i)*signzx(i)*signyz(i)
187 . - syy*signzx(i)**2 - sxx*signyz(i)**2
188 . - szz*signxy(i)**2
189 eta = p / max(em20,svm)
190 xi = half*(twenty + seven)*j3/max(em20,svm**3)
191C average valeur
192 IF(imoy==1)THEN
193 uvar(i,1) = uvar(i,1) + eta*dpla(i)
194 uvar(i,2) = uvar(i,2) + xi*dpla(i)
195 eta = uvar(i,1)/max(em20,pla(i))
196 xi = uvar(i,2)/max(em20,pla(i))
197 ENDIF
198CC
199 epsf = (c1*exp(-c2*eta))**cn
200 . - (c3*exp(-c4*eta))**cn
201 epsf = epsf * max(zero,(one - xi**cm))**(one/cm)
202 epsf = ((c1*exp(-c2*eta))**cn - epsf)**(one/cn)
203 IF(epsf>zero) dfmax(i) = dfmax(i) + dpla(i)/epsf
204 IF(dfmax(i)>=one.AND.off(i)==one) THEN
205 nindx=nindx+1
206 indx(nindx)=i
207 signxx(i) = p
208 signyy(i) = p
209 signzz(i) = p
210 signxy(i) = zero
211 signyz(i) = zero
212 signzx(i) = zero
213 ENDIF
214c UVAR> 1
215 ELSE
216 p = third*(signxx(i) + signyy(i) + signzz(i))
217 signxx(i) = p
218 signyy(i) = p
219 signzz(i) = p
220 signxy(i) = zero
221 signyz(i) = zero
222 signzx(i) = zero
223 ENDIF
224 ENDIF
225 ENDDO
226 IF(nindx>0.AND.imconv==1)THEN
227 DO j=1,nindx
228 i = indx(j)
229#include "lockon.inc"
230 WRITE(iout, 2000) ngl(i)
231 WRITE(istdo,2100) ngl(i),time
232#include "lockoff.inc"
233 END DO
234 END IF
235 ENDIF
236C-------------Maximum Damage storing for output : 0 < DFMAX < 1--------------
237 DO i=1,nel
238 dfmax(i)= min(one,dfmax(i))
239 ENDDO
240C-----------------------------------------------
241 1000 FORMAT(1x,'DELETE SOLID ELEMENT NUMBER ',i10)
242 1100 FORMAT(1x,'DELETE SOLID ELEMENT NUMBER ',i10,
243 . ' AT TIME :',1pe20.13)
244C
245 2000 FORMAT(1x,' DEVIATORIC STRESS WILL BE VANISHED',i10)
246 2100 FORMAT(1x,' DEVIATORIC STRESS WILL BE VANISHED',i10,
247 . ' AT TIME :',1pe20.13)
248 RETURN
249 END
subroutine fail_wierzbicki_s(nel, nuparam, nuvar, time, timestep, uparam, ngl, signxx, signyy, signzz, signxy, signyz, signzx, dpla, pla, uvar, off, dfmax, tdele)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21