OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
fail_ladeveze.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_ladeveze ../engine/source/materials/fail/ladeveze/fail_ladeveze.F
25!||--- called by ------------------------------------------------------
26!|| mmain ../engine/source/materials/mat_share/mmain.F90
27!||====================================================================
28 SUBROUTINE fail_ladeveze(
29 1 NEL ,NUVAR ,ILAY ,NPT0 ,
30 2 TIME ,TIMESTEP,UPARAM ,
31 3 NGL ,OFF ,NOFF ,SIGNXX ,
32 4 SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
33 5 UVAR ,NUPARAM ,DFMAX ,TDELE )
34C-----------------------------------------------
35C Ladeveze damage delamination model
36C-----------------------------------------------
37C I m p l i c i t T y p e s
38C-----------------------------------------------
39#include "implicit_f.inc"
40C---------+---------+---+---+--------------------------------------------
41C VAR | SIZE |TYP| RW| DEFINITION
42C---------+---------+---+---+--------------------------------------------
43C NEL | 1 | I | R | SIZE OF THE ELEMENT GROUP NEL
44C NUPARAM | 1 | I | R | SIZE OF THE USER PARAMETER ARRAY
45C NUVAR | 1 | I | R | NUMBER OF USER ELEMENT VARIABLES
46C---------+---------+---+---+--------------------------------------------
47C NPF | * | I | R | FUNCTION ARRAY
48C TF | * | F | R | FUNCTION ARRAY
49C---------+---------+---+---+--------------------------------------------
50C TIME | 1 | F | R | CURRENT TIME
51C TIMESTEP| 1 | F | R | CURRENT TIME STEP
52C UPARAM | NUPARAM | F | R | USER MATERIAL PARAMETER ARRAY
53C EPSPXX | NEL | F | R | STRAIN RATE XX
54C EPSPYY | NEL | F | R | STRAIN RATE YY
55C ... | | | |
56C DEPSXX | NEL | F | R | STRAIN INCREMENT XX
57C DEPSYY | NEL | F | R | STRAIN INCREMENT YY
58C ... | | | |
59C EPSXX | NEL | F | R | STRAIN XX
60C EPSYY | NEL | F | R | STRAIN YY
61C ... | | | |
62C SIGOXX | NEL | F | R | OLD ELASTO PLASTIC STRESS XX
63C SIGOYY | NEL | F | R | OLD ELASTO PLASTIC STRESS YY
64C ... | | | |
65C---------+---------+---+---+--------------------------------------------
66C SIGNXX | NEL | F | W | NEW ELASTO PLASTIC STRESS XX
67C SIGNYY | NEL | F | W | NEW ELASTO PLASTIC STRESS YY
68C ... | | | |
69C SIGVXX | NEL | F | W | VISCOUS STRESS XX
70C SIGVYY | NEL | F | W | VISCOUS STRESS YY
71C ... | | | |
72C SOUNDSP | NEL | F | W | SOUND SPEED (NEEDED FOR TIME STEP)
73C VISCMAX | NEL | F | W | MAXIMUM DAMPING MODULUS(NEEDED FOR TIME STEP)
74C---------+---------+---+---+--------------------------------------------
75C UVAR |NEL*NUVAR| F |R/W| USER ELEMENT VARIABLE ARRAY
76C OFF | NEL | F |R/W| DELETED ELEMENT FLAG (=1. ON, =0. OFF)
77C---------+---------+---+---+--------------------------------------------
78#include "com01_c.inc"
79#include "mvsiz_p.inc"
80#include "units_c.inc"
81#include "comlock.inc"
82#include "param_c.inc"
83C-----------------------------------------------
84C I N P U T A r g u m e n t s
85C-----------------------------------------------
86 INTEGER NEL,NUPARAM, NUVAR,ILAY,NPT0
87 INTEGER NGL(NEL)
88 my_real
89 . TIME,TIMESTEP,UPARAM(NUPARAM),
90 . SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
91 . signxy(nel),signyz(nel),signzx(nel)
92C-----------------------------------------------
93C I N P U T O U T P U T A r g u m e n t s
94C-----------------------------------------------
95 INTEGER NOFF(NEL)
96 my_real UVAR(NEL,NUVAR), OFF(NEL),DFMAX(NEL),TDELE(NEL)
97C-----------------------------------------------
98C L o c a l V a r i a b l e s
99C-----------------------------------------------
100 INTEGER INDX0(MVSIZ),IFLAG,INDX(MVSIZ)
101 INTEGER I,J,JJ,IADBUF,NINDX,NINDX0,
102 . IFAIL,IMATLY
103 my_real
104 . K1,K2,K3,K,
105 . a,gama1,gama2,
106 . y0,yc,tmax,fac,
107 . dam, yd1,yd2,yd3,cc,delta,w,yd,sig
108C--------------------------------------------------------------
109 k1 = uparam(1)
110 k2 = uparam(2)
111 k3 = uparam(3)
112 gama1 = uparam(4)
113 gama2 = uparam(5)
114 y0 = uparam(6)
115 yc = uparam(7)
116 k = uparam(8)
117 a = uparam(9)
118 tmax = uparam(10)
119 iflag = int(uparam(12))
120 indx(1:mvsiz) = 0
121C-----------------------------------------------
122C USER VARIABLES INITIALIZATION
123C-----------------------------------------------
124 IF(isigi == zero)THEN
125 IF ((uvar(1,12)==zero).AND.(uvar(1,1)==zero)) THEN
126 DO i=1,nel
127 uvar(i,12) = one
128 ENDDO
129 ENDIF
130 ENDIF
131C-----------------------------------------------
132 DO i=1,nel
133 IF(off(i)<em01) off(i)=zero
134 IF(off(i)<one) off(i)=off(i)*four_over_5
135 END DO
136C
137 nindx=0
138 indx = 0
139 nindx0=0
140 indx0 = 0
141C
142
143 DO i=1,nel
144 IF (off(i) == one )THEN
145 IF(iflag == 1) THEN
146C-------------------------------
147C OFF = 0. one layer fiber or matrix criteria is reached
148C-------------------------------
149 IF(uvar(i,12) < one)THEN
150 uvar(i,12)= exp(-(time - uvar(i,11))/tmax)
151 IF(uvar(i,12) < em02) uvar(i,12) = zero
152 signxx(i) = uvar(i,5)*uvar(i,12)
153 signyy(i) = uvar(i,6)*uvar(i,12)
154 signzz(i) = uvar(i,7)*uvar(i,12)
155 signxy(i) = uvar(i,8)*uvar(i,12)
156 signyz(i) = uvar(i,9)*uvar(i,12)
157 signzx(i) = uvar(i,10)*uvar(i,12)
158 IF(uvar(i,12) == zero ) THEN
159 off(i)=four_over_5
160 nindx=nindx+1
161 indx(nindx)=i
162 tdele(i) = time
163 ENDIF
164 ELSE
165C
166C direction 33
167C
168 dam = uvar(i,1)
169 sig = half*(signzz(i) + abs(signzz(i)))
170 yd3 = k3*(one - dam)**2
171 yd3 = half*sig*sig/max(yd3, em20)
172 yd3 = max(yd3, uvar(i,2))
173 uvar(i,2) = yd3
174C
175C direction 32
176C
177 sig = signyz(i)
178 yd2 = k2*(one - dam)**2
179 yd2 = half*sig*sig/max(yd2, em20)
180 yd2 = max(yd2, uvar(i,3))
181 uvar(i,3) = yd2
182C
183C direction 13
184C
185 sig = signzx(i)
186 yd1 = k1*(one - dam)**2
187 yd1 = half*sig*sig/max(yd1, em20)
188 yd1 = max(yd1, uvar(i,4))
189 uvar(i,4) = yd1
190C
191C compute new damage
192C
193 yd = yd3 + gama1*yd1 + gama2*yd2
194 delta = sqrt(yd) - y0
195 delta = half*(delta + abs(delta))
196 w = delta /(yc - y0)
197 cc = w - dam
198 cc = half*(cc + abs(cc))
199 fac = k*timestep/a
200 dam = dam + fac*(one - exp(-a*cc))
201 uvar(i,1) = dam
202 IF( dam >= 1 )THEN
203 uvar(i,5) = signxx(i)
204 uvar(i,6) = signyy(i)
205 uvar(i,7) = signzz(i)
206 uvar(i,8) = signxy(i)
207 uvar(i,9) = signyz(i)
208 uvar(i,10) = signzx(i)
209 uvar(i,11) = time
210 uvar(i,12) = four_over_5
211 ENDIF
212 ENDIF
213C
214 ELSEIF(iflag == 2) THEN ! iflag = 2
215C-------------------------------
216C OFF = 0. all layer fiber or matrix criteria is reached
217C is not activated this flag
218C-------------------------------
219 IF(uvar(i,12) == zero )THEN
220 signxx(i) = zero
221 signyy(i) = zero
222 signzz(i) = zero
223 signxy(i) = zero
224 signzx(i) = zero
225 signyz(i) = zero
226 ELSE IF(uvar(i,12) < one) THEN
227 uvar(i,12)= exp(-(time - uvar(i,11))/tmax)
228 IF(uvar(i,12) < em02)uvar(i,12) = zero
229 signxx(i) = uvar(i,5)*uvar(i,12)
230 signyy(i) = uvar(i,6)*uvar(i,12)
231 signzz(i) = uvar(i,7)*uvar(i,12)
232 signxy(i) = uvar(i,8)*uvar(i,12)
233 signyz(i) = uvar(i,9)*uvar(i,12)
234 signzx(i) = uvar(i,10)*uvar(i,12)
235 IF( uvar(i,12) == zero )THEN
236 noff(i) = noff(i) + 1
237 IF(noff(i) == npt0 .OR. npt0 == 1) THEN
238 nindx=nindx+1
239 indx(nindx)=i
240 off(i) = four_over_5
241 tdele(i) = time
242 ENDIF
243 ENDIF
244 ELSE
245C
246C direction 33
247C
248 dam = uvar(i,1)
249 sig = half*(signzz(i) + abs(signzz(i)))
250 yd3 = k3*(one - dam)**2
251 yd3 = half*sig*sig/max(yd3, em20)
252 yd3 = max(yd3, uvar(i,2))
253 uvar(i,2) = yd3
254C
255C direction 32
256C
257 sig =signyz(i)
258 yd2 = k2*(one - dam)**2
259 yd2 = half*sig*sig/max(yd2, em20)
260 yd2 = max(yd2, uvar(i,3))
261 uvar(i,3) = yd2
262C
263C direction 13
264C
265 sig = signzx(i)
266 yd1 = k1*(one - dam)**2
267 yd1 = half*sig*sig/max(yd1, em20)
268 yd1 = max(yd1, uvar(i,4))
269 uvar(i,4) = yd1
270C
271C compute new damage
272C
273 yd = yd3 + gama1*yd1 + gama2*yd2
274 delta = sqrt(yd) - y0
275 delta = half*(delta + abs(delta))
276 w = delta /(yc - y0)
277 cc = w - dam
278 cc = half*(cc + abs(cc))
279 fac = k*timestep/a
280 dam = dam + fac*(one - exp(-a*cc))
281 uvar(i,1) = dam
282 IF(dam >= one )THEN
283 uvar(i,5) = signxx(i)
284 uvar(i,6) = signyy(i)
285 uvar(i,7) = signzz(i)
286 uvar(i,8) = signxy(i)
287 uvar(i,9) = signyz(i)
288 uvar(i,10) = signzx(i)
289 uvar(i,11) = time
290 uvar(i,12) = four_over_5
291 nindx0= nindx0+1
292 indx0(nindx0)=i
293 ENDIF
294 ENDIF
295 ELSEIF(iflag == 3) THEN
296C-------------------------------
297C OFF = 0. all layer fiber or matrix criteria is reached
298C-------------------------------
299 IF(uvar(i,12) == zero )THEN
300 signzz(i) = zero
301 signzx(i) = zero
302 signyz(i) = zero
303 ELSE IF(uvar(i,12) < one) THEN
304 uvar(i,12)= exp(-(time - uvar(i,11))/tmax)
305 IF(uvar(i,12) < em02)uvar(i,12) = zero
306 signzz(i) = uvar(i,7)*uvar(i,12)
307 signyz(i) = uvar(i,9)*uvar(i,12)
308 signzx(i) = uvar(i,10)*uvar(i,12)
309 IF( uvar(i,12) == zero )THEN
310c NOFF(I) = NOFF(I) + 1
311 nindx=nindx+1
312 indx(nindx)=i
313 IF (int(noff(i))==npt0 .OR. npt0 == 1)THEN
314c NINDX=NINDX+1
315c INDX(NINDX)=I
316c OFF(I) = FOUR_OVER_5
317 ENDIF
318 ENDIF
319c
320 ELSE
321C
322C direction 33
323C
324 dam = uvar(i,1)
325 sig = half*(signzz(i) + abs(signzz(i)))
326 yd3 = k3*(one - dam)**2
327 yd3 = half*sig*sig/max(yd3, em20)
328 yd3 = max(yd3, uvar(i,2))
329 uvar(i,2) = yd3
330C
331C direction 32
332C
333 sig = signyz(i)
334 yd2 = k2*(one - dam)**2
335 yd2 = half*sig*sig/max(yd2, em20)
336 yd2 = max(yd2, uvar(i,3))
337 uvar(i,3) = yd2
338C
339C direction 13
340C
341 sig = signzx(i)
342 yd1 = k1*(one - dam)**2
343 yd1 = half*sig*sig/max(yd1, em20)
344 yd1 = max(yd1, uvar(i,4))
345 uvar(i,4) = yd1
346C
347C compute new damage
348C
349 yd = yd3 + gama1*yd1 + gama2*yd2
350 delta = sqrt(yd) - y0
351 delta = half*(delta + abs(delta))
352 w = delta /(yc - y0)
353 cc = w - dam
354 cc = half*(cc + abs(cc))
355 fac = k*timestep/a
356 dam = dam + fac*(one - exp(-a*cc))
357 uvar(i,1) = dam
358 IF(dam >= one )THEN
359 uvar(i,7) = signzz(i)
360 uvar(i,9) = signyz(i)
361 uvar(i,10) = signzx(i)
362 uvar(i,11) = time
363 uvar(i,12) = four_over_5
364 ENDIF
365 ENDIF
366 ENDIF ! iflag choice
367 ENDIF ! OFF
368 ENDDO
369C
370C-----Maximum Damage storing for output : 0 < DFMAX < 1
371 DO i=1,nel
372 dfmax(i) = min(one,max(dfmax(i),uvar(i,1)))
373 ENDDO
374C--------------------------------------------
375 IF(nindx > 0)THEN
376 DO j=1,nindx
377 i = indx(j)
378 IF(iflag == 1 .OR. iflag == 2) THEN
379#include "lockon.inc"
380 WRITE(iout, 1200) ngl(i),time
381 WRITE(istdo,1200) ngl(i),time
382#include "lockoff.inc"
383 ELSEIF(iflag == 3) THEN
384#include "lockon.inc"
385 WRITE(iout, 3200) ngl(i),time
386 WRITE(istdo,3200) ngl(i),time
387#include "lockoff.inc"
388 ENDIF
389 END DO
390 ENDIF
391c
392 IF(nindx0 > 0)THEN
393 DO j=1,nindx0
394 i = indx0(j)
395#include "lockon.inc"
396 WRITE(iout, 1100) ngl(i),ilay,time
397 WRITE(istdo,1100) ngl(i),ilay,time
398#include "lockoff.inc"
399 END DO
400 ENDIF
401C--------------------------------------------
402 1200 FORMAT(1x,'DELETE SOLID ELEMENT (LADEVEZE MODEL) #',i10,1x,
403 .'AT TIME # ',1pe20.13)
404 1100 FORMAT(1x,'FAILURE ELEMENT #',i10,1x,
405 .'IP #',i10,1x, 'AT TIME #:',1pe20.13)
406 3200 FORMAT(1x,'DELAMINATION OF ELEMENT (LADEVEZE MODEL) #',i10,1x,
407 .'AT TIME # ',1pe20.13)
408C--------------------------------------------
409 RETURN
410 END
subroutine fail_ladeveze(nel, nuvar, ilay, npt0, time, timestep, uparam, ngl, off, noff, signxx, signyy, signzz, signxy, signyz, signzx, uvar, nuparam, dfmax, tdele)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21