32 1 NEL ,NUPARAM ,UPARAM ,NUVAR ,UVAR ,
33 2 TIME ,TENS ,DPLA ,EPSP ,TSTAR ,
34 3 NGL ,IPT ,NPTOT ,NPTT ,NPTTF ,
35 4 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
36 5 OFF ,OFFL ,NOFF ,DFMAX ,TDEL ,
37 6 ELCRKINI ,IXFEM ,IXEL ,ILAY ,IPTT )
47#include "implicit_f.inc"
53#include "com_xfem1.inc"
86 INTEGER NEL, NUPARAM, NUVAR,IXFEM,IXEL,ILAY,NPTT,
88 INTEGER NGL(NEL),ELCRKINI(NXLAYMAX,*),NOFF(NEL)
89 my_real TIME,UPARAM(*),DPLA(NEL),NPTTF(NEL),
90 . EPSP(NEL),TSTAR(NEL),TENS(NEL,5)
94 my_real uvar(nel,nuvar),off(nel),offl(nel),dfmax(nel),tdel(nel),
95 . signxx(nel),signyy(nel),signxy(nel),signyz(nel),signzx(nel)
99 INTEGER I,J,ISHELL,NINDX,NINDXP,IADR,LAYXFEM
100 INTEGER INDX(NEL),INDXP(NEL)
103CHARACTER (LEN=3) :: XCHAR
115 epsf_min = uparam(12)
116 ishell = int(uparam(7))
119 IF (layxfem == 1 .and. ishell == 1) ishell=2
131 tens(i,1) = signxx(i)
132 tens(i,2) = signyy(i)
133 tens(i,3) = signxy(i)
134 tens(i,4) = signyz(i)
135 tens(i,5) = signzx(i)
141 ELSEIF (ixel == 2)
THEN
143 ELSEIF (ixel == 3)
THEN
148 SELECT CASE (layxfem)
153 IF (off(i) == one)
THEN
154 IF (dfmax(i) < one)
THEN
155 p = third*(signxx(i) + signyy(i))
156 svm = sqrt(signxx(i)*signxx(i)
157 . + signyy(i)*signyy(i)
158 . - signxx(i)*signyy(i)
159 . + three*signxy(i)*signxy(i))
160 epsf = d3*p/
max(em20,svm)
161 epsf = (d1 + d2*exp(epsf))*(one
162 . + d4*log(
max(one,epsp(i)/epsp0)))
163 . * (one + d5*tstar(i))
164 epsf =
max(epsf,epsf_min)
165 IF (epsf > zero) dfmax(i) = dfmax(i) + dpla(i)/epsf
168 IF (elcrkini(ilay,i)==0 .AND. dfmax(i) >= one)
THEN
172 noff(i) = noff(i) + 1
173 npttf(i) = npttf(i) + one
175 IF (int(npttf(i)) == nptt)
THEN
178 elcrkini(ilay,i) = -1
181 IF (noff(i) == nptot)
THEN
185 ELSEIF (elcrkini(ilay,i) == 2 .AND. dfmax(i) >= dadv)
THEN
189 noff(i) = noff(i) + 1
190 npttf(i) = npttf(i)+ one
192 IF (int(npttf(i)) == nptt)
THEN
198 IF (noff(i) == nptot)
THEN
203 ELSEIF (dfmax(i) >= one)
THEN
207 npttf(i) = npttf(i) + one
209 IF (int(npttf(i)) == nptt)
THEN
236 IF (rflagp(i) == 1)
WRITE(iout, 3800)ngl(i),ilay,iptt
237 IF (rflagp(i) == 1)
WRITE(istdo,3900)ngl(i),ilay,iptt,time
238#include "lockoff.inc"
246 IF (rflag(i) == 1)
WRITE(iout ,3000) ngl(i),ilay
247 IF (rflag(i) == 1)
WRITE(istdo,3100) ngl(i),ilay,time
249 IF (rflag(i) == -1)
WRITE(iout ,3200) ngl(i),ilay
250 IF (rflag(i) == -1)
WRITE(istdo,3300) ngl(i
252 IF (rflag(i) == 3)
WRITE(iout, 3400)xchar,ngl(i),ilay
253 IF (rflag(i) == 3)
WRITE(istdo,3500)xchar,ngl(i),ilay,time
254#include "lockoff.inc"
261 IF (ishell == 1)
THEN
264 IF (off(i) == one)
THEN
265 p = third*(signxx(i) + signyy(i))
266 svm = sqrt(signxx(i)*signxx(i)
267 . + signyy(i)*signyy(i)
268 . - signxx(i)*signyy(i)
269 . + three*signxy(i)*signxy(i))
270 epsf = d3*p/
max(em20,svm)
271 epsf = (d1 + d2*exp(epsf))*(one
272 . + d4*log(
max(one,epsp(i)/epsp0)))
273 . * (one + d5*tstar(i))
274 epsf =
max(epsf,epsf_min)
275 IF (epsf > zero) dfmax(i) = dfmax(i) + dpla(i)/epsf
278 IF (elcrkini(ilay,i)==0 .AND. dfmax(i)>=one)
THEN
279 elcrkini(ilay,i) = -1
285 ELSEIF (elcrkini(ilay,i) == 2 .AND.
286 . dfmax(i) >= dadv)
THEN
287 elcrkini(ilay,i) = 1 ! advancement
294 ELSEIF (dfmax(i) >= one)
THEN
307 WRITE(iout, 4800)ngl(i),iptt
308 WRITE(istdo,4900)ngl(i),iptt,time
310 IF (rflag(i) == 1)
WRITE(iout, 4000) ngl(i)
311 IF (rflag(i) == 1)
WRITE(istdo,4100) ngl(i),time
313 IF (rflag(i) ==-1)
WRITE(iout, 4200) ngl(i)
314 IF (rflag(i) ==-1)
WRITE(istdo,4300) ngl(i),time
316 IF (rflag(i) == 3)
WRITE(iout, 4400) xchar,ngl(i)
317 IF (rflag(i) == 3)
WRITE(istdo,4500) xchar,ngl(i),time
318#include "lockoff.inc"
322 ELSEIF (ishell == 2)
THEN
325 IF (off(i) == one)
THEN
326 IF (dfmax(i) < one)
THEN
327 p = third*(signxx(i) + signyy(i))
328 svm = sqrt(signxx(i)*signxx(i)
329 . + signyy(i)*signyy(i)
330 . - signxx(i)*signyy(i)
331 . + three*signxy(i)*signxy(i))
332 epsf = d3*p/
max(em20,svm)
333 epsf = (d1 + d2*exp(epsf))*(one
334 . + d4*log(
max(one,epsp(i)/epsp0)))
335 . * (one + d5*tstar(i))
336 epsf =
max(epsf,epsf_min)
337 IF (epsf > zero) dfmax(i) = dfmax(i) + dpla(i)/epsf
340 IF (elcrkini(ilay,i)==0 .and. dfmax(i) >= one)
THEN
343 noff(i) = noff(i) + 1
346 IF (noff(i) == nptot)
THEN
349 elcrkini(ilay,i) = -1
354 ELSEIF (elcrkini(ilay,i) == 2 .AND. dfmax(i) >= dadv)
THEN
357 noff(i) = noff(i) + 1
361 IF (noff(i) == nptot)
THEN
370 ELSEIF (dfmax(i) >= one)
THEN
373 noff(i) = noff(i) + 1
375 IF (noff(i) == nptot)
THEN
401 IF (rflagp(i) == 1)
WRITE(iout, 4800)ngl(i),iptt
402 IF (rflagp(i) == 1)
WRITE(istdo,4900)ngl(i),iptt,time
403#include "lockoff.inc"
411 IF (rflag(i) == 1)
WRITE(iout ,4000) ngl(i)
412 IF (rflag(i) == 1)
WRITE(istdo,4100) ngl(i),time
414 IF (rflag(i) == -1)
WRITE(iout, 4200) ngl(i)
415 IF (rflag(i) == -1)
WRITE(istdo,4300) ngl(i),time
417 IF (rflag(i) == 3)
WRITE(iout, 4400) xchar,ngl(i)
418 IF (rflag(i) == 3)
WRITE(istdo,4500) xchar,ngl(i),time
419#include "lockoff.inc"
429 dfmax(i) =
min(one,dfmax(i))
433 3000
FORMAT(1x,
'CRACK INITIALIZATION IN SHELL ELEMENT',i10,1x,
'LAYER',i3)
434 3100
FORMAT(1x,
'CRACK INITIALIZATION IN SHELL ELEMENT',i10,1x,
'LAYER',i3,/
435 . 1x,
'AT TIME :',1pe12.4)
436 3200
FORMAT(1x,
'CRACK ADVANCEMENT IN SHELL ELEMENT',i10,
' LAYER',i3)
437 3300
FORMAT(1x,
'CRACK ADVANCEMENT IN SHELL ELEMENT',i10,
' LAYER',i3/
438 . 1x,
'AT TIME :',1pe12.4)
439 3400
FORMAT(1x,
'DELETE ',a4,
' PHANTOM ELEMENT, SHELL ID=',i10,
' LAYER',i3)
440 3500
FORMAT(1x,
'DELETE ',a4,
' PHANTOM ELEMENT, SHELL ID=',i10,
' LAYER',i3,/
441 . 1x,
'AT TIME :',1pe12.4)
442 3800
FORMAT(1x,
'JC FAILURE IN SHELL',i10,1x,
'LAYER',i3,1x,
'INT POINT',i2)
443 3900
FORMAT(1x,
'JC FAILURE IN SHELL',i10,1x,
'LAYER',i3,1x,
'INT POINT',i2,/
444 . 1x,
'AT TIME :',1pe12.4)
446 4000
FORMAT(1x,
'CRACK INITIALIZATION IN SHELL ELEMENT',i10)
447 4100
FORMAT(1x,
'CRACK INITIALIZATION IN SHELL ELEMENT',i10,1x,
'AT TIME :',1pe12.4)
448 4200
FORMAT(1x,
'CRACK ADVANCEMENT IN SHELL ELEMENT',i10)
449 4300
FORMAT(1x,
'CRACK ADVANCEMENT IN SHELL ELEMENT',i10,1x,
'AT TIME :',1pe12.4)
450 4400
FORMAT(1x,
'DELETE ',a4,
' PHANTOM ELEMENT, SHELL ID=',i10)
451 4500
FORMAT(1x,
'DELETE ',a4,
' PHANTOM ELEMENT, SHELL ID=',i10,1x,
'AT TIME :',1pe12.4)
452 4800
FORMAT(1x,
'JC FAILURE IN SHELL',i10,1x,
'INT POINT',i2)
453 4900
FORMAT(1x,
'JC FAILURE IN SHELL',i10,1x,
'INT POINT',i2,1x,
'AT TIME :',1pe12.4)
subroutine fail_johnson_xfem(nel, nuparam, uparam, nuvar, uvar, time, tens, dpla, epsp, tstar, ngl, ipt, nptot, nptt, npttf, signxx, signyy, signxy, signyz, signzx, off, offl, noff, dfmax, tdel, elcrkini, ixfem, ixel, ilay, iptt)