32 1 NEL ,NFUNC ,NUPARAM ,NUVAR ,IFUNC ,
33 2 UPARAM ,UVAR ,NPF ,TF ,TIME ,
34 3 NGL ,IPG ,ILAY ,IPT ,EPSP ,
35 4 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
36 5 OFF ,FOFF ,DFMAX ,TDEL ,
37 6 DMG_FLAG ,DMG_SCALE,ALDT ,TSTAR ,ISMSTR )
43#include "implicit_f.inc"
82 INTEGER ,
INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,,IPT,ISMSTR
83 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL
84 my_real ,
INTENT(IN) :: TIME
85 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: OFF,EPSP,ALDT,
86 . EPSXX,EPSYY,EPSXY,EPSYZ,EPSZX,TSTAR
87 my_real,
DIMENSION(NUPARAM) ,
INTENT(IN) :: UPARAM
91 INTEGER ,
INTENT(OUT) :: DMG_FLAG
92 INTEGER ,
DIMENSION(NEL) ,
INTENT(INOUT) :: FOFF
93 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: dfmax
94 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: tdel,dmg_scale
95 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT)
99 INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
100 my_real finter ,tf(*)
113 INTEGER I,J,NINDXD,NINDXF,NINDX1,NINDX2,S_FLAG,SCALE_FLAG,STRDEF,STRFLAG
114 INTEGER ,
DIMENSION(NEL) :: INDXD,INDXF,INDX1,INDX2
115 my_real R1,R2,DYDX,EPSP1,EPSP2,EPSF1,EPSF2,E22,LAMBDA,FAC,DF,
116 . EL_REF,SC_EL,SCALE_TEMP,RFAC,RFAC2,EPST_A,EPST_B,
118 ,
DIMENSION(NEL) :: EPS_MAX,EPST1,EPST2,DAMAGE,EPSRATE
135 scale_temp = uparam(7)
136 s_flag = int(uparam(8))
138 strdef= int(uparam(10))
141 IF (uvar(1,1) == zero)
THEN
146 IF (ifunc(2) /= 0)
THEN
147 lambda = uvar(i,1) / el_ref
148 fac = sc_el * finter(ifunc(2),lambda,npf,tf,df)
154 IF (ifunc(2) /= 0)
THEN
155 lambda = uvar(i,1) / el_ref
156 fac = sc_el * finter(ifunc(2),lambda,npf,tf,df)
167 IF (strdef == 2)
THEN
170 ELSE IF (ismstr == 0 .or. ismstr == 2 .or. ismstr == 4)
THEN
173 ELSE IF (strdef == 3)
THEN
174 IF (ismstr == 1 .or. ismstr == 3 .or. ismstr == 11)
THEN
176 ELSE IF (ismstr == 10 .or. ismstr == 12)
THEN
186 IF (strflag == 1 .or. strflag == 4)
THEN
188 epst_a = half*(epsxx(i)+epsyy(i))
189 epst_b = sqrt( (half*(epsxx(i)-epsyy(i)))**2 + (half*epsxy(i))**2)
190 epst1(i) = epst_a + epst_b
191 epst2(i) = epst_a - epst_b
195 eps_max(i) = half*(epsxx(i)+epsyy(i)
196 . + sqrt( (epsxx(i)-epsyy(i))*(epsxx(i)-epsyy(i))
197 . + epsxy(i)*epsxy(i) ) )
203 epst_a = half*(epsxx(i)+epsyy(i))
204 epst_b = sqrt((half*(epsxx(i)-epsyy(i)))**2 + (half*epsxy(i))**2)
205 epst1(i) = epst_a + epst_b
206 epst2(i) = epst_a - epst_b
207 eps_max(i) = epst1(i)
213 SELECT CASE (strflag)
216 IF (off(i) == one )
THEN
217 epst1(i) = sqrt(epst1(i) + one) - one
218 epst2(i) = sqrt(epst2(i) + one) - one
219 eps_max(i) = sqrt(epst1(i)**2 + epst2(i)**2)
220 epsrate(i) = sqrt(epsp(i) + one) - one
226 IF (off(i) == one )
THEN
227 eps_max(i) = exp(eps_max(i)) - one
228 epsrate(i) = exp(epsp(i)) - one
234 IF (off(i) == one )
THEN
235 eps_max(i) = log(eps_max(i) + one)
236 epsrate(i) = log(epsp(i) + one)
242 IF (off(i) == one )
THEN
243 epst1(i) = log(sqrt(epst1(i)+one))
244 epst2(i) = log(sqrt(epst2(i)+one))
245 eps_max(i) = sqrt(epst1(i)**2 + epst2(i)**2)
246 epsrate(i) = log(sqrt(epsp(i)+one))
252 epsrate(1:nel) = epsp(1:nel)
269 IF (off(i) == one .and. foff(i) == 1)
THEN
270 IF (ifunc(1) > 0)
THEN
271 epsp_unit = epsrate(i) * unit_t
272 rfac = finter(ifunc(1),epsp_unit,npf,tf,dydx)
273 rfac =
max(rfac,em20)
277 IF (ifunc(3) > 0)
THEN
278 rfac2 = finter(ifunc(3),tstar(i),npf,tf,dydx)
279 rfac2 =
max(rfac2,em20)
283 r1 = epsf1*rfac*rfac2*uvar(i,1)
284 r2 = epsf2*rfac*rfac2*uvar(i,1)
285 IF (eps_max(i) > r1)
THEN
286 IF (dfmax(i) == zero)
THEN
290 damage(i) =
min(one, (eps_max(i)-r1)/(r2-r1))
292 IF (eps_max(i) >= r2)
THEN
306 IF (off(i) == one .and. foff(i) == 1)
THEN
307 IF (ifunc(1) > 0)
THEN
308 epsp_unit = epsrate(i) * unit_t
309 rfac = finter(ifunc(1),epsp_unit,npf,tf,dydx)
310 rfac =
max(rfac,em20)
314 IF (ifunc(3) > 0)
THEN
315 rfac2 = finter(ifunc(3),tstar(i),npf,tf,dydx)
320 r1 = epsf1*rfac*rfac2*uvar(i,1)
321 r2 = epsf2*rfac*rfac2*uvar(i,1)
322 IF ( eps_max(i) > r1)
THEN
323IF (dfmax(i) == zero)
THEN
327 damage(i) =
min(one, (eps_max(i)-r1)/(r2-r1))
329 IF ( eps_max(i) >= r2)
THEN
344 IF (off(i) == one .and. foff(i) == 1)
THEN
345 IF (ifunc(1) > 0)
THEN
346 epsp_unit = epsrate(i) * unit_t
347 rfac = finter(ifunc(1),epsp_unit,npf,tf,dydx)
348 rfac =
max(rfac,em20)
354 IF (eps_max(i) > r1)
THEN
355 IF (dfmax(i) == zero)
THEN
359 damage(i) =
min(one, (eps_max(i)-r1)/(r2-r1))
361 IF (eps_max(i) >= r2)
THEN
369 IF (epsp1 > zero .OR. epsp2 > zero)
THEN
370 IF (epsp2 > zero)
THEN
371 e22 = half*( epsxx(i)+epsyy(i)
372 . - sqrt( (epsxx(i)-epsyy(i))*(epsxx(i)-epsyy(i))
373 . + epsxy(i)*epsxy(i) ) )
374 IF (strflag == 1)
THEN
375 e22 = sqrt(e22 + one) - one
376 ELSE IF (strflag == 2)
THEN
378 ELSE IF (strflag == 3)
THEN
380 ELSE IF (strflag == 4)
THEN
381 e22 = log(sqrt(e22+one))
384 IF (eps_max(i) > uvar(i,1) .AND. uvar(i,1) /= zero)
THEN
389 ELSEIF (e22 > epsp2 .AND. epsp2 /= zero)
THEN
396 dfmax(i) =
max(dfmax(i),
min( one, (eps_max(i) / uvar(i,1))))
406 dfmax(i) =
max(dfmax(i), damage(i))
407 IF (scale_flag == 1) dmg_scale(i) = one - dfmax(i)
415 IF (s_flag == 3)
THEN
417 WRITE(iout, 2001) ngl(i),ipg,ilay,ipt,eps_max(i)
418 WRITE(istdo,2001) ngl(i),ipg,ilay,ipt,eps_max(i)
419#include "lockoff.inc"
422 WRITE(iout, 2002) ngl(i),ipg,ilay,ipt,eps_max(i)
423 WRITE(istdo,2002) ngl(i),ipg,ilay,ipt,eps_max(i)
424#include "lockoff.inc"
432 IF (s_flag == 3)
THEN
434 WRITE(iout, 3001) ngl(i),ipg,ilay,ipt,eps_max(i)
435 WRITE(istdo,3101) ngl(i),ipg,ilay,ipt,time,eps_max(i)
436#include "lockoff.inc"
438 WRITE(iout, 3002) ngl(i),ipg,ilay,ipt,eps_max(i)
439 WRITE(istdo,3102) ngl(i),ipg,ilay,ipt,time,eps_max(i)
448 WRITE(iout, 4000) ngl(i),ipg,ilay,ipt,eps_max(i)
449 WRITE(istdo,4100) ngl(i),ipg,ilay,ipt,time,eps_max(i)
450#include "lockoff.inc"
458 WRITE(iout, 5000) ngl(i),ipg,ilay,ipt,eps_max(i)
459 WRITE(istdo,5100) ngl(i),ipg,ilay,ipt,time,eps_max(i)
460#include "lockoff.inc"
464 2001
FORMAT(1x,
'START DAMAGE (TENS) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
465 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,/
466 . 1x,
'PRINCIPAL STRAIN=',g11.4)
467 2002
FORMAT(1x,
'START DAMAGE (TENS) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
468 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,/
469 . 1x,
'EQUIVALENT STRAIN=',g11.4)
471 3001
FORMAT(1x,
'FAILURE (TENS) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
472 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,/
473 . 1x,
'PRINCIPAL STRAIN=',g11.4)
474 3101
FORMAT(1x,'failure(tens) of shell element
',I10,1X,',gauss pt
',
475 . I2,1X,',layer
',I3,1X,',integration pt
',I3,
476 . 1X,'at time :
',1PE12.4,/1X,'principal strain=
',G11.4)
477 3002 FORMAT(1X,'failure(tens) of shell element ',i10,1x,
',GAUSS PT',
478 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,/
479 . 1x,
'EQUIVALENT STRAIN=',g11.4)
480 3102
FORMAT(1x,
'FAILURE (TENS) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
481 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,
482 . 1x,
'AT TIME :',1pe12.4,/1x,
'EQUIVALENT STRAIN=',g11.4)
483 4000
FORMAT(1x,
'FAILURE (TENS) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
484 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,/
485 . 1x,
'1st PRINCIPAL STRAIN=',g11.4)
486 4100
FORMAT(1x,
'FAILURE (TENS) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
487 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,
488 . 1x,
'AT TIME :',1pe12.4,/1x,
'1st PRINCIPAL STRAIN=',g11.4)
489 5000
FORMAT(1x,
'FAILURE (TENS) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
490 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,/
491 . 1x,
'2nd PRINCIPAL STRAIN=',g11.4)
492 5100
FORMAT(1x,
'FAILURE (TENS) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
493 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,
494 . 1x,
'AT TIME :',1pe12.4,/1x,
'2ndPRINCIPAL STRAIN=',g11.