29 1 NEL ,NGL ,NUPARAM ,NUVAR ,GRHO ,
30 2 TIME ,TIMESTEP,UPARAM ,UVAR ,OFF ,SIGY ,
31 3 RHO0 ,PLA ,DPLA ,SOUNDSP ,ET ,SEQ ,
32 4 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
33 5 SIGOXX ,SIGOYY ,SIGOZZ ,SIGOXY ,SIGOYZ ,SIGOZX ,
34 6 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX )
38#include "implicit_f.inc"
45 INTEGER NEL,NUPARAM,NUVAR
46 INTEGER ,
DIMENSION(NEL),
INTENT(IN) ::
49 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
51 my_real,
DIMENSION(2*NEL),
INTENT(IN) ::
53 my_real,
DIMENSION(NEL),
INTENT(IN) ::
55 . depsxx,depsyy,depszz,depsxy,depsyz,depszx,
56 . sigoxx,sigoyy,sigozz,sigoxy,sigoyz,sigozx
58 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
60 . signxx,signyy,signzz,signxy,signyz,signzx
62 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
64 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
70 INTEGER I,II,ITER,NITER,NINDX,INDEX(NEL),Istat
73 . YOUNG,BULK,LAMHOOK,G,G2,NU,ALPHA,CFAIL,PFAIL,RHOF0
75 my_real,
DIMENSION(NEL) ::
76 . gamma,epsd,
alpha2,beta,sigp
80 . h,trdep,dlam,ddep,dphi_dsigvm,dphi_dsigm,
81 . dpxx,dpyy,dpzz,dpxy,dpyz,dpzx,trdfds,
82 . normxx,normyy,normzz,normxy,normyz,normzx,
83 . dphi,sig_dfdsig,dfdsig2,dphi_dpla,
84 . i1,i2,i3,q,r,r_inter,psi,s11,s22,s33
86 my_real,
DIMENSION(NEL) ::
88 . sxx,syy,szz,sxy,syz,szx,sigm,j2,yld,hardp,phi,dpla_dlam,dphi_dlam,
116 IF (istat == 1) rhof0 = uparam(16)
120 IF (off(i) < 0.1) off(i) = zero
121 IF (off(i) < one) off(i) = off(i)*four_over_5
128 gamma(i) = uparam(16)
134 sigp(i) = uparam(17) + uparam(18)*((grho(i+nel)/rhof0)**uparam(19))
135 alpha2(i) = uparam(20) + uparam(21)*((grho(i+nel)/rhof0)**uparam(22))
136 gamma(i) = uparam(23) + uparam(24)*((grho(i+nel)/rhof0)**uparam(25))
137 beta(i) = one/(uparam(26) + uparam(27)*((grho(i+nel)/rhof0)**uparam(28)))
138 epsd(i) = (-(nine + (alpha**2))/(three*(alpha**2)))*log(grho(i+nel)/rhof0)
145 yld(i) = sigp(i) + gamma(i)*(pla(i)/epsd(i)) +
146 .
alpha2(i)*log(one/
max((one - (pla(i)/epsd(i))**beta(i)),em20))
148 yld(i) =
max(em10,yld(i))
156 ldav = (depsxx(i) + depsyy(i) + depszz(i)) * lamhook
157 signxx(i) = sigoxx(i) + depsxx(i)*g2 + ldav
158 signyy(i) = sigoyy(i) + depsyy(i)*g2 + ldav
159 signzz(i) = sigozz(i) + depszz(i)*g2 + ldav
161 signyz(i) = sigoyz(i) + depsyz(i)*g
162 signzx(i) = sigozx(i) + depszx(i)*g
164 trsig(i) = signxx(i) + signyy(i) + signzz(i)
165 sigm(i) = trsig(i) * third
167 sxx(i) = signxx(i) - sigm(i)
168 syy(i) = signyy(i) - sigm(i)
169 szz(i) = signzz(i) - sigm(i)
174 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
175 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
176 sigvm(i) = sqrt(three*j2(i))
178 sigeq(i) = sqrt((sigvm(i)**2 + (alpha*sigm(i))**2)/(one + (alpha/three)**2))
184 phi(1:nel) = sigeq(1:nel) - yld(1:nel)
189 IF ((phi(i)>zero).AND.(off
THEN
204#include "vectorize.inc"
223 dphi_dsigvm = sigvm(i)/
max((sigeq(i)*(one + (alpha/three)**2)),em20)
226 dphi_dsigm = (alpha**2)*sigm(i)
229 normxx = dphi_dsigvm*three_half*sxx(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
230 normyy = dphi_dsigvm*three_half*syy(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
231 normzz = dphi_dsigvm*three_half*szz(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
232 normxy = two*dphi_dsigvm*three_half*sxy(i)/(
max(sigvm(i),em20))
233 normyz = two*dphi_dsigvm*three_half*syz(i)/(
max(sigvm(i),em20))
234 normzx = two*dphi_dsigvm*three_half*szx(i)/(
max(sigvm(i),em20))
241 trdfds = normxx + normyy + normzz
242 dfdsig2 = normxx * (normxx*g2 + lamhook*trdfds)
243 . + normyy * (normyy*g2 + lamhook*trdfds)
244 . + normzz * (normzz*g2 + lamhook*trdfds)
245 . + normxy * normxy * g
246 . + normyz * normyz * g
247 . + normzx * normzx * g
254 hardp(i) = (gamma(i)/epsd(i)) +
255 .
alpha2(i)*((one-(beta(i)/epsd(i))*(pla(i)/epsd(i))**(beta(i)-1))/
256 .
max((one - (pla(i)/epsd(i))**beta(i)),em20))
261 sig_dfdsig = signxx(i) * normxx
262 . + signyy(i) * normyy
263 . + signzz(i) * normzz
264 . + signxy(i) * normxy
265 . + signyz(i) * normyz
266 . + signzx(i) * normzx
267 dpla_dlam(i) = sig_dfdsig / yld(i)
273 dphi_dlam(i) = - dfdsig2 - dphi_dpla*dpla_dlam(i)
274 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
277 dlam = -phi(i)/dphi_dlam(i)
286 trdep = dpxx + dpyy + dpzz
289 ddep = (dlam/yld(i))*sig_dfdsig
290 dpla(i) =
max(zero, dpla(i) + ddep)
291 pla(i) = pla(i) + ddep
292 defvp(i) = defvp(i) + trdep
295 ldav = trdep * lamhook
296 signxx(i) = signxx(i) - (dpxx*g2 + ldav)
297 signyy(i) = signyy(i) - (dpyy*g2 + ldav)
298 signzz(i) = signzz(i) - (dpzz*g2 + ldav)
299 signxy(i) = signxy(i) - dpxy*g
300 signyz(i) = signyz(i) - dpyz*g
302 trsig(i) = signxx(i) + signyy(i) + signzz(i)
303 sigm(i) = trsig(i) * third
304 sxx(i) = signxx(i) - sigm(i)
305 syy(i) = signyy(i) - sigm(i)
310 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
311 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
312 sigvm(i) = sqrt(three*j2(i))
314 sigeq(i) = sqrt((sigvm(i)**2 + (alpha*sigm(i))**2)/(one + (alpha/three)**2))
317 yld(i) = sigp(i) + gamma(i)*(pla(i)/epsd(i)) +
318 .
alpha2(i)*log(one/
max((one - (pla(i)/epsd(i))**beta(i)),em20))
319 yld(i) =
max(yld(i),em10)
322 phi(i) = sigeq(i) - yld(i)
335 IF (cfail > zero)
THEN
336 uvar(i,1) = uvar(i,1) + defvp(i)
337 IF (uvar(i,1) >= cfail)
THEN
338 IF (off(i) == one) off(i) = four_over_5
341 IF (pfail > zero)
THEN
343 i1 = signxx(i)+signyy(i)+signzz(i)
344 i2 = signxx(i)*signyy(i)+signyy(i)*signzz(i)+signzz(i)*signxx(i)-
345 . signxy(i)*signxy(i)-signzx(i)*signzx(i)-signyz(i)*signyz(i)
346 i3 = signxx(i)*signyy(i)*signzz(i)-signxx(i)*signyz(i)*signyz(i)-
347 . signyy(i)*signzx(i)*signzx(i)-signzz(i)*signxy(i)*signxy(i)+
348 . two*signxy(i)*signzx(i)*signyz(i)
349 q = (three*i2 - i1*i1)/nine
350 r = (two*i1*i1*i1-nine*i1*i2+twenty7*i3)/cinquante4
351 r_inter =
min(r/sqrt(
max(em20,(-q**3))),one)
352 psi = acos(
max(r_inter,-one))
353 s11 = two*sqrt(-q)*cos(psi/three)+third*i1
354 s22 = two*sqrt(-q)*cos((psi+two*pi)/three)+third*i1
355 s33 = two*sqrt(-q)*cos((psi+four*pi)/three)+third*i1
356 s11 =
max(s11,s22,s33)
358 IF (s11 >= pfail)
THEN
359 IF (off(i) == one) off(i) = four_over_5
364 IF (dpla(i) > zero)
THEN
365 et(i) = hardp(i) / (hardp(i) + young)
370 soundsp(i) = sqrt((bulk + four_over_3*g)/grho(nel+i))
subroutine mat115_newton(nel, ngl, nuparam, nuvar, grho, time, timestep, uparam, uvar, off, sigy, rho0, pla, dpla, soundsp, et, seq, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx)