31 1 NEL ,NUPARAM ,NUVAR ,UPARAM ,UVAR ,NGL ,
32 2 NPG ,IPG ,ILAY ,OFF ,LOFF ,NOFF ,
33 3 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
34 4 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
35 5 TIME ,TDEL ,DFMAX ,ALDT ,DMG_SCALE)
39#include "implicit_f.inc"
48 INTEGER,
INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,NPG,ILAY
49 INTEGER,
DIMENSION(NEL),
INTENT(IN) :: NGL
50 my_real,
INTENT(IN) :: TIME
51 my_real,
DIMENSION(NEL),
INTENT(IN) :: DEPSXX,DEPSYY,
52 . DEPSZZ,DEPSXY,DEPSYZ,DEPSZX,SIGNXX,SIGNYY,SIGNZZ,
53 . signxy,signyz,signzx,aldt
54 my_real,
DIMENSION(NUPARAM),
INTENT(IN) :: uparam
58 INTEGER,
DIMENSION(NEL),
INTENT(INOUT) :: NOFF
59 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: dfmax,tdel,off,loff
60 my_real,
DIMENSION(NEL,6),
INTENT(INOUT) :: dmg_scale
61 my_real,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) :: uvar
65 INTEGER I,J,NINDX,NINDX2,FAILMOD,MODE,ISHAP11T,ISHAP11C,
66 . ishap22t,ishap22c,ishap33t,ishap33c,ishap12t,ishap12c,
67 . ishap23t,ishap23c,ishap31t,ishap31c,failip,nmod
68 INTEGER ,
DIMENSION(NEL) :: INDX, INDX2
69 INTEGER ,
DIMENSION(NEL,12) :: FMODE
70 my_real dam(nel,12),ener(nel,12),le(nel)
71 my_real sigma_11t,sigma_11c,sigma_22t,sigma_22c,sigma_33t
72 . sigma_33c,sigma_12t,sigma_12c,sigma_23t,sigma_23c,
73 . sigma_31t,sigma_31c,g_11t,g_11c,g_22t,g_22c,g_33t,g_33c,
74 . g_12t,g_12c,g_23t,g_23c,g_31t,g_31c
80 failip = nint(uparam(2))
81 failip =
min(failip,npg)
89 sigma_12c = uparam(10)
90 sigma_23t = uparam(11)
91 sigma_23c = uparam(12)
92 sigma_31t = uparam(13)
93 sigma_31c = uparam(14)
107 ishap11c = nint(uparam(28))
108 ishap22t = nint(uparam(29))
109 ishap22c = nint(uparam(30))
111 ishap33c = nint(uparam(32))
112 ishap12t = nint(uparam(33))
113 ishap12c = nint(uparam(34))
114 ishap23t = nint(uparam(35))
115 ishap23c = nint(uparam(36))
116 ishap31t = nint(uparam(37))
118 nmod = nint(uparam(39))
121 IF (uvar(1,25) == zero)
THEN
122 uvar(1:nel,25) = aldt(1:nel)
124 le(1:nel) = uvar(1:nel,25)
132 ener(i,j) = uvar(i,j+12)
148 IF ((loff(i) == one).AND.(off(i) == one))
THEN
156 IF (signxx(i) > sigma_11t
THEN
158 IF (ishap11t == 1)
THEN
159 dam(i,mode) = dam(i,mode) + le(i)*depsxx(i)*sigma_11t/(two*g_11t)
160 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
162 ELSEIF (ishap11t == 2)
THEN
163 ener(i,mode) = ener(i,mode) + signxx(i)*le(i)*depsxx(i)
164 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
165 dam(i,mode) = (one - exp(-ener(i,mode)/g_11t))
166 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
168 dam(i,mode) =
min(dam(i,mode),one)
170 dfmax(i) =
max(dfmax(i),dam(i,mode))
173 IF (dam(i,mode) >= one)
THEN
174 failmod = failmod + 1
180 IF (signyy(i) > sigma_22t .AND. signyy(i) > zero .AND. dam(i
THEN
182 IF (ishap22t == 1)
THEN
183 dam(i,mode) = dam(i,mode) + le(i)*depsyy(i)*sigma_22t/(two*g_22t)
184 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
186 ELSEIF (ishap22t == 2)
THEN
187 ener(i,mode) = ener(i,mode) + signyy(i)*le(i)*depsyy(i)
188 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
189 dam(i,mode) = (one - exp(-ener(i,mode)/g_22t))
190 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
192 dam(i,mode) =
min(dam(i,mode),one)
194 dfmax(i) =
max(dfmax(i),dam(i,mode))
197 IF (dam(i,mode) >= one)
THEN
198 failmod = failmod + 1
204 IF (signxy(i) > sigma_12t .AND. signxy(i) > zero .AND. dam(i,mode) < one)
THEN
206 IF (ishap12t == 1)
THEN
207 dam(i,mode) = dam(i,mode) + le(i)*depsxy(i)*sigma_12t/(four*g_12t)
208 dam(i,mode) =
max(dam(i,mode),uvar(i,mode
210 ELSEIF (ishap12t == 2)
THEN
211 ener(i,mode) = ener(i,mode) + signxy(i)*le(i)*half*depsxy(i)
212 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
213 dam(i,mode) = (one - exp(-ener(i,mode)/g_12t))
214 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
216 dam(i,mode) =
min(dam(i,mode),one)
218 dfmax(i) =
max(dfmax(i),dam(i,mode))
221 IF (dam(i,mode) >= one)
THEN
222 failmod = failmod + 1
228 IF (-signxx(i) > sigma_11c .AND. signxx(i) < zero .AND. dam(i,mode) < one)
THEN
230 IF (ishap11c == 1)
THEN
231 dam(i,mode) = dam(i,mode) + le(i)*abs(depsxx(i))*sigma_11c/(two*g_11c)
232 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
234 ELSEIF (ishap11c == 2)
THEN
235 ener(i,mode) = ener(i,mode) + abs(signxx(i))*le(i)*abs(depsxx(i))
236 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
237 dam(i,mode) = (one - exp(-ener(i,mode)/g_11c))
238 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
240 dam(i,mode) =
min(dam(i,mode),one)
242 dfmax(i) =
max(dfmax(i),dam(i,mode))
245 IF (dam(i,mode) >= one)
THEN
246 failmod = failmod + 1
252 IF (-signyy(i) > sigma_22c .AND. signyy(i) < zero .AND. dam(i,mode) < one)
THEN
254 IF (ishap22c == 1)
THEN
255 dam(i,mode) = dam(i,mode) + le(i)*abs(depsyy(i))*sigma_22c/(two*g_22c)
256 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
258 ELSEIF (ishap22c == 2)
THEN
259 ener(i,mode) = ener(i,mode) + abs(signyy(i))*le(i)*abs(depsyy(i))
260 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
261 dam(i,mode) = (one - exp(-ener(i,mode
262 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
264 dam(i,mode) =
min(dam(i,mode),one)
266 dfmax(i) =
max(dfmax(i),dam(i,mode))
269 IF (dam(i,mode) >= one)
THEN
270 failmod = failmod + 1
276 IF (-signxy(i) > sigma_12c .AND. signxy(i) < zero .AND. dam(i,mode) < one)
THEN
278 IF (ishap12c == 1)
THEN
279 dam(i,mode) = dam(i,mode) + le(i)*abs(depsxy(i))*sigma_12c/(four*g_12c)
280 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
282 ELSEIF (ishap12c == 2)
THEN
283 ener(i,mode) = ener(i,mode) + abs(signxy(i))*le(i)*half*abs(depsxy(i))
284 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
285 dam(i,mode) = (one - exp(-ener(i,mode)/g_12c))
286 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
288 dam(i,mode) =
min(dam(i,mode),one)
290 dfmax(i) =
max(dfmax(i),dam(i,mode))
293 IF (dam(i,mode) >= one)
THEN
294 failmod = failmod + 1
300 IF (signzz(i) > sigma_33t .AND. signzz(i) > zero .AND. dam
THEN
302 IF (ishap33t == 1)
THEN
304 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
306 ELSEIF (ishap33t == 2)
THEN
307 ener(i,mode) = ener(i,mode) + signzz(i)*le(i)*depszz(i)
308 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
309 dam(i,mode) = (one - exp(-ener(i,mode)/g_33t))
310 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
312 dam(i,mode) =
min(dam(i,mode),one)
314 dfmax(i) =
max(dfmax(i),dam(i,mode))
317 IF (dam(i,mode) >= one)
THEN
318 failmod = failmod + 1
324 IF (-signzz(i) > sigma_33c .AND. signzz(i) < zero .AND. dam(i,mode) < one
THEN
326 IF (ishap33c == 1)
THEN
327 dam(i,mode) = dam(i,mode) + le(i)*abs(depszz(i))*sigma_33c
328 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
330 ELSEIF (ishap33c == 2)
THEN
331 ener(i,mode) = ener(i,mode) + abs(signzz(i))*le(i)*abs(depszz(i))
332 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
333 dam(i,mode) = (one - exp(-ener(i,mode)/g_33c))
334 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
336 dam(i,mode) =
min(dam(i,mode),one)
338 dfmax(i) =
max(dfmax(i),dam(i,mode))
341 IF (dam(i,mode) >= one)
THEN
342 failmod = failmod + 1
348 IF (signyz(i) > sigma_23t .AND. signyz(i) > zero .AND. dam(i,mode) < one)
THEN
350 IF (ishap23t == 1)
THEN
351 dam(i,mode) = dam(i,mode) + le(i)*depsyz(i)*sigma_23t/(four*g_23t)
352 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
354 ELSEIF (ishap23t == 2)
THEN
355 ener(i,mode) = ener(i,mode) + signyz(i)*le(i)*half*depsyz(i)
356 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
357 dam(i,mode) = (one - exp(-ener(i,mode)/g_23t))
358 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
360 dam(i,mode) =
min(dam(i,mode),one)
361 ! output damage variable
362 dfmax(i) =
max(dfmax(i),dam(i,mode))
365 IF (dam(i,mode) >= one)
THEN
366 failmod = failmod + 1
372 IF (-signyz(i) > sigma_23c .AND. signyz(i) < zero .AND. dam(i,mode) < one)
THEN
374 IF (ishap23c == 1)
THEN
375 dam(i,mode) = dam(i,mode) + le(i)*abs(depsyz(i))*sigma_23c/(four*g_23c)
378 ELSEIF (ishap23c == 2)
THEN
379 ener(i,mode) = ener(i,mode) + abs(signyz(i))*le(i)*half*abs(depsyz(i))
380 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
381 dam(i,mode) = (one - exp(-ener(i,mode)/g_23c))
382 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
384 dam(i,mode) =
min(dam(i,mode),one)
386 dfmax(i) =
max(dfmax(i),dam(i,mode))
389 IF (dam(i,mode) >= one)
THEN
390 failmod = failmod + 1
396 IF (signzx(i) > sigma_31t .AND. signzx(i) > zero .AND. dam(i,mode
THEN
398 IF (ishap31t == 1)
THEN
399 dam(i,mode) = dam(i,mode) + le(i)*depszx(i)*sigma_31t/(four*g_31t)
400 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
402 ELSEIF (ishap31t == 2)
THEN
403 ener(i,mode) = ener(i,mode) + signzx(i)*le(i)*half*depszx(i)
404 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
405 dam(i,mode) = (one - exp(-ener(i,mode)/g_31t))
406 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
408 dam(i,mode) =
min(dam(i,mode),one)
410 dfmax(i) =
max(dfmax(i),dam(i,mode))
413 IF (dam(i,mode) >= one)
THEN
414 failmod = failmod + 1
420 IF (-signzx(i) > sigma_31c .AND. signzx(i) < zero .AND. dam(i,mode) < one)
THEN
422 IF (ishap31c == 1)
THEN
423 dam(i,mode) = dam(i,mode) + le(i)*abs(depszx(i))*sigma_31c
424 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
426 ELSEIF (ishap31c == 2)
THEN
427 ener(i,mode) = ener(i,mode) + abs(signzx(i))*le(i)*half*abs(depszx(i))
428 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+12))
429 dam(i,mode) = (one - exp(-ener(i,mode)/g_31c))
430 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
432 dam(i,mode) =
min(dam(i,mode),one)
434 dfmax(i) =
max(dfmax(i),dam
437 IF (dam(i,mode) >= one)
THEN
438 failmod = failmod + 1
443 IF (failmod >= nmod)
THEN
447 noff(i) = noff(i) + 1
448 IF (noff(i) >= failip)
THEN
462 IF ((loff(i) == one) .AND. (off(i) == one))
THEN
464 IF (signxx(i) >= zero)
THEN
465 dmg_scale(i,1) = one - dam(i,1)
467 dmg_scale(i,1) = one - dam(i,4)
470 IF (signyy(i) >= zero)
THEN
471 dmg_scale(i,2) = one - dam(i,2)
473 dmg_scale(i,2) = one - dam(i,5)
476 IF (signzz(i) >= zero)
THEN
479 dmg_scale(i,3) = one - dam(i,8)
482 IF (signxy(i) >= zero)
THEN
483 dmg_scale(i,4) = one - dam(i,3)
485 dmg_scale(i,4) = one - dam(i,6)
488 IF (signyz(i) >= zero)
THEN
489 dmg_scale(i,5) = one - dam(i,9)
491 dmg_scale(i,5) = one - dam(i,10)
494 IF (signzx(i) >= zero)
THEN
495 dmg_scale(i,6) = one - dam(i,11)
497 dmg_scale(i,6) = one - dam(i,12)
510 uvar(i,j+12) = ener(i,j)
521 WRITE(iout, 1000) ngl(i),ipg,ilay
522 WRITE(istdo,1000) ngl(i),ipg,ilay
523 IF (fmode(i,1) == 1)
WRITE(iout,2000)
'1 - TRACTION XX'
524 IF (fmode(i,2) == 1)
WRITE(iout,2000)
'2 - TRACTION YY'
525 IF (fmode(i,3) == 1)
WRITE(iout,2000)
'3 - POSITIVE SHEAR XY'
526 IF (fmode(i,4) == 1)
WRITE(iout,2000)
'4 - COMPRESSION XX'
527 IF (fmode(i,5) == 1)
WRITE(iout,2000)
'5 - COMPRESSION YY'
528 IF (fmode(i,6) == 1)
WRITE(iout,2000)
'6 - NEGATIVE SHEAR XY'
529 IF (fmode(i,7) == 1)
WRITE(iout,2000)
'7 - TRACTION ZZ'
530 IF (fmode(i,8) == 1)
WRITE(iout,2000)
'8 - COMPRESSION ZZ'
531 IF (fmode(i,9) == 1)
WRITE(iout,2000)
'9 - POSITIVE SHEAR YZ'
532 IF (fmode(i,10) == 1)
WRITE(iout,2000)
'10 - NEGATIVE SHEAR YZ'
533 IF (fmode(i,11) == 1)
WRITE(iout,2000)
'11 - POSITIVE SHEAR ZX'
534 IF (fmode(i,12) == 1)
WRITE(iout,2000)
'12 - NEGATIVE SHEAR ZX'
535#include "lockoff.inc"
543 WRITE(iout, 3000) ngl(i),time
544 WRITE(istdo,3000) ngl(i),time
545#include "lockoff.inc"
549 1000
FORMAT(1x,
'FAILURE (ORTHENERG) OF SOLID ELEMENT ',i10,1x,
',GAUSS PT',
551 2000
FORMAT(1x,
'MODE',1x,a)
552 3000
FORMAT(1x,
'-- RUPTURE OF SOLID ELEMENT : ',i10,1x,
'AT TIME : ',1pe12.4)