30 1 NEL ,NUPARAM ,NUVAR ,UPARAM ,UVAR ,
31 2 TIME ,TIMESTEP ,SSP ,ALDT ,CRKLEN ,
32 3 ELCRKINI ,TDEL ,OFF ,OFFLY ,
33 4 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
34 5 NGL ,IXEL ,ILAY ,IPT ,NPT ,
35 6 IXFEM ,IORTH ,DIR_A ,DIR1_CRK ,DIR2_CRK ,
43#include "implicit_f.inc"
49#include "com_xfem1.inc"
74 INTEGER NEL,NUPARAM,NUVAR,IXFEM,IORTH,IXEL,ILAY,IPT,NPT
75 INTEGER ELCRKINI(NXLAYMAX,NEL),NGL(NEL)
77 my_real,
DIMENSION(NEL) :: SSP,ALDT,TDEL,CRKLEN,
78 . SIGNXX,SIGNYY,SIGNZZ,SIGNXY,SIGNYZ,SIGNZX
79 my_real UPARAM(NUPARAM),DIR_A(NEL,2),CRKDIR(NEL,2),(NXLAYMAX,MVSIZ),
80 . DIR2_CRK(NXLAYMAX,NEL)
81 TARGET :: dir1_crk,dir2_crk
86 my_real uvar(nel,nuvar),off(nel)
90 INTEGER I,J,NINDX,NINDXD,IDEB,ISRATE
91 INTEGER ,
DIMENSION(NEL) :: INDX,INDXD,RFLAG
92 my_real sigmax,aa,bb,cc,s1,s2,s3,cr,k_ic,k_th,v0,vc,tfact,reflen,
93 . cosi,cosx,cosy,sinx,siny,cos2,sin2,dmg1,dmg3,
94 . sp1,sp2,sp3,geored,cr_foil,cr_air,cr_core,cr_edge,
alpha,alphai,exp_n,exp_m
95 my_real,
DIMENSION(NEL) :: dadv,tpropg,ai,formf,sigp_akt,dmg_scale,
96 . sigp1,sigp2,sigdt1,sigdt2,sig_dtf1,sig_dtf2,sigp_min,sigp_max
97 my_real,
DIMENSION(:),
POINTER :: dir1,dir2
98 CHARACTER (LEN=3) :: XCHAR
125 ELSEIF (ixel == 2)
THEN
127 ELSEIF (ixel == 3)
THEN
150 reflen = nint(uparam(14))
151 israte = nint(uparam(16))
152 ideb = nint(uparam(17))
155 exp_m = one / (one + exp_n)
159 dadv(i) =
min(one, geored / sqrt
160 tpropg(i) = crklen(i) /
min(vc,ssp(i))
161 tpropg(i) =
max(tpropg(i), timestep)
166 IF (time == zero)
then
169 IF (uvar(i,10) == one)
THEN
176 ELSEIF (ipt == npt)
THEN
182 sigp_akt(i) = (two*(exp_n + one)*k_ic**exp_n) /
183 . ((exp_n - two)*v0*(formf(i)*sqrt(pi))**exp_n*
185 sigp_akt(i) = sigp_akt(i)**exp_m
187 sigp_min(i) = k_th / (formf(i
188 sigp_max(i) = k_ic / (formf(i)*sqrt(pi*ai(i)))
189 uvar(i,5) = sigp_min(i)
190 uvar(i,6) = sigp_max(i)
193 uvar(i,9) = sigp_akt(i)
196 sigp_min(1:nel) = uvar(1:nel,5)
197 sigp_max(1:nel) = uvar(1:nel,6)
198 formf(1:nel) = uvar(1:nel,7)
199 ai(1:nel) = uvar(1:nel,8)
200 sigp_akt(1:nel) = uvar(1:nel,9)
206 aa = (signxx(i) + signyy(i))*half
207 bb = (signxx(i) - signyy(i))*half
209 cr = sqrt(bb**2 + cc**2)
226 IF (israte == 0)
THEN
229 sigdt1(i) = abs(sigp1(i) - uvar(i,1)) /
max(timestep, em20)
230 sigdt2(i) = abs(sigp2(i) - uvar(i
231 sigdt1(i) =
alpha * sigdt1(i) + alphai * uvar(i,3)
232 sigdt2(i) =
alpha * sigdt2(i) + alphai * uvar(i,4)
237 IF (off(i) == one)
THEN
238 sigdt1(i) = abs(sigp1(i) - uvar(i,1)) /
max(timestep, em20)
239 uvar(i,21) = sigdt1(i)
241 sigdt1(i) = sigdt1(i) + uvar(i,21+j)
243 sigdt1(i) = sigdt1(i) / 50
245 uvar(i,j) = uvar(i,j-1)
248 sigdt2(i) = abs(sigp2(i) - uvar(i,2)) /
max(timestep, em20)
249 uvar(i,71) = sigdt2(i)
251 sigdt2(i) = sigdt2(i) + uvar(i,71+j)
253 sigdt2(i) = sigdt2(i) / 50
255 uvar(i,j) = uvar(i,j-1)
268 sig_dtf1(i) = sigp_akt(i) *abs(sigdt1(i))**exp_m
269 sig_dtf2(i) = sigp_akt(i) *abs(sigdt2(i))**exp_m
270 sig_dtf1(i) =
max(sig_dtf1(i),sigp_min(i))
271 sig_dtf1(i) =
min(sig_dtf1(i),sigp_max(i))
272 sig_dtf2(i) =
max(sig_dtf2(i),sigp_min(i))
273 sig_dtf2(i) =
min(sig_dtf2(i),sigp_max(i))
275 ELSEIF (ipt < npt)
THEN
277 IF (uvar(i,10) == one)
THEN
278 sig_dtf1(i) = sigp_akt(i)*abs(sigdt1(i))**exp_m
279 sig_dtf2(i) = sigp_akt(i)*abs(sigdt2(i))**exp_m
280 sig_dtf1(i) =
max(sig_dtf1(i),sigp_min(i))
281 sig_dtf1(i) =
min(sig_dtf1(i),sigp_max(i))
282 sig_dtf2(i) =
max(sig_dtf2(i),sigp_min(i))
283 sig_dtf2(i) =
min(sig_dtf2(i),sigp_max(i))
285 sig_dtf1(i) = sigp_max(i)
286 sig_dtf2(i) = sigp_max(i)
293 IF (off(i) == one)
THEN
294 IF (elcrkini(ilay,i) == 0)
THEN
296 IF (sigp1(i) > sig_dtf1(i) .and. tdel(i) == zero
THEN
300 elcrkini(ilay,i) = -5
305 IF (tdel(i) > 0)
THEN
306 tfact = (time - tdel(i)) / tpropg(i)
307 tfact =
min(one, tfact)
308 dmg_scale(i) = one - tfact
311 IF (tfact >= one)
THEN
312 elcrkini(ilay,i) = -1
319 dir1_crk(ilay,i) = cosx*cosy - sinx*siny
320 dir2_crk(ilay,i) = cosx*siny + sinx*cosy
322 dir1_crk(ilay,i) = crkdir(i,1)
323 dir2_crk(ilay,i) = crkdir(i,2)
329 ELSEIF (elcrkini(ilay,i) == 2)
THEN
332 sig_dtf1(i) = sig_dtf1(i)*dadv(i)
333 sig_dtf2(i) = sig_dtf2(i)*dadv(i)
334 sig_dtf1(i) =
max(sig_dtf1(i),sigp_min(i)*dadv(i))
335 sig_dtf1(i) =
min(sig_dtf1(i),sigp_max(i)*dadv(i))
336 sig_dtf2(i) =
max(sig_dtf2(i),sigp_min(i)*dadv(i))
337 sig_dtf2(i) =
min(sig_dtf2(i),sigp_max(i)*dadv(i))
338 IF (sigp1(i) > sig_dtf1(i) .and. tdel(i) == zero .and. offly(i) == 1)
THEN
346 IF (offly(i) == 0)
THEN
347 tfact = (time - tdel(i)) / tpropg(i)
350 IF (tfact >= one)
THEN
359 dir1_crk(ilay,i) = cosx*cosy - sinx*siny
360 dir2_crk(ilay,i) = cosx*siny + sinx*cosy
362 dir1_crk(ilay,i) = crkdir(i,1)
363 dir2_crk(ilay,i) = crkdir(i,2)
366 dmg_scale(i) = one - tfact
379 s2 = sigp1(i) - signxx(i)
380 cr = sqrt(s1**2 + s2**2)
382 crkdir(i,1) = s1 / cr
383 crkdir(i,2) = s2 / cr
384 ELSEIF (s1 > s2)
THEN
400 dir1_crk(ilay,i) = cosx*cosy - sinx*siny
401 dir2_crk(ilay,i) = cosx*siny + sinx*cosy
406 dir1_crk(ilay,i) = crkdir(i,1)
407 dir2_crk(ilay,i) = crkdir(i,2)
426 sp1 = cos2*s1 + sin2*s2 + two*cosi*s3
427 sp2 = sin2*s1 + cos2*s2 - two*cosi*s3
428 sp3 = cosi*(s2 - s1) + (cos2 - sin2)*s3
431 dmg3 =
min(one, 0.6 + 0.4 * dmg1)
436 signxx(i) = cos2*sp1 + sin2*sp2 - two*cosi*sp3
437 signyy(i) = sin2*sp1 + cos2*sp2 + two*cosi*sp3
438 signxy(i) = cosi*(sp1 - sp2) + (cos2 - sin2)*sp3
444 write(iout,
'(A,I10,3E16.9)')
'DAMAGE ELEMENT N, CRLEN,TPROPG,DMG_SCALE=',
445 . ngl(i),crklen(i),tpropg(i),dmg_scale(i)
450 ELSEIF (ixel > 0)
THEN
452 IF (off(i) == one)
THEN
453 IF (elcrkini(ilay,i) == 2)
THEN
459 sigp_min(i) = k_th / (sqrt(pi*cr_foil))
460 sigp_max(i) = k_ic / (sqrt(pi*cr_foil))
461 sig_dtf1(i) = sigp_max(i) * dadv(i)
462 IF (sigp1(i) > sig_dtf1(i))
THEN
478 uvar(i,3) = sigdt1(i)
479 uvar(i,4) = sigdt2(i)
486 WRITE(iout, 3000)ngl(i),ilay,ipt
487 WRITE(istdo,3100)ngl(i),ilay,ipt,time
489 IF (rflag(i) == 1)
WRITE(iout ,4000)
490 IF (rflag(i) == 1)
WRITE(istdo,4000)
492 IF (rflag(i) == -1)
WRITE(iout, 4200)
493 IF (rflag(i) == -1)
WRITE(istdo,4200)
494 if (ideb==1 .and. abs(rflag(i))==1)
then
495 write(iout,
'(A,5E16.9)')
'SIGP1,SIG_DTF1,SIGP_AKT,SIGP_MAX,SIGDT1=',
496 . sigp1(i),sig_dtf1(i),sigp_akt(i),sigp_max(i),sigdt1(i)
497 write(iout,
'(A,5E16.9)')
'SIGP2,SIG_DTF2,SIGP_AKT,SIGP_MIN,SIGDT2=',
498 . sigp2(i),sig_dtf2(i),sigp_akt(i),sigp_min(i),sigdt2(i)
499 if (rflag(i)==-1)
then
500 write(iout,
'(A,E16.9)')
'advancement => crit reduction, DADV =',dadv(i)
504 IF (rflag(i) == 3)
WRITE
505 IF (rflag(i) == 3)
WRITE(istdo,4500) xchar,ngl(i),time
506#include "lockoff.inc"
510 3000
FORMAT(1x,
'FAILURE IN SHELL',i10,1x,
'LAYER',i2,1x,
'INT POINT',i2)
511 3100
FORMAT(1x,
'FAILURE IN SHELL''LAYER',i2,1x,
'INT POINT',i2,
512 . 1x,
'AT TIME ',1pe12.4)
513 4000
FORMAT(10x,
'CRACK INITIALIZATION')
514 4200
FORMAT(10x,
'CRACK ADVANCEMENT')
515 4400
FORMAT(1x,
'DELETE ',a4,
' PHANTOM ELEMENT, SHELL ID=',i10
516 4500
FORMAT(1x,
'DELETE ',a4,
' PHANTOM ELEMENT, SHELL ID=',i10,/
517 . 1x,
'AT TIME :',1pe12.4)