34 1 NEL ,NGL ,NUPARAM ,NUVAR ,TIME ,TIMESTEP,
35 2 UPARAM ,UVAR ,JTHE ,OFF ,RHO ,
36 3 PLA ,DPLA ,EPSD ,SOUNDSP ,SHF ,
37 4 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
38 5 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
39 6 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
41 8 NUMTABL ,ITABLE ,TABLE ,NVARTMP ,VARTMP )
50#include "implicit_f.inc"
58 INTEGER NEL,JTHE,NUMTABL,ITABLE(NUMTABL),NVARTMP
59 INTEGER,
DIMENSION(NEL),
INTENT(IN) :: NGL
62 INTEGER :: VARTMP(NEL,NVARTMP)
63 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
65DIMENSION(NEL),
INTENT(IN) ::
67 . depsxx,depsyy,depsxy,depsyz,depszx,
68 . sigoxx,sigoyy,sigoxy,sigoyz,sigozx
70 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
72 . signxx,signyy,signxy,signyz,signzx
74 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
76 my_real ,
DIMENSION(NEL,6),
INTENT(INOUT) ::
78 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
81 TYPE(
ttable),
DIMENSION(NTABLE) ::
85 INTEGER I,K,II,NINDX,INDEX(NEL),,ITER,ITAB,ISMOOTH,IPOS(NEL,2)
88 . young1,young2,nu12,nu21,g12,a11,a12,a21,a22,c1,
89 . xi1,xi2,k1,k2,k3,k4,k5,k6,g1c,d1,d2,sigy1,
90 . cini1,s1,sigy2,cini2,s2,sigy1c,cini1c,s1c,
91 . sigy2c,cini2c,s2c,sigyt,cinit,st,g23,g31
96 . normxx,normyy,normxy,
97 . normpxx,normpyy,normpxy,
98 . dphi_dlam,dphi,dfdsig2,dphi_dpla,dpxx,dpyy,dpxy,
99 . dphi_dr1,dphi_dr2,dphi_dr1c,dphi_dr2c,dphi_drt
101 . xscale1,yscale1,xscale1c,yscale1c,xscale2,yscale2,xscale2c,yscale2c,
102 . xscalet,yscalet,xvec(nel,2),asrate
104 my_real,
DIMENSION(NEL) ::
105 . alpha1,
alpha2,alpha3,alpha4,alpha5,r1,r2,r1c,r2c,rt,
106 . dsigxx,dsigyy,dsigxy,dsigyz,dsigzx,hardp,phi,eta1,eta2,
107 . dr1_dp,dr2_dp,dr1c_dp,dr2c_dp,drt_dp,hardr,dpla2,dpla3,
108 . dpla4,dpla5,dpla6,beta1,beta2
166 asrate = (two*pi*asrate*timestep)/(two*pi*asrate*timestep + one)
167 ismooth = int(uparam(35))
173 IF (off(i) < 0.1) off(i) = zero
174 IF (off(i) < one) off(i) = off(i)*four_over_5
189 xvec(1:nel,1) = pla(1:nel,2)
190 xvec(1:nel,2) = epsd(1:nel,2) * xscale1
191 ipos(1:nel,1) = vartmp(1:nel
194 r1(1:nel) = r1(1:nel) * yscale1
195 dr1_dp(1:nel) = dr1_dp(1:nel) * yscale1
196 vartmp(1:nel,1) = ipos(1:nel,1)
198 xvec(1:nel,1) = pla(1:nel,3)
199 xvec(1:nel,2) = epsd(1:nel,3) * xscale2
200 ipos(1:nel,1) = vartmp(1:nel,2)
203 r2(1:nel) = r2(1:nel) * yscale2
204 dr2_dp(1:nel) = dr2_dp(1:nel) * yscale2
205 vartmp(1:nel,2) = ipos(1:nel,1)
207 xvec(1:nel,1) = pla(1:nel,4)
208 xvec(1:nel,2) = epsd(1:nel,4) * xscale1c
209 ipos(1:nel,1) = vartmp(1:nel,3)
212 r1c(1:nel) = r1c(1:nel) * yscale1c
213 dr1c_dp(1:nel)= dr1c_dp(1:nel) * yscale1c
214 vartmp(1:nel,3) = ipos(1:nel,1)
216 xvec(1:nel,1) = pla(1:nel,5)
217 xvec(1:nel,2) = epsd(1:nel,5) * xscale2c
218 ipos(1:nel,1) = vartmp(1:nel,4)
221 r2c(1:nel) = r2c(1:nel) * yscale2c
222 dr2c_dp(1:nel)= dr2c_dp(1:nel) * yscale2c
223 vartmp(1:nel,4) = ipos(1:nel,1)
225 xvec(1:nel,1) = pla(1:nel,6)
226 xvec(1:nel,2) = epsd(1:nel,6) * xscalet
227 ipos(1:nel,1) = vartmp(1:nel,5)
230 rt(1:nel) = rt(1:nel) * yscalet
231 drt_dp(1:nel) = drt_dp(1:nel) * yscalet
232 vartmp(1:nel,5) = ipos(1:nel
241 signxx(i) = sigoxx(i) + a11*depsxx(i) + a12*depsyy(i)
242 signyy(i) = sigoyy(i) + a21*depsxx(i) + a22*depsyy(i)
243 signxy(i) = sigoxy(i) + depsxy(i)*g12
244 signyz(i) = sigoyz(i) + depsyz(i)*g23*shf(i)
245 signzx(i) = sigozx(i) + depszx(i)*g31*shf(i)
253 IF ((signxx(i) - xi1*signyy(i)) > zero) alpha1(i) = one
254 IF ((signyy(i) - xi2*signxx(i)) > zero)
alpha2(i) = one
255 IF (-signxx(i) > zero) alpha3(i) = one
256 IF (-signyy(i) > zero) alpha4(i) = one
257 IF (abs(signxy(i)) > zero) alpha5(i) = one
263 r1(i) = sigy1 + (one/(cini1 + s1*pla(i,2)))*pla(i,2)
265 r2(i) = sigy2 + (one/(cini2 + s2*pla(i,3)))*pla(i,3)
267 ! - in direction 1 (md) (including correction)
268 r1c(i) = sigy1c + (one/(cini1c + s1c*pla(i,4)))*pla(i,4)
269 r1c(i) = r1c(i)/sqrt(one - g1c)
271 r2c(i) = sigy2c + (one/(cini2c + s2c*pla(i,5)))*pla(i,5)
273 eta1(i) = one + alpha3(i)*alpha4(i)*d1
274 eta2(i) = one + alpha3(i)*alpha4(i)*d2
275 rt(i) = eta1(i)*sigyt + eta2(i)*(one/(cinit + st*pla(i,6)))*pla(i,6)
279 normsig = sqrt(signxx(i)*signxx(i) + signyy(i)*signyy(i) + two*signxy(i)*signxy(i))
280 normsig =
max(normsig,em20)
283 IF ((signxx(i)/normsig > em01).OR.(signyy(i)/normsig > em01)) beta1(i) = one
284 IF ((signxx(i)/normsig < -em01).OR.(signyy(i)/normsig < -em01)) beta2(i) = one
285 IF (((abs(signxx(i))/normsig)<em01).AND.((abs(signyy(i))/normsig)<em01))
THEN
291 phi(i) = alpha1(i)*((signxx(i) - xi1*signyy(i))/r1(i))**2 +
292 .
alpha2(i)*((signyy(i) - xi2*signxx(i))/r2(i))**2 +
293 . alpha3(i)*((- signxx(i))/r1c(i))**2 +
294 . alpha4(i)*((- signyy(i))/r2c(i))**2 +
295 . alpha5(i)*(abs(signxy(i))/rt(i))**2 - one
305 IF (phi(i) > zero .AND. off(i) == one)
THEN
320#include "vectorize.inc"
337 normxx = two*(alpha1(i)/(r1(i)**2))*(signxx(i)-xi1*signyy
338 . - two*(
alpha2(i)*xi2/(r2(i)**2))*(signyy(i)-xi2*signxx(i))
339 . + two*(alpha3(i)/(r1c(i)**2))*signxx(i)
340 normyy = -two*(alpha1(i)*xi1/(r1(i)**2))*(signxx(i)-xi1*signyy(i))
341 . + two*(
alpha2(i)/(r2(i)**2))*(signyy(i)-xi2*signxx(i))
342 . + two*(alpha4(i)/(r2c(i)**2))*signyy(i)
343 normxy = (alpha5(i)/(rt(i)**2))*abs(signxy(i))*sign(one,signxy(i))
348 normpxx = beta1(i)*(two*signxx(i) + k2*signyy(i)) + beta2(i)*(two*signxx(i) + k4*signyy(i))
349 normpyy = beta1(i)*(two*k1*signyy(i) + k2*signxx(i)) + beta2(i)*(two*k3*signyy(i) + k4*signxx(i))
350 normpxy = (beta1(i)*k5 + beta2(i)*k6)*signxy(i)
352 normsig = sqrt(normpxx*normpxx + normpyy*normpyy + two*normpxy*normpxy)
353 normsig =
max(normsig,em20)
355 normpxx = normpxx/normsig
356 normpyy = normpyy/normsig
357 normpxy = normpxy/normsig
364 dfdsig2 = normxx * (a11*normpxx + a12*normpyy)
365 . + normyy * (a21*normpxx + a22*normpyy)
366 . + two*normxy * two*normpxy * g12
368 ! b) derivatives with respect to hardening parameters
372 dphi_dr1 = -two*alpha1(i)*(((signxx(i)-xi1*signyy(i))**2)/(r1(i)**3))
373 dphi_dr2 = -two*
alpha2(i)*(((signyy(i)-xi2*signxx(i))**2)/(r2(i)**3))
374 dphi_dr1c = -two*alpha3(i)*(signxx(i)**2)/(r1c(i)**3)
375 dphi_dr2c = -two*alpha4(i)*(signyy(i)**2)/(r2c(i)**3)
376 dphi_drt = -two*alpha5(i)*(signxy(i)**2)/(rt(i)**3)
379 dr1_dp(i) = (one/(cini1 + s1*pla(i,2))) * (one - (s1*pla(i,2) /(cini1 + s1*pla(i,2))))
380 dr2_dp(i) = (one/(cini2 + s2*pla(i,3))) * (one -
381 dr1c_dp(i) = (one/(cini1c + s1c*pla(i,4))) * (one - (s1c*pla(i,4)/(cini1c + s1c*pla(i,4))))
382 dr1c_dp(i) = dr1c_dp(i)/sqrt(one - g1c)
383 dr2c_dp(i) = (one/(cini2c + s2c*pla(i,5))) * (one - (s2c*pla(i,5)/(cini2c + s2c*pla(i,5))))
384 drt_dp(i) = eta2(i)*(one/(cinit + st*pla(i,6))) * (one
387 hardp(i) = sqrt(alpha1(i)*dr1_dp(i)**2 +
alpha2(i)*dr2_dp(i)**2 + alpha3(i)*dr1c_dp(i)**2
388 . + alpha4(i)*dr2c_dp(i)**2 + two*alpha5(i)*drt_dp(i)**2)
389 dphi_dpla = dphi_dr1*dr1_dp(i)*alpha1(i) + dphi_dr2*dr2_dp(i)*
alpha2(i) +
390 . dphi_dr1c*dr1c_dp(i)*alpha3(i) + dphi_dr2c*dr2c_dp(i)*alpha4(i) +
391 . dphi_drt*drt_dp(i)*alpha5
394 dphi_dlam = -dfdsig2 + dphi_dpla
395 dphi_dlam = sign(
max(abs(dphi_dlam),em20) ,dphi_dlam)
401 dlam = -phi(i) / dphi_dlam
404 dpxx = dlam * normpxx
405 dpyy = dlam * normpyy
406 dpxy = two * dlam * normpxy
409 signxx(i) = signxx(i) - (a11*dpxx + a12*dpyy)
410 signyy(i) = signyy(i) - (a21*dpxx + a22*dpyy)
411 signxy(i) = signxy(i) - g12*dpxy
415 dpla(i) =
max(zero, dpla(i) + ddep)
416 dpla2(i) =
max(zero, dpla2(i) + alpha1(i)*ddep)
417 dpla3(i) =
max(zero, dpla3(i) +
alpha2(i)*ddep)
418 dpla4(i) =
max(zero, dpla4(i) + alpha3(i)*ddep)
419 dpla5(i) =
max(zero, dpla5(i) + alpha4(i)*ddep)
420 dpla6(i) =
max(zero, dpla6(i) + alpha5(i)*ddep)
421 pla(i,1) = pla(i,1) + ddep
422 pla(i,2) = pla(i,2) + alpha1(i)*ddep
423 pla(i,3) = pla(i,3) +
alpha2(i)*ddep
424 pla(i,4) = pla(i,4) + alpha3(i)*ddep
425 pla(i,5) = pla(i,5) + alpha4(i)*ddep
426 pla(i,6) = pla(i,6) + alpha5(i)*ddep
434 IF ((signxx(i) - xi1*signyy(i)) > zero) alpha1(i) = one
435 IF ((signyy(i) - xi2*signxx(i)) > zero)
alpha2(i) = one
436 IF (-signxx(i) > zero) alpha3(i) = one
437 IF (-signyy(i) > zero) alpha4(i) = one
438 IF (abs(signxy(i)) > zero) alpha5(i) = one
444 r1(i) = sigy1 + (one/(cini1 + s1*pla(i,2)))*pla(i,2)
446 r2(i) = sigy2 + (one/(cini2 + s2*pla(i
449 r1c(i) = sigy1c + (one/(cini1c + s1c*pla(i,4)))*pla(i,4)
450 r1c(i) = r1c(i)/sqrt(one - g1c)
452 r2c(i) = sigy2c + (one/(cini2c + s2c*pla(i,5)))*pla(i,5)
454 eta1(i) = one + alpha3(i)*alpha4(i)*d1
455 eta2(i) = one + alpha3(i)*alpha4
456 rt(i) = eta1(i)*sigyt + eta2(i)*(one/(cinit + st*pla(i,6)))*pla(i,6)
459 phi(i) = alpha1(i)*((signxx(i) - xi1*signyy(i))/r1(i))**2 +
462 . alpha4(i)*((- signyy(i))/r2c(i))**2 +
463 . alpha5(i)*(abs(signxy(i))/rt(i))**2 -
473 xvec(1:nel,1) = pla(1:nel,2)
474 xvec(1:nel,2) = epsd(1:nel,2) * xscale1
475 ipos(1:nel,1) = vartmp(1:nel,1)
478 r1(1:nel) = r1(1:nel) * yscale1
479 dr1_dp(1:nel) = dr1_dp(1:nel) * yscale1
480 vartmp(1:nel,1) = ipos(1:nel,1)
482 xvec(1:nel,1) = pla(1:nel,3)
483 xvec(1:nel,2) = epsd(1:nel,3) * xscale2
484 ipos(1:nel,1) = vartmp(1:nel,2)
487 r2(1:nel) = r2(1:nel) * yscale2
488 dr2_dp(1:nel) = dr2_dp(1:nel) * yscale2
489 vartmp(1:nel,2) = ipos(1:nel,1)
491 xvec(1:nel,1) = pla(1:nel,4)
492 xvec(1:nel,2) = epsd(1:nel,4) * xscale1c
493 ipos(1:nel,1) = vartmp(1:nel,3)
496 r1c(1:nel) = r1c(1:nel) * yscale1c
497 dr1c_dp(1:nel)= dr1c_dp(1:nel) * yscale1c
498 vartmp(1:nel,3) = ipos(1:nel,1)
500 xvec(1:nel,1) = pla(1:nel,5)
501 xvec(1:nel,2) = epsd(1:nel,5) * xscale2c
502 ipos(1:nel,1) = vartmp(1:nel,4)
505 r2c(1:nel) = r2c(1:nel) * yscale2c
506 dr2c_dp(1:nel)= dr2c_dp(1:nel) * yscale2c
507 vartmp(1:nel,4) = ipos(1:nel,1)
509 xvec(1:nel,1) = pla(1:nel,6)
510 xvec(1:nel,2) = epsd(1:nel,6) * xscalet
511 ipos(1:nel,1) = vartmp(1:nel,5)
514 rt(1:nel) = rt(1:nel) * yscalet
515 drt_dp(1:nel) = drt_dp(1:nel) * yscalet
516 vartmp(1:nel,5) = ipos(1:nel,1)
519 phi(i) = alpha1(i)*((signxx(i) - xi1*signyy(i))/r1
520 .
alpha2(i)*((signyy(i) - xi2*signxx(i))/r2(i))**2 +
521 . alpha3(i)*((- signxx(i))/r1c(i))**2 +
522 . alpha4(i)*((- signyy(i))/r2c(i))**2 +
523 . alpha5(i)*(abs(signxy(i))/rt
537 epsd(i,1) = dpla(i) /
max(em20,timestep)
538 epsd(i,2) = dpla2(i) /
max(em20,timestep)
539 epsd(i,3) = dpla3(i) /
max
540 epsd(i,4) = dpla4(i) /
max(em20,timestep)
541 epsd(i,5) = dpla5(i) /
max(em20,timestep)
542 epsd(i,6) = dpla6(i) /
max(em20,timestep)
544 dpdt = dpla(i)/
max(em20,timestep)
545 epsd(i,1) = asrate * dpdt + (one - asrate) * epsd(i,1)
546 dpdt = dpla2(i)/
max(em20,timestep)
547 epsd(i,2) = asrate * dpdt + (one - asrate) * epsd(i,2)
548 dpdt = dpla3(i)/
max(em20,timestep)
549 epsd(i,3) = asrate * dpdt + (one - asrate) * epsd(i,3)
550 dpdt = dpla4(i)/
max(em20,timestep)
551 epsd(i,4) = asrate * dpdt + (one - asrate) * epsd
552 dpdt = dpla5(i)/
max(em20,timestep)
554 dpdt = dpla6(i)/
max(em20,timestep)
555 epsd(i,6) = asrate * dpdt + (one - asrate) * epsd(i,6)
558 et(i) = hardp(i) / (hardp(i) +
max(young1,young2))
560 soundsp(i) = sqrt(
max(a11,a12,a21
562 sigy(i) = sqrt(r1(i)**2 + r2(i)**2 + r1c(i)**2 +
563 . r2c(i)**2 + two*rt(i)*