34 1 NEL ,NUPARAM ,NUVAR ,UPARAM ,UVAR ,
35 2 TIME ,TIMESTEP ,SSP ,ALDT ,FWAVE_EL ,
36 3 TDEL1 ,TDEL2 ,OFF ,OFFLY ,FOFF ,
37 4 SIGNXX ,SIGNYY ,SIGNXY ,DFMAX ,NGL ,
38 5 ILAY ,IPT ,NPT ,CRKDIR ,DADV ,
50#include
"implicit_f.inc"
76 INTEGER ,
INTENT(IN) :: NEL,NUPARAM,NUVAR,ILAY,IPT,NPT
77 INTEGER ,
INTENT(INOUT) :: DMG_FLAG
78 INTEGER,
DIMENSION(NEL) ,
INTENT(IN)
79INTEGER ,
DIMENSION(NEL) ,
INTENT(INOUT) :: ,FOFF
81 my_real :: TIME,TIMESTEP,TRELAX
82 my_real,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
83 my_real,
DIMENSION(NEL) ::
84 . signxx,signyy,signxy
85 my_real ,
DIMENSION(NEL,2)INTENT(OUT) :: crkdir
86 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: off,dfmax,dadv
87 my_real ,
DIMENSION(NEL,NUVAR),
TARGET,
INTENT(INOUT) :: uvar
91 INTEGER I,J,NINDXF1,NINDXF2,NINDXD1,NINDXD2,IDEB,IMOD,ISRATE,
93 INTEGER ,
DIMENSION(NEL) :: INDXF1,INDXF2,INDXD1,INDXD2,RFLAG
95 my_real SIGMAX,AA,BB,CC,CR,COSX,SINX,S1,S2,S3,K_IC,K_TH,
96 . GEORED,CR_FOIL,CR_AIR,CR_CORE,CR_EDGE,ALPHA,ALPHAI,BETA,
97 . kres1,kres2,exp_n,exp_m,v0,vc,reflen,dmg1,dmg2,dmg3,tanphi
98 my_real ,
DIMENSION(NEL) :: tpropg,ai,formf,sigp_akt,dam1,dam2,
99 . sigp1,sigp2,sigdt1,sigdt2,sig_dtf1,sig_dtf2,sigp_min,sigp_max,
100 . sp1,sp2,sp3,sin2,cos2,cosi,tfact1,tfact2,cr_len,cr_depth,cr_ang
101 my_real,
DIMENSION(:),
POINTER :: dir1,dir2
145 imod = nint(uparam(15))
146 israte = nint(uparam(16))
147 ideb = nint(uparam(17))
148 iside = nint(uparam(18))
152 itglass = nint(uparam(22))
154 IF (trelax > 0) dmg_flag = 1
156 exp_m = one / (one + exp_n)
158 sigp_min(1:nel) = uvar(1:nel,5)
159 sigp_max(1:nel) = uvar(1:nel,6)
160 formf(1:nel) = uvar(1:nel,7)
161 ai(1:nel) = uvar(1:nel,8)
162 sigp_akt(1:nel) = uvar(1:nel,9)
163 dam1(1:nel) = uvar(1:nel,11)
164 dam2(1:nel) = uvar(1:nel,12)
168 IF (itglass == 1 .and. (ipt == 1 .or. ipt == npt))
THEN
170 . nel ,nuparam ,nuvar ,time ,timestep ,
171 . uparam ,ngl ,signxx ,signyy ,signxy ,
172 . uvar ,off ,ipt ,nindxf1 ,indxf1 ,
175 ELSE IF (time == zero)
THEN
183 IF (fwave_el(i) > 0)
THEN
184 dadv(i) =
min(one, geored / sqrt(aldt(i)/reflen) )
187 ELSE IF (dadv(i) < one)
THEN
189 ELSE IF (dadv(i) == one)
THEN
192 tpropg(i) = aldt(i) /
min(vc,ssp(i))
193 tpropg(i) =
max(tpropg(i), timestep)
204 cr = sqrt(bb**2 + cc**2)
214 IF (israte == 0)
THEN
218 sigdt1(i) = abs(sigp1(i) - uvar(i,1)) /
max(timestep, em20)
219 sigdt2(i) = abs(sigp2(i) - uvar(i,2)) /
max(timestep, em20)
220 sigdt1(i) = alpha * sigdt1(i) + alphai * uvar(i,3)
221 sigdt2(i) = alpha * sigdt2(i) + alphai * uvar(i,4)
227 IF (off(i) == one)
THEN
228 uvar(i,21) = abs(sigp1(i) - uvar(i,1)) /
max(timestep, em20)
232 uvar(i,71) = abs(sigp2(i) - uvar(i,2)) /
max(timestep, em20)
246 IF (ipt == npt)
THEN ! top layer integration point
248 sig_dtf1(i) = sigp_akt(i) *abs(sigdt1(i))**exp_m
249 sig_dtf2(i) = sigp_akt(i) *abs(sigdt2(i))**exp_m
250 sig_dtf1(i) =
max(sig_dtf1(i),sigp_min(i))
251 sig_dtf1(i) =
min(sig_dtf1(i),sigp_max(i))
252 sig_dtf2(i) =
max(sig_dtf2(i),sigp_min(i))
253 sig_dtf2(i) =
min(sig_dtf2(i),sigp_max(i))
255 ELSEIF (ipt < npt)
THEN
257 IF (uvar(i,10) == one)
THEN
258 sig_dtf1(i) = sigp_akt(i)*abs(sigdt1(i))**exp_m
259 sig_dtf2(i) = sigp_akt(i)*abs(sigdt2(i))**exp_m
260 sig_dtf1(i) =
max(sig_dtf1(i),sigp_min(i))
261 sig_dtf1(i) =
min(sig_dtf1(i),sigp_max(i))
262 sig_dtf2(i) =
max(sig_dtf2(i),sigp_min
263 sig_dtf2(i) =
min(sig_dtf2(i),sigp_max(i))
265 sig_dtf1(i) = sigp_akt(i)*abs(sigdt1(i))**exp_m
266 sig_dtf2(i) = sigp_akt(i)*abs(sigdt2(i))**exp_m
267 sig_dtf1(i) =
max(sig_dtf1(i),sigp_min(i))
269 sig_dtf2(i) =
max(sig_dtf2(i),sigp_min(i))
270 sig_dtf2(i) =
min(sig_dtf2(i),sigp_max(i))
272 sig_dtf1(i) = sigp_max(i)
273 sig_dtf2(i) = sigp_max(i)
279 sig_dtf1(i) = sig_dtf1(i)*dadv(i)
280 sig_dtf2(i) = sig_dtf2(i)*dadv(i)
286 IF (off(i) == one)
THEN
287 IF (tdel1(i) == zero)
THEN
288 IF (sigp1(i) > sig_dtf1(i) .and. uvar(i,15) == one)
THEN
295 IF (tdel1(i) > zero)
THEN
296 tfact1(i) = (time - tdel1(i)) / tpropg(i)
297 tfact1(i) =
min(one, tfact1(i))
298 IF (uvar(i,11) > zero .and. tfact1(i) == one)
THEN
301 dfmax(i) =
max(dfmax(i), tfact1(i))
311 IF (nindxf1 > 0)
THEN
312#include "vectorize.inc"
316 s2 = sigp1(i) - signxx(i)
317 cr = sqrt(s1**2 + s2**2)
319 crkdir(i,1) = s1 / cr
320 crkdir(i,2) = s2 / cr
321 ELSEIF (s1 > s2)
THEN
333 IF (nindxd1 > 0)
THEN
334#include "vectorize.inc"
342 cos2(i) = cosx * cosx
343 sin2(i) = sinx * sinx
344 cosi(i) = cosx * sinx
346 sp1(i) = cos2(i)*s1 + sin2(i)*s2 + two*cosi(i)*s3
347 sp2(i) = sin2(i)*s1 + cos2(i)*s2 - two*cosi(i)*s3
348 sp3(i) = cosi(i)*(s2 - s1) + (cos2(i) - sin2(i))*s3
350 beta =
max(zero , one - tfact1(i))
351 dmg1 =
max(kres1, one - (one - kres1) * tfact1(i))
352 dmg3 =
min(one, 0.6 + 0.4 * beta)
355 sp1(i) = sp1(i) * dmg1
356 sp3(i) = sp3(i) * dmg3
358 signxx(i) = cos2(i)*sp1(i) + sin2
359 signyy(i) = sin2(i)*sp1(i) + cos2(i)*sp2(i) + two*cosi(i)*sp3(i)
360 signxy(i) = cosi(i)*(sp1(i) - sp2(i)) + (cos2(i) - sin2(i))*sp3(i)
367 IF (off(i) == one)
THEN
368 IF (tdel1(i) > zero .and. tdel2(i) == zero)
THEN
369 IF (sp2(i) > sig_dtf2(i))
THEN
371 nindxf2 = nindxf2 + 1
376 IF (tdel2(i) > zero)
THEN
377 tfact2(i) = (time - tdel2(i)) / tpropg(i)
378 tfact2(i) =
min(one, tfact2(i))
379 IF (uvar(i,12) > zero .and. tfact2(i) == one)
THEN
380 IF (offly(i) == 0)
THEN
382 ELSE IF (offly(i) == -1)
THEN
392 IF (nindxd2 > 0)
THEN
393#include "vectorize.inc"
396 beta =
max(zero , one - tfact2
397 dmg2 =
max(kres2, one - (one - kres2) * tfact2(i))
398 dmg3 =
min(one, 0.6 + 0.4 * beta)
401 sp2(i) = sp2(i) * dmg2
402 sp3(i) = sp3(i) * dmg3
404 signxx(i) = cos2(i)*sp1(i) + sin2(i)*sp2(i) - two*cosi(i)*sp3(i)
405 signyy(i) = sin2(i)*sp1(i) + cos2(i)*sp2(i) + two*cosi(i)*sp3(i)
406 signxy(i) = cosi(i)*(sp1(i) - sp2(i)) + (cos2(i) - sin2(i))*sp3(i)
407 IF (dmg2 == zero)
THEN
416 uvar(i,3) = sigdt1(i)
417 uvar(i,4) = sigdt2(i)
422 IF (nindxf1 > 0)
THEN
426 IF (rflag(i) == 1)
THEN
428 WRITE(iout, 3000) ngl(i),ilay,ipt
429 WRITE(istdo,3100) ngl(i),ilay,ipt,time
430 ELSEIF (rflag(i) == -1)
THEN
432 WRITE(iout, 4000) ngl(i),ilay,ipt
433 WRITE(istdo,4100) ngl(i),ilay,ipt,time
435 IF (ideb == 1 .and. abs(rflag(i)) == 1)
THEN
436 tanphi = atan(crkdir(i,2) / sign(
max(abs(crkdir(i,1)),em20),crkdir(i,1)))
437 WRITE(iout,3500) ngl(i),tanphi,dadv(i)
438 WRITE(iout,3700) ngl(i),sigp1(i),sigdt1(i),sig_dtf1(i)
440#include "lockoff.inc"
444 IF (nindxf2 > 0)
THEN
448 WRITE(iout, 5000) ngl(i),ilay,ipt
449 WRITE(istdo,5100) ngl(i),ilay,ipt,time
450 IF (ideb == 1 .and. abs(rflag(i)) == 1)
THEN
451 WRITE(iout,3600) ngl(i),dadv(i)
452 WRITE(iout,3800) ngl(i),sigp2(i),sigdt2(i),sig_dtf2(i)
454#include "lockoff.inc"
458 3000
FORMAT(1x,
'FAILURE INITIALIZATION IN SHELL',i10,1x,
' 1ST DIR, LAYER',i2,1x,
'INT POINT',i2)
459 3100
FORMAT(1x,
'FAILURE INITIALIZATION IN SHELL',i10,1x,
' 1ST DIR, LAYER',i2,1x,
'INT POINT',i2,
460 . 1x,
'AT TIME ',1pe12.4)
461 3500
FORMAT(10x,
'SHELL ',i10,
' MAJ ANGLE= ',1pe12.4,
' STRESS REDUCTION= ',1pe12.4)
462 3600
FORMAT(10x,
'SHELL ',i10,
' STRESS REDUCTION= ',1pe12.4)
463 3700
FORMAT(10x,
'SHELL ',i10,
' SIGP1=',1pe12.4,
' SIGDT1=',1pe12.4,
' SIG_DTF1=',1pe12.4)
464 3800
FORMAT(10x,
'SHELL ',i10,
' SIGP2=',1pe12.4,
' SIGDT2=',1pe12.4,
' SIG_DTF2=',1pe12.4)
465 4000
FORMAT(1x,
'FAILURE ADVANCEMENT IN SHELL',i10,1x,
' 1ST DIR, LAYER',i2,1x,
'INT POINT',i2)
466 4100
FORMAT(1x,
'FAILURE ADVANCEMENT IN SHELL',i10,1x,
' 1ST DIR, LAYER',i2,1x,
'INT POINT',i2,
467 . 1x,
'AT TIME ',1pe12.4)
468 5000
FORMAT(1x,
'FAILURE IN SHELL',i10,1x,
' 2ND DIR, LAYER',i2,1x,
'INT POINT',i2)
469 5100
FORMAT(1x,
'FAILURE IN SHELL',i10,1x,
' 2ND DIR, LAYER',i2,1x,
'INT POINT',i2,
470 . 1x,
'AT TIME ',1pe12.4)