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,K,L,JJ,ISHELL,NINDX,NINDXP,IADR,LAYXFEM
100 INTEGER INDX(NEL),INDXP(NEL),RFLAG(NEL),RFLAGP(NEL)
101 my_real D1,D2,D3,D4,D5,EPSP0,P,EPSF,SVM,THK_TMP,
102 . DADV,CC,BB,CR,ORM,SS1,SS2,EPSF_MIN
103 CHARACTER (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
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
195 elcrkini(ilay,i) = 1 ! one layer failed(by advancing)
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),ilay,time
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)
278 IF (elcrkini(ilay,i)==0 .AND. dfmax(i)>=one)
THEN
285 ELSEIF (elcrkini(ilay,i) == 2 .AND.
286 . dfmax(i) >= dadv)
THEN
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
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
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))
432 2000
FORMAT(1x,
'FOR SHELL ELEMENT (JOHNS)',i10,1x,
'LAYER',i3,
':',/
433 . 1x,
'STRESS TENSOR SET TO ZERO')
434 2100
FORMAT(1x,
'FOR SHELL ELEMENT (JOHNS)',i10,1x,
'LAYER',i3,
':',/,
435 . 1x,
'STRESS TENSOR SET TO ZERO',1x,
'AT TIME :',1pe12.4)
436 2400
FORMAT(1x,1pg20.13,
' % OF THICKNESS OF SHELL BROKEN ')
437 2410
FORMAT(1x,1pg20.13,
' % OF THICKNESS OF SHELL ',i10,
' BROKEN ')
438 2500
FORMAT(1x,
' LOWER SKIN -> UPPER SKIN ')
439 2600
FORMAT(1x,
' UPPER SKIN -> LOWER SKIN ')
441 3000
FORMAT(1x,
'CRACK INITIALIZATION IN SHELL ELEMENT',i10,1x,
'LAYER',i3)
442 3100
FORMAT(1x,
'CRACK INITIALIZATION IN SHELL ELEMENT',i10,1x,
'LAYER',i3,/
443 . 1x,
'AT TIME :',1pe12.4)
444 3200
FORMAT(1x,
'CRACK ADVANCEMENT IN SHELL ELEMENT',i10,
' LAYER',i3)
445 3300
FORMAT(1x,
'CRACK ADVANCEMENT IN SHELL ELEMENT',i10,
' LAYER',i3/
446 . 1x,
'AT TIME :',1pe12.4)
447 3400
FORMAT(1x,
'DELETE ',a4,
' PHANTOM ELEMENT, SHELL ID=',i10,
' LAYER',i3)
448 3500
FORMAT(1x,
'DELETE ',a4,
' PHANTOM ELEMENT, SHELL ID=',i10,' layer
',I3,/
449 . 1X,'at time :
',1PE12.4)
450 3800 FORMAT(1X,'jc failure in shell
',I10,1X,'layer
',I3,1X,'int point
',I2)
451 3900 FORMAT(1X,'jc failure in shell
',I10,1X,'layer
',I3,1X,'int point
',I2,/
452 . 1X,'at time :
',1PE12.4)
454 4000 FORMAT(1X,'crack initialization in shell element
',I10)
455 4100 FORMAT(1X,'crack initialization in shell element
',I10,1X,'at time :
',1PE12.4)
456 4200 FORMAT(1X,'crack advancement in shell element
',I10)
457 4300 FORMAT(1X,'crack advancement in shell element
',I10,1X,'at time :
',1PE12.4)
458 4400 FORMAT(1X,'delete
',A4,' phantom element, shell
id=
',I10)
459 4500 FORMAT(1X,'delete
',A4,' phantom element, shell
id=
',I10,1X,'at time :
',1PE12.4)
460 4800 FORMAT(1X,'jc failure in shell
',I10,1X,'int point
',I2)
461 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)