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"
41 !========================================================
45 INTEGER NEL,NUPARAM,NUVAR
46 INTEGER ,
DIMENSION(NEL),
INTENT(IN) :: NGL
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,K,II,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
79 my_real :: trdep,dlam,ddep,dphi_dsigvm,dphi_dsigm,
80 . dpxx,dpyy,dpzz,dpxy,dpyz,dpzx,trdfds,
81 . normxx,normyy,normzz,normxy,normyz,normzx,
82 . dphi,sig_dfdsig,dfdsig2,dphi_dpla,
83 . i1,i2,i3,q,r,r_inter,psi,s11,s22,s33
85 my_real,
DIMENSION(NEL) ::
86 . sigvm,sigeq,dsigxx,dsigyy,dsigzz,dsigxy,dsigyz,dsigzx,trsig,
87 . sxx,syy,szz,sxy,syz,szx,sigm,j2,yld,hardp,phi0,phi,dpla_dlam,
116 IF (istat .NE. 0) rhof0 = uparam(16)
120 IF (off(i) < 0.1) off(i) = zero
121 IF (off(i) < one) off(i) = off(i)*four_over_5
130 gamma(i) = uparam(16)
136 sigp(i) = uparam(17) + uparam(18)*((grho(i+nel)/rhof0)**uparam(19))
137 alpha2(i) = uparam(20) + uparam(21)*((grho(i+nel)/rhof0)**uparam(22))
138 gamma(i) = uparam(23) + uparam(24)*((grho(i+nel)/rhof0)**uparam(25))
139 beta(i) = one/(uparam(26) + uparam(27)*((grho(i+nel)/rhof0)**uparam(28)))
140 epsd(i) = (-(nine + (alpha**2))/(three*(alpha**2)))*log(grho(i+nel)/rhof0)
147 yld(i) = sigp(i) + gamma(i)*(pla(i)/epsd(i)) +
158 ldav = (depsxx(i) + depsyy(i) + depszz(i)) * lamhook
159 signxx(i) = sigoxx(i) + depsxx(i)*g2 + ldav
160 signyy(i) = sigoyy(i) + depsyy(i)*g2 + ldav
161 signzz(i) = sigozz(i) + depszz(i)*g2 + ldav
162 signxy(i) = sigoxy(i) + depsxy(i)*g
163 signyz(i) = sigoyz(i) + depsyz(i)*g
164 signzx(i) = sigozx(i) + depszx(i)*g
166 trsig(i) = signxx(i) + signyy(i) + signzz(i)
167 sigm(i) = trsig(i) * third
169 sxx(i) = signxx(i) - sigm(i)
170 syy(i) = signyy(i) - sigm
171 szz(i) = signzz(i) - sigm(i)
176 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
177 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
178 sigvm(i) = sqrt(three*j2(i))
180 sigeq(i) = sqrt((sigvm(i)**2 + (alpha*sigm(i))**2)/(one + (alpha/three)**2))
186 phi(1:nel) = sigeq(1:nel) - yld(1:nel)
191 IF ((phi(i)>zero).AND.(off(i) == one))
THEN
200#include "vectorize.inc"
207 ldav = (depsxx(i) + depsyy(i) + depszz(i)) * lamhook
208 dsigxx(i) = depsxx(i)*g2 + ldav
209 dsigyy(i) = depsyy(i)*g2 + ldav
210 dsigzz(i) = depszz(i)*g2 + ldav
211 dsigxy(i) = depsxy(i)*g
212 dsigyz(i) = depsyz(i)*g
213 dsigzx(i) = depszx(i)*g
217 trsig(i) = sigoxx(i) + sigoyy(i) + sigozz(i)
218 sigm(i) = trsig(i) * third
219 sxx(i) = sigoxx(i) - sigm(i)
220 syy(i) = sigoyy(i) - sigm(i)
221 szz(i) = sigozz(i) - sigm(i)
225 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
226 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
227 sigvm(i) = sqrt(three*j2(i))
229 sigeq(i) = sqrt((sigvm(i)**2 + (alpha*sigm(i))**2)/(one + (alpha/three)**2))
243 !---------------------------------------------------------
246 dphi_dsigvm = sigvm(i)/
max((sigeq(i)*(one + (alpha/three)**2)),em20)
249 dphi_dsigm = (alpha**2)*sigm(i)/
max((sigeq(i)*(one + (alpha/three)**2)),em20)
252 normxx = dphi_dsigvm*three_half*sxx(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
253 normyy = dphi_dsigvm*three_half*syy(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
254 normzz = dphi_dsigvm*three_half*szz(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
255 normxy = two*dphi_dsigvm*three_half*sxy(i)/(
max(sigvm(i),em20))
256 normyz = two*dphi_dsigvm*three_half*syz(i)/(
max(sigvm(i),em20))
257 normzx = two*dphi_dsigvm*three_half*szx(i)/(
max(sigvm(i),em20))
263 dphi = normxx * dsigxx(i)
264 . + normyy * dsigyy(i)
265 . + normzz * dsigzz(i)
266 . + normxy * dsigxy(i)
267 . + normyz * dsigyz(i)
268 . + normzx * dsigzx(i)
276 trdfds = normxx + normyy + normzz
277 dfdsig2 = normxx * (normxx*g2 + lamhook*trdfds)
278 . + normyy * (normyy*g2 + lamhook*trdfds)
279 . + normzz * (normzz*g2 + lamhook*trdfds)
280 . + normxy * normxy * g
281 . + normyz * normyz * g
282 . + normzx * normzx * g
289 hardp(i) = (gamma(i)/epsd(i)) +
290 .
alpha2(i)*((one-(beta(i)/epsd(i))*(pla(i)/epsd(i))**(beta(i)-1))/
291 .
max((one - (pla(i)/epsd(i))**beta(i)),em20))
296 sig_dfdsig = signxx(i) * normxx
297 . + signyy(i) * normyy
298 . + signzz(i) * normzz
299 . + signxy(i) * normxy
300 . + signyz(i) * normyz
301 . + signzx(i) * normzx
302 dpla_dlam(i) = sig_dfdsig / yld(i)
308 dphi_dlam(i) = - dfdsig2 - dphi_dpla*dpla_dlam(i)
309 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
314 ! computation of
the plastic multiplier
315 dlam = -(dphi + phi(i)) / dphi_dlam(i)
316 dlam =
max(dlam, zero)
325 trdep = dpxx + dpyy + dpzz
328 ddep = (dlam/yld(i))*sig_dfdsig
329 dpla(i) = dpla(i) + ddep
330 pla(i) = pla(i) + ddep
331 defvp(i) = defvp(i) + trdep
334 ldav = trdep * lamhook
335 signxx(i) = sigoxx(i) + dsigxx(i) - (dpxx*g2 + ldav)
336 signyy(i) = sigoyy(i) + dsigyy(i) - (dpyy*g2 + ldav)
337 signzz(i) = sigozz(i) + dsigzz(i) - (dpzz*g2 + ldav)
338 signxy(i) = sigoxy(i) + dsigxy(i) - dpxy*g
339 signyz(i) = sigoyz(i) + dsigyz(i) - dpyz*g
340 signzx(i) = sigozx(i) + dsigzx(i) - dpzx*g
341 trsig(i) = signxx(i) + signyy(i) + signzz(i)
342 sigm(i) = trsig(i) * third
343 sxx(i) = signxx(i) - sigm(i)
344 syy(i) = signyy(i) - sigm(i)
345 szz(i) = signzz(i) - sigm(i)
349 j2(i) = half*(sxx(i)**2 + syy(i)**2 +
350 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
351 sigvm(i) = sqrt(three*j2(i))
353 sigeq(i) = sqrt((sigvm(i)**2 + (alpha*sigm(i))**2)/(one + (alpha/three)**2))
356 yld(i) = sigp(i) + gamma(i)*(pla(i)/epsd(i)) +
357 .
alpha2(i)*log(one/
max((one - (pla(i)/epsd(i))**beta(i)),em20))
358 yld(i) =
max(yld(i),em10)
361 phi(i) = sigeq(i) - yld(i)
370 IF (dpla(i) > zero)
THEN
375 IF (cfail > zero)
THEN
376 uvar(i,2) = uvar(i,2) + defvp(i)
377 IF (uvar(i,2) >= cfail)
THEN
378 IF (off(i) == one) off(i) = four_over_5
381 IF (pfail > zero)
THEN
383 i1 = signxx(i)+signyy(i)+signzz(i)
384 i2 = signxx(i)*signyy(i)+signyy(i)*signzz(i)+signzz(i)*signxx(i)-
385 . signxy(i)*signxy(i)-signzx
386 i3 = signxx(i)*signyy(i)*signzz(i)-signxx(i)*signyz(i)*signyz(i)-
387 . signyy(i)*signzx(i)*signzx(i)-signzz(i)*signxy(i)*signxy(i)+
388 . two*signxy(i)*signzx(i)*signyz(i)
389 q = (three*i2 - i1*i1)/nine
390 r = (two*i1*i1*i1-nine*i1*i2+twenty7*i3)/cinquante4
391 r_inter =
min(r/sqrt(
max(em20,(-q**3))),one)
392 psi = acos(
max(r_inter,-one))
394 s11 = two*sqrt(-q)*cos(psi/three)+third*i1
395 s22 = two*sqrt(-q)*cos((psi+two*pi)/three)+third*i1
396 s33 = two*sqrt(-q)*cos((psi+four*pi)/three)+third*i1
397 s11 =
max(s11,s22,s33)
399 IF (s11 >= pfail)
THEN
400 IF (off(i) == one) off(i) = four_over_5
405 IF (dpla(i) > zero)
THEN
406 et(i) = hardp(i) / (hardp(i) + young)
411 soundsp(i) = sqrt((bulk + four_over_3*g)/grho(nel+i))