29 1 NEL ,NGL ,TIME ,TIMESTEP,UPARAM ,OFF ,
30 2 EPSD ,STIFM ,THICK ,
31 3 AREA ,DEPSZZ ,DEPSYZ ,DEPSZX ,NUPARAM ,
32 4 SIGOZZ ,SIGOYZ ,SIGOZX ,SIGNZZ ,SIGNYZ ,SIGNZX ,
33 5 PLA ,JSMS ,DMELS , UVAR ,NUVAR ,DMG)
37#include "implicit_f.inc"
47 INTEGER :: NEL,NUPARAM,NUVAR,JSMS
48 my_real :: TIME,TIMESTEP
49 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL
50 my_real ,
DIMENSION(NUPARAM),
INTENT(IN) :: UPARAM
51 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: THICK,
52 . depszz,depsyz,depszx,
53 . sigozz,sigoyz,sigozx,
area
55 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: epsd
56 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) ::
57 . signzz,signyz,signzx
58 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: off,pla,stifm,dmels,dmg
59 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
63 INTEGER :: I,II,ITER,NITER,NINDX,NINDF,ITRX,IDAM
64 INTEGER ,
DIMENSION(NEL) :: INDX,INDF
66 my_real :: YOUNG,NU,G,G2,BULK,YLD0,QQ,BETA,HH,C11,C12,
67 . A1F,A2F,AS,D1C,D2C,D1F,D2F,D_TRX,D_JC,DM,EXPN,A1H,A2H
69 my_real cc,epsdref,epsdmax,frate,fcut,
alpha,alphai,epsdot
71 my_real facr,triax,rvoce,fdp,i1p,ip,jp,tp,fact,facd,dfac,dtinv,
72 . dlam,ddep,dfdlam,dyld_dpla,dpla_dlam,dphi_dlam,dfdpla,dtb,
73 . gamc,gamf,np_xx,np_yy,np_zz,np_xy,np_yz,np_zx,
74 . nf_xx,nf_yy,nf_zz,nf_xy,nf_yz,nf_zx,dpxx,dpyy
75 my_real ,
DIMENSION(NEL) :: i1,j2,a1,a2,yld,phi,dam,fdam,jcrate,stf,
76 . sxx,syy,szz,sxy,syz,szx,dpla,jcr_log,gamma,dgamm,pla_nl,dpdt_nl
107 itrx = nint(uparam(26))
108 idam = nint(uparam(27))
117 dtinv = one / (
max(timestep, em20))
119 stf(1:nel) = young *
area(1:nel)
122 dam(1:nel) = dmg(1:nel)
126 IF (off(i) < 0.001) off(i) = zero
127 IF (off(i) < one) off(i) = off(i)*four/five
128 IF (off(i) == one)
THEN
129 signzz(i) = sigozz(i)/fdam(i) + (depszz(i) /thick(i) )*young
130 signyz(i) = sigoyz(i)/fdam(i) + (depsyz(i) /thick(i) )*g
131 signzx(i) = sigozx(i)/fdam(i) + (depszx(i) /thick(i) )*g
134 sxx(i) = - i1(i) * third
135 syy(i) = - i1(i) * third
136 szz(i) = signzz(i) - i1(i) * third
139 j2(i) = (sxx(i)**2 + syy(i)**2 + szz(i)**2)*half
140 . + syz(i)**2 + szx(i)**2
146 IF (off(i) == one)
THEN
147 epsdot = sqrt(depsyz(i)**2 + depszx(i)**2 + depszz(i)**2)
148 epsdot = epsdot * dtinv / thick(i)
149 epsd(i) =
min(epsdot ,epsdmax)
150 epsd(i) =
alpha *epsd(i) + alphai * uvar(i,3)
152 IF (epsd(i) > epsdref)
THEN
153 jcr_log(i) = log(epsd(i) / epsdref)
154 jcrate(i) = one + cc * jcr_log(i)
162 rvoce = qq*(one - exp(-beta*pla(i))) + hh*pla(i)
163 yld(i)= (yld0 + rvoce) * jcrate(i)
164 a1(i) = a1f + a1h * pla(i)
165 a2(i) =
max(zero, a2f + a2h * pla(i))
166 fdp = third*(sqr3*yld0*a1(i)*i1(i) + a2(i)*
max(zero,i1(i) )**2 )
167 phi(i)= j2(i) + fdp - yld(i)**2
176 IF (phi(i) > zero .and. off(i) == one)
THEN
186 i1p =
max(zero, i1(i))
191 jp = third * as * i1p
192 tp = two * third * as * i1p
201 ip = third*(sqr3*yld0*a1(i) + two*a2(i)*i1p
209 dfdlam = - nf_zz * (young * np_zz )
210 . -(nf_yz*np_yz + nf_zx*np_zx)*two*g2
212 dyld_dpla = (hh + beta*qq*exp(-beta*pla(i))) * jcrate(i)
213 dfdpla = third*(sqr3*a1h*yld0*i1(i) + a2h*i1p**2)
215 dpla_dlam = two*sqrt((j2(i) + tp*as*i1(i)))
217 dphi_dlam = dfdlam + (dfdpla - two*yld(i)*dyld_dpla)*dpla_dlam
219 dlam = -phi(i) / dphi_dlam
226 signzz(i) = signzz(i) - young *dpzz
227 signyz(i) = signyz(i) - g2 *dpyz
228 signzx(i) = signzx(i) - g2 *dpzx
231 ddep = dlam * dpla_dlam
232 dpla(i)=
max(zero, dpla(i) + ddep)
233 pla(i) = pla(i) + ddep
238 i1p =
max(zero, i1(i))
239 sxx(i) = - i1(i)*third
240 syy(i) = - i1(i)*third
241 szz(i) = signzz(i) - i1(i)*third
245 . + syz(i)**2 + szx(i)**2
246 rvoce = qq*(one - exp(-beta*pla(i))
247 yld(i) = (yld0 + rvoce) * jcrate(i)
248 a1(i) = a1f + a1h * pla(i)
249 a2(i) =
max(zero, a2f + a2h * pla(i)
250 fdp = third*(sqr3*yld0*a1(i)*i1(i) + a2(i)*i1p**2)
251 phi(i) = j2(i) + fdp - yld(i)**2
262 dgamm(1:nel) = dpla(1:nel)
263 gamma(1:nel) = pla(1:nel)
265 dgamm(1:nel) = dpla(1:nel) * fdam(1:nel)
266 uvar(1:nel,1) = uvar(1:nel,1) + dgamm(1:nel)
267 gamma(1:nel) = uvar(1:nel,1)
274 facr = one + d_jc * jcr_log(i)
275 IF ( j2(i)/= zero)triax = third * i1(i) / sqrt(three*j2(i))
277 fact = exp(-d_trx*triax)
279 IF (triax > zero )fact = exp(-d_trx*triax)
281 gamc = (d1c + d2c * fact)
282 gamf = (d1f + d2f * fact) * facr
283 IF (gamma(i) > gamc)
THEN
284 IF (dam(i) == zero)
THEN
288 IF (expn == one)
THEN
289 dam(i) = dam(i) + dgamm(i) / (gamf - gamc)
291 dfac = (gamma(i) - gamc) / (gamf - gamc)
292 dam(i) = dam(i) + expn * dfac**(expn-one) * dgamm(i) /
294 IF (dam(i) >= one)
THEN
304 signzz(i) = signzz(i) * facd
305 signyz(i) = signyz(i) * facd
306 signzx(i) = signzx(i) * facd
313 WRITE(iout, 1000) ngl(indf(ii))
314 WRITE(istdo,1100) ngl(indf(ii)),time
315#include "lockoff.inc"
319 1000
FORMAT(1x,
'START DAMAGE IN SOLID ELEMENT NUMBER ',i10)
320 1100
FORMAT(1x,
'START DAMAGE IN SOLID ELEMENT NUMBER ',i10,1x,
' AT TIME :',g11.4)
324 IF (idtmins==2 .AND. jsms/=0 )
THEN
325 dtb = (dtmins/dtfacs)**2
327 dmels(i)=
max(dmels(i),half*dtb*stf(i)*off(i))