35 1 NEL ,NGL ,NUPARAM ,NUVAR ,NPF ,
36 2 TIME ,TIMESTEP,UPARAM ,UVAR ,JTHE ,OFF ,
37 3 GS ,RHO ,PLA ,DPLA ,EPSP ,SOUNDSP ,
38 4 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,ASRATE ,
39 5 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,
40 6 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
41 7 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,THKLY ,
42 8 THK ,SIGY ,ET ,TEMPEL ,TEMP ,SEQ ,
43 9 TF ,NUMTABL ,ITABLE ,TABLE ,NVARTMP ,VARTMP ,
44 A SIGA ,INLOC ,DPLANL ,LOFF )
53#include "implicit_f.inc"
61 INTEGER NEL,NUPARAM,NUVAR
62INTEGER ,
DIMENSION(NEL),
INTENT(IN) :: NGL
64 . TIME,TIMESTEP,ASRATE,TF(*)
65 INTEGER :: VARTMP(NEL,NVARTMP)
66 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
68 my_real,
DIMENSION(NEL),
INTENT(IN) ::
70 . DEPSXX,DEPSYY,DEPSXY,DEPSYZ,DEPSZX,
71 . epspxx,epspyy,epspxy,epspyz,epspzx ,
72 . sigoxx,sigoyy,sigoxy,sigoyz,sigozx,
75 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
76 . soundsp,sigy,et,epsp,
77 . signxx,signyy,signxy,signyz,signzx
79 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
80 . pla,dpla,off,thk,temp,seq
81 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
83 my_real ,
DIMENSION(NEL,3) ,
INTENT(INOUT) ::
86 TYPE(
ttable),
DIMENSION(NTABLE) :: TABLE
90 INTEGER I,J,II,K,ITER,NITER,NINDX,INDEX(NEL),VFLAG,IPOS(NEL,2),NANGLE,
91 . ipos0(nel,2),ismooth
94 . young,g,g2,nu,nnu,a11,a12,yld0,dsigm,beta,omega,nexp,eps0,sigst,
95 . dg0,deps0,mexp,fbi(2),kboltz,fisokin,tini,xscale,yscale
97 . mohr_radius,mohr_center,normsig,tmp,sig_ratio,var_a,var_b,var_c,
98 . a(2),b(2),c(2),h,dpdt,dlam,ddep,dav,deve1,deve2,deve3,deve4,
101 . fun_theta(nel,2),hips_theta(nel,2),hish_theta(nel,2)
103 . f1,f2,df1_dmu,df2_dmu,normxx,normyy,normxy,
104 . denom,sig_dfdsig,dfdsig2,dphi_dsig1,dphi_dsig2,
105 . dsxx,dsyy,dsxy,dexx,deyy,dexy,
alpha,da_dcos2(2),
106 . db_dcos2(2),dc_dcos2(2),df1_dcos2,df2_dcos2,dphi_dcos2,
107 . dweight_dcos2,u,uprim,v,vprim,cos2(10,10)
109 my_real,
DIMENSION(NEL) ::
110 . dsigxx,dsigyy,dsigxy,dsigyz,dsigzx,sigvg,yld,hardp,sighard,sigrate,
111 . phi,dpla_dlam,dezz,dphi_dlam,dpxx,dpyy,dpxy,dpyz,dpzx,dpzz,
112 . sig1,sig2,cos2theta,sin2theta,deelzz,mu,dyld_dpla,yl0,sigexx,sigeyy,
113 . sigexy,weight,hardr,yld_tref,dydx,yld_temp,tfac
115 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
116 . hips,hish,q_hips,q_hish
118 my_real,
DIMENSION(:),
ALLOCATABLE ::
121 my_real,
PARAMETER :: tol = 1.0d-6
123 LOGICAL :: SIGN_CHANGED(NEL)
126 1 1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
127 2 0. ,1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
128 3 -1. ,0. ,2. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
129 4 0. ,-3. ,0. ,4. ,0. ,0. ,0. ,0. ,0. ,0. ,
130 5 1. ,0. ,-8. ,0. ,8. ,0. ,0. ,0. ,0. ,0. ,
131 6 0. ,5. ,0. ,-20. ,0. ,16. ,0. ,0. ,0. ,0. ,
132 7 -1. ,0. ,18. ,0. ,-48. ,0. ,32. ,0. ,0. ,0. ,
133 8 0. ,-7. ,0. ,56. ,0. ,-112.,0. ,64. ,0. ,0. ,
134 9 1. ,0. ,-32. ,0. ,160. ,0. ,-256.,0. ,128. ,0. ,
135 a 0. ,9. ,0. ,-120.,0. ,432. ,0. ,-576 ,0. ,256. /
173 vflag = nint(uparam(23))
177 nangle = nint(uparam(26))
180 ALLOCATE(hips(nangle,2),hish(nangle,2),
182 . q_wps(nangle),q_wsh(nangle))
186 hips(i,1) = uparam(30+11*(i-1))
187 hips(i,2) = uparam(31+11*(i-1))
188 hish(i,1) = uparam(32+11*(i-1))
189 hish(i,2) = uparam(33+11*(i-1))
191 q_fun(i) = uparam(34+11*(i-1))
192 q_hish(i,1) = uparam(35+11*(i-1))
194 q_hips(i,1) = uparam(37+11*(i-1))
195 q_hips(i,2) = uparam(38+11*(i-1))
196 q_wsh(i) = uparam(39+11*(i-1))
197 q_wps(i) = uparam(40+11*(i-1))
201 IF (time == zero)
THEN
205 IF (eps0 > zero)
THEN
212 IF (off(i) < 0.1) off(i) = zero
213 IF (off(i) < one) off(i) = off(i)*four_over_5
218 sign_changed(i) = .false.
224 temp(1:nel) = tempel(1:nel)
228 IF ((vflag == 1) .OR. (vflag == 3))
THEN
232 ELSEIF (vflag == 3)
THEN
233 dav = (epspxx(i)+epspyy(i))*third
234 deve1 = epspxx(i) - dav
237 deve4 = half*epspxy(i)
238 epsp(i) = half*(deve1
239 epsp(i) = sqrt(three*epsp(i))/three_half
240 epsp(i) = asrate*epsp(i) + (one - asrate)*uvar(i,1)
247 IF (fisokin > zero)
THEN
248 IF (numtabl > 0)
THEN
250 xvec(1:nel,2) = epsp(1:nel) * xscale
254 yl0(1:nel) = yl0(1:nel) * yscale
256 IF (numtabl == 2)
THEN
261 CALL table_vinterp(table(itable(2)),nel,nel,ipos0,xvec,yld_tref,dydx)
263 xvec(1:nel,2) = temp(1:nel)
264 CALL table_vinterp(table(itable(2)),nel,nel,ipos0,xvec,yld_temp,dydx)
265 tfac(1:nel) = yld_temp(1:nel) / yld_tref(1:nel)
266 yl0(1:nel) = yl0(1:nel) * tfac(1:nel)
276 IF (numtabl > 0)
THEN
278 xvec(1:nel,1) = pla(1:nel)
279 xvec(1:nel,2) = epsp(1:nel) * xscale
280 ipos(1:nel,1) = vartmp(1:nel,1)
283 yld(1:nel) = yld(1:nel) * yscale
284 hardp(1:nel) = hardp(1:nel) * yscale
285 vartmp(1:nel,1) = ipos(1:nel,1)
287 IF (numtabl == 2)
THEN
290 ipos(1:nel,1) = vartmp(1:nel,2)
291 ipos(1:nel,2) = vartmp(1:nel,3)
292 CALL table_vinterp(table(itable(2)),nel,nel,ipos,xvec,yld_tref,dydx)
293 vartmp(1:nel,2) = ipos(1:nel,1)
294 vartmp(1:nel,3) = ipos(1:nel,2)
296 xvec(1:nel,2) = temp(1:nel)
297 CALL table_vinterp(table(itable(2)),nel,nel,ipos,xvec,yld_temp,dydx)
298 tfac(1:nel) = yld_temp(1:nel) / yld_tref(1:nel)
299 yld(1:nel) = yld(1:nel) * tfac(1:nel)
300 hardp(1:nel) = hardp(1:nel) * tfac(1:nel)
305 yld(1:nel) = (one-fisokin)*yld(1:nel)+fisokin*yl0(1:nel)
310 sighard(i) = yld0 + dsigm
312 sigrate(i) = sigst*(one + (kboltz*temp(i)/dg0)*log(one + (epsp(i)/deps0)))**mexp
314 yld(i) = sighard(i) + sigrate(i)
316 IF (fisokin > zero)
THEN
317 yl0(i) = yl0(i) + sigrate(i)
319 yld(i) = (one-fisokin)*yld(i)+fisokin*yl0(i)
321 yld(i) =
max(em10, yld(i))
331 IF (fisokin > zero)
THEN
332 signxx(i) = sigoxx(i) - siga(i,1) + a11*depsxx(i) + a12*depsyy(i)
333 signyy(i) = sigoyy(i) - siga(i,2) + a12*depsxx(i) + a11*depsyy(i)
334 signxy(i) = sigoxy(i) - siga(i,3) + g*depsxy(i)
335 sigexx(i) = signxx(i)
336 sigeyy(i) = signyy(i)
337 sigexy(i) = signxy(i)
339 signxx(i) = sigoxx(i) + a11*depsxx(i) + a12*depsyy(i)
340 signyy(i) = sigoyy(i) + a11*depsyy(i) + a12*depsxx(i)
341 signxy(i) = sigoxy(i) + depsxy(i)*g
343 signyz(i) = sigoyz(i) + depsyz(i)*gs(i)
344 signzx(i) = sigozx(i) + depszx(i)
347 normsig = sqrt(signxx(i)*signxx(i)
348 . + signyy(i)*signyy(i)
349 . + two*signxy(i)*signxy(i))
350 IF (normsig < em20)
THEN
355 mohr_radius = sqrt(((signxx(i)-signyy(i))/two)**2 + signxy(i)**2)
356 mohr_center = (signxx(i)+signyy(i))/two
357 sig1(i) = mohr_center + mohr_radius
358 sig2(i) = mohr_center - mohr_radius
359 IF (mohr_radius>em20)
THEN
360 cos2theta(i) = ((signxx(i)-signyy(i))/two)/mohr_radius
361 sin2theta(i) = signxy(i)/mohr_radius
368 hish_theta(i,1:2) = zero
371 hish_theta(i,1:2) = hish_theta(i,1:2) + q_hish(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
376 IF (sig1(i)<zero .OR. ((sig2(i)<zero) .AND. (sig2(i)*hish_theta(i,1)<sig1(i)*hish_theta(i,2))))
THEN
377 cos2theta(i) = -cos2theta(i)
378 sin2theta(i) = -sin2theta(i)
382 sign_changed(i) = .true.
384 sign_changed(i) = .false.
387 IF (sig2(i)<zero)
THEN
389 fun_theta(i,1:2) = zero
390 hish_theta(i,1:2) = zero
394 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2(k,j)*(cos2theta(i))**(k-1)
395 hish_theta(i,1:2) = hish_theta(i,1:2) + q_hish(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
396 weight(i) = weight(i) + q_wsh(j)*cos2(k,j)*(cos2theta(i))**(k-1)
400 a(1) = fun_theta(i,2)
401 a(2) = -fun_theta(i,1)
402 b(1:2) = hish_theta(i,1:2)
403 c(1:2) = fun_theta(i,1:2)
407 fun_theta(i,1:2) = zero
408 hips_theta(i,1:2) = zero
412 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2(k
413 hips_theta(i,1:2) = hips_theta(i,1:2) + q_hips(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
414 weight(i) = weight(i) + q_wps(j)*cos2(k,j)*(cos2theta(i))**(k-1)
418 a(1:2) = fun_theta(i,1:2)
419 b(1:2) = hips_theta(i,1:2)
423 IF (sig1(i)<em20)
THEN
427 sig_ratio = sig2(i)/sig1(i)
428 var_a = (c(2)+a(2)-two*weight(i)*b(2)) - sig_ratio*(c(1)+a(1)-two*weight(i)*b(1))
429 var_b = two*((weight(i)*b(2)-a(2)) - sig_ratio*(weight(i)*b(1)-a(1)))
430 var_c = a(2) - sig_ratio*a(1)
431 IF (abs(var_a)<em08)
THEN
434 mu(i) = (-var_b+sqrt(var_b*var_b - four*var_a*var_c))/(two*var_a)
436 sigvg(i) = sig1(i)*(((one-mu(i))**2) + two
437 . (a(1)*((one-mu(i))**2) + two*b(1)*mu(i)*weight(i)*(one-mu(i)) + c(1)*(mu(i)**2))
451 IF (phi(i) > zero .AND. off(i) == one)
THEN
465#include "vectorize.inc"
482#include "vectorize.inc"
502 IF (sig2(i)<zero)
THEN
503 a(1) = fun_theta(i,2)
504 a(2) = -fun_theta(i,1)
505 b(1:2) = hish_theta(i,1:2)
506 c(1:2) = fun_theta(i,1:2)
516 db_dcos2(1:2) = db_dcos2(1:2) + q_hish(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
517 dc_dcos2(1) = dc_dcos2(1) + q_fun(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
518 dweight_dcos2 = dweight_dcos2 + q_wsh(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
521 da_dcos2(2) = -dc_dcos2(1)
525 a(1:2) = fun_theta(i,1:2)
538 da_dcos2(1) = da_dcos2(1) + q_fun(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
539 db_dcos2(1:2) = db_dcos2(1:2) + q_hips(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
540 dweight_dcos2 = dweight_dcos2 + q_wps(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
547 u = a(1)*((one - mu(i))**2) + two*b(1)*mu(i)*weight(i)*(one-mu(i)) + c(1)*(mu(i)**2)
548 uprim = da_dcos2(1)*((one - mu(i))**2) + two*mu(i)*(one-mu(i))*(dweight_dcos2*b(1)+
549 . weight(i)*db_dcos2(1)) + dc_dcos2(1)*(mu(i)**2)
550 v = (one-mu(i))**2 + two*weight(i)*mu(i)*(one-mu(i)) + mu(i)**2
551 vprim = two*mu(i)*(one-mu(i))*dweight_dcos2
553 df1_dcos2 = (uprim*v - u*vprim)/
max((v**2),em20)
554 u = a(2)*((one - mu(i))**2) + two*b(2)*mu(i)*weight(i)*(one-mu(i)) + c(2)*(mu(i)**2)
555 uprim = da_dcos2(2)*((one - mu(i))**2) + two*mu(i)*(one-mu(i))*(dweight_dcos2*b(2)+
556 . weight(i)*db_dcos2(2)) + dc_dcos2(2)*(mu(i)**2)
558 df2_dcos2 = (uprim*v - u*vprim)/
max((v**2),em20)
561 u = a(1)*((one - mu(i))**2) + two*b(1)*mu(i)*weight(i)*(one-mu(i)) + c(1)*(mu(i)**2)
562 uprim = -two*(one-mu(i))*a(1) + two*weight(i)*b(1)*(one-two*mu(i)) + two*mu(i)*c(1)
563 v = (one-mu(i))**2 + two*weight(i)*mu(i)*(one-mu(i)) + mu(i)**2
564 vprim = -two*(one-mu(i)) + two*weight(i)*(one-two*mu(i)) + two*mu(i)
565 df1_dmu = (uprim*v - u*vprim)/
max((v**2),em20)
566 u = a(2)*((one - mu(i))**2) + two*b(2)*mu(i)*weight(i)*(one-mu(i)) + c(2)*(mu(i)**2)
567 uprim = -two*(one-mu(i))*a(2) + two*weight(i)*b(2)*(one-two*mu(i)) + two*mu(i)*c(2)
568 df2_dmu = (uprim*v - u*vprim)/
max((v**2),em20)
571 IF ((f1*df2_dmu - f2*df1_dmu)/=zero)
THEN
572 dphi_dsig1 = df2_dmu/(f1*df2_dmu - f2*df1_dmu)
573 dphi_dsig2 = -df1_dmu/(f1*df2_dmu - f2*df1_dmu)
574 IF (abs(sig1(i)-sig2(i))>tol)
THEN
575 dphi_dcos2 = (sigvg(i)/(sig1(i) - sig2(i)))*(df2_dcos2*df1_dmu -
576 . df1_dcos2*df2_dmu)/(f1*df2_dmu - f2*df1_dmu)
578 dphi_dcos2 = (two*((one-mu(i
579 . two*((one-mu(i))*da_dcos2(1)+two*weight(i)*mu(i)*db_dcos2(1))*df2_dmu)/
580 . ((one-mu(i))*(a(1)-a(2)) + two*weight(i)*mu(i)*(b(1)-b(2)))
587 normxx = half*(one + cos2theta(i))*dphi_dsig1 + half*(one-cos2theta(i))*dphi_dsig2 +
588 . (sin2theta(i)**2)*dphi_dcos2
589 normyy = half*(one - cos2theta(i))*dphi_dsig1 + half*(one+cos2theta(i))*dphi_dsig2 -
590 . (sin2theta(i)**2)*dphi_dcos2
591 normxy = sin2theta(i)*dphi_dsig1 - sin2theta(i)*dphi_dsig2 -
592 . (two*sin2theta(i)*cos2theta(i))*dphi_dcos2
593 IF (sign_changed(i))
THEN
604 dfdsig2 = normxx * (a11*normxx + a12*normyy)
605 . + normyy * (a11*normyy + a12*normxx)
606 . + normxy * normxy * g
609 ! ------------------------------------------------
613 IF (numtabl == 0)
THEN
615 hardp(i) = dsigm*beta
616 IF (pla(i)>zero)
THEN
617 hardp(i) = hardp(i) + dsigm*(nexp*(one-exp(-omega*(pla(i))))**(nexp-one))*
618 . (omega*exp(-omega*(pla(i))))
622 dyld_dpla(i) = (one-fisokin)*hardp(i)
626 sig_dfdsig = signxx(i) * normxx
627 . + signyy(i) * normyy
628 . + signxy(i) * normxy
629 dpla_dlam(i) = sig_dfdsig/yld(i)
635 dphi_dlam(i) = - dfdsig2 - dyld_dpla(i)*dpla_dlam(i)
636 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
639 dlam = -phi(i)/dphi_dlam(i)
642 dpxx(i) = dlam * normxx
643 dpyy(i) = dlam * normyy
644 dpxy(i) = dlam * normxy
647 signxx(i) = signxx(i) - (a11*dpxx(i) + a12*dpyy(i))
648 signyy(i) = signyy(i) - (a11*dpyy(i) + a12*dpxx(i))
649 signxy(i) = signxy(i) - dpxy(i)*g
652 ddep = dlam*sig_dfdsig/yld(i)
653 dpla(i) =
max(zero, dpla(i) + ddep)
654 pla(i) = pla(i) + ddep
657 normsig = sqrt(signxx(i)*signxx(i)
658 . + signyy(i)*signyy(i)
659 . + two*signxy(i)*signxy(i))
660 IF (normsig < em20)
THEN
664 mohr_radius = sqrt(((signxx(i)-signyy(i))/two)**2 + signxy(i)**2)
665 mohr_center = (signxx(i)+signyy(i))/two
666 sig1(i) = mohr_center + mohr_radius
667 sig2(i) = mohr_center - mohr_radius
668 IF (mohr_radius>em20)
THEN
669 cos2theta(i) = ((signxx(i)-signyy(i))/two)/mohr_radius
670 sin2theta(i) = signxy(i)/mohr_radius
676 hish_theta(i,1:2) = zero
679 hish_theta(i,1:2) = hish_theta(i,1:2) + q_hish(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
683 IF (sig1(i)<zero .OR. (sig2(i)<zero .AND. sig2(i)*hish_theta(i,1)<sig1(i)*hish_theta(i,2)))
THEN
684 cos2theta(i) = -cos2theta(i)
685 sin2theta(i) = -sin2theta(i)
689 sign_changed(i) = .true.
691 sign_changed(i) = .false.
694 IF (sig2(i)<zero)
THEN
696 fun_theta(i,1:2) = zero
697 hish_theta(i,1:2) = zero
701 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2(k,j)*(cos2theta(i))**(k-1)
702 hish_theta(i,1:2) = hish_theta(i,1:2) + q_hish(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
703 weight(i) = weight(i) + q_wsh(j)*cos2(k,j)*(cos2theta(i))**(k-1)
707 a(1) = fun_theta(i,2)
708 a(2) = -fun_theta(i,1)
709 b(1:2) = hish_theta(i,1:2)
710 c(1:2) = fun_theta(i,1:2)
714 fun_theta(i,1:2) = zero
715 hips_theta(i,1:2) = zero
719 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2(k,j)*(cos2theta(i))**(k-1)
720 hips_theta(i,1:2) = hips_theta
721 weight(i) = weight(i) + q_wps(j)*cos2(k,j)*(cos2theta(i))**(k-1)
725 a(1:2) = fun_theta(i,1:2)
726 b(1:2) = hips_theta(i,1:2)
730 IF (sig1(i)<em20)
THEN
734 sig_ratio = sig2(i)/sig1(i)
735 var_a = (c(2)+a(2)-two*weight(i)*b(2)) - sig_ratio*(c(1)+a(1)-two*weight(i)*b(1))
736 var_b = two*((weight(i)*b(2)-a(2)) - sig_ratio*(weight(i)*b(1)-a(1)))
737 var_c = a(2) - sig_ratio*a(1)
738 IF (abs(var_a)<em08)
THEN
741 mu(i) = (-var_b+sqrt(var_b*var_b - four*var_a*var_c))/(two*var_a)
743 sigvg(i) = sig1(i)*(((one-mu(i))**2) + two*mu(i)*weight(i)*(one-mu(i)) + (mu(i)**2))/
744 . (a(1)*((one-mu(i))**2) + two*b(1)*mu(i)*weight(i)*(one-mu(i)) + c(1)*(mu(i)**2))
748 IF (numtabl == 0)
THEN
750 sighard(i) = yld0 + dsigm*(beta*(pla(i))+(one-exp(-omega*(pla(i))))**nexp)
752 yld(i) = sighard(i) + sigrate(i)
753 yld(i) = (one-fisokin)*yld(i)+fisokin*yl0(i)
754 yld(i) =
max(yld(i), em10)
756 phi(i) = sigvg(i) - yld(i)
761 dezz(i) = dezz(i) - (dpxx(i)+dpyy(i))
767 IF ((numtabl > 0).AND.(nindx > 0))
THEN
768 xvec(1:nel,1) = pla(1:nel)
769 xvec(1:nel,2) = epsp(1:nel) * xscale
770 ipos(1:nel,1) = vartmp(1:nel,1)
773 yld(1:nel) = yld(1:nel) * yscale
774 hardp(1:nel) = hardp(1:nel) * yscale
775 vartmp(1:nel,1) = ipos(1:nel,1)
777 IF (numtabl == 2)
THEN
780 ipos(1:nel,1) = vartmp(1:nel,2)
781 ipos(1:nel,2) = vartmp(1:nel,3)
782 CALL table_vinterp(table(itable(2)),nel,nel,ipos,xvec,yld_tref,dydx)
783 vartmp(1:nel,2) = ipos(1:nel,1)
784 vartmp(1:nel,3) = ipos(1:nel,2)
786 xvec(1:nel,2) = temp(1:nel)
787 CALL table_vinterp(table(itable(2)),nel,nel,ipos,xvec,yld_temp,dydx)
788 tfac(1:nel) = yld_temp(1:nel) / yld_tref(1:nel)
789 yld(1:nel) = yld(1:nel) * tfac(1:nel)
790 hardp(1:nel) = hardp(1:nel) * tfac(1:nel)
795 yld(1:nel) = (one-fisokin)*yld(1:nel)+fisokin*yl0(1:nel)
797 phi(1:nel) = sigvg(1:nel) - yld(1:nel)
808 IF (fisokin > zero)
THEN
810 dsxx = sigexx(i) - signxx(i)
811 dsyy = sigeyy(i) - signyy(i)
812 dsxy = sigexy(i) - signxy(i)
813 dexx = (dsxx - nu*dsyy)
814 deyy = (dsyy - nu*dsxx)
815 dexy = two*(one+nu)*dsxy
816 alpha = fisokin*hardp(i)/(young+hardp(i))*third
817 signxx(i) = signxx(i) + siga(i,1)
818 signyy(i) = signyy(i) + siga(i,2)
819 signxy(i) = signxy(i) + siga(i,3)
820 siga(i,1) = siga(i,1) +
alpha*(four*dexx+two*deyy)
821 siga(i,2) = siga(i,2) +
alpha*(four*deyy+two*dexx)
822 siga(i,3) = siga(i,3) +
alpha*dexy
830 dpdt = dpla(i)/
max(em20,timestep)
831 uvar(i,1) = asrate * dpdt + (one - asrate) * uvar(i,1)
837 IF (dpla(i) > zero)
THEN
838 et(i) = hardp(i) / (hardp(i) + young)
843 soundsp(i) = sqrt(a11/rho(i))
847 deelzz(i) = -nu*(signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/young
849 IF ((inloc > 0).AND.(loff(i) == one))
THEN
851 mohr_radius = sqrt(((sigoxx(i)-sigoyy(i))/two)**2 + sigoxy(i)**2)
852 mohr_center = (sigoxx(i)+sigoyy(i))/two
853 sig1(i) = mohr_center + mohr_radius
854 sig2(i) = mohr_center - mohr_radius
855 IF (mohr_radius>em20)
THEN
856 cos2theta(i) = ((sigoxx(i)-sigoyy(i))/two)/mohr_radius
857 sin2theta(i) = sigoxy(i)/mohr_radius
863 hish_theta(i,1:2) = zero
866 hish_theta(i,1:2) = hish_theta(i,1:2) + q_hish(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
870 IF (sig1(i)<zero .OR. ((sig2(i)<zero) .AND. (sig2(i)*hish_theta(i,1)<sig1(i)*hish_theta(i,2))))
THEN
871 cos2theta(i) = -cos2theta(i)
872 sin2theta(i) = -sin2theta(i)
876 sign_changed(i) = .true.
878 sign_changed(i) = .false
881 IF (sig2(i)<zero)
THEN
883 fun_theta(i,1:2) = zero
884 hish_theta(i,1:2) = zero
888 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2(k,j)*(cos2theta(i))**(k-1)
889 hish_theta(i,1:2) = hish_theta(i,1:2) + q_hish(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
890 weight(i) = weight(i) + q_wsh(j)*cos2(k,j)*(cos2theta(i))**(k-1)
895 a(2) = -fun_theta(i,1)
896 b(1:2) = hish_theta(i,1:2)
897 c(1:2) = fun_theta(i,1:2)
898 ! derivatives of phi with respect to theta
907 db_dcos2(1:2) = db_dcos2(1:2) + q_hish(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
908 dc_dcos2(1) = dc_dcos2(1) + q_fun(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
909 dweight_dcos2 = dweight_dcos2 + q_wsh(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
912 da_dcos2(2) = -dc_dcos2(1)
917 fun_theta(i,1:2) = zero
918 hips_theta(i,1:2) = zero
922 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2(k,j)*(cos2theta(i))**(k-1)
923 hips_theta(i,1:2) = hips_theta(i,1:2) + q_hips(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
924 weight(i) = weight(i) + q_wps(j)*cos2(k,j)*(cos2theta(i))**(k-1)
928 a(1:2) = fun_theta(i,1:2)
941 da_dcos2(1) = da_dcos2(1) + q_fun(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
942 db_dcos2(1:2) = db_dcos2(1:2) + q_hips(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
943 dweight_dcos2 = dweight_dcos2 + q_wps(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
949 IF (sig1(i)<em20)
THEN
953 sig_ratio = sig2(i)/sig1(i)
954 var_a = (c(2)+a(2)-two*weight(i)*b(2)) - sig_ratio*(c(1)+a(1)-two*weight(i)*b(1))
955 var_b = two*((weight(i)*b(2)-a(2)) - sig_ratio*(weight(i)*b(1)-a(1)))
956 var_c = a(2) - sig_ratio*a(1)
957 IF (abs(var_a)<em08
THEN
960 mu(i) = (-var_b+sqrt(var_b*var_b - four*var_a*var_c))/(two*var_a)
962 sigvg(i) = sig1(i)*(((one-mu(i))**2) + two*mu(i)*weight(i)*(one-mu(i)) + (mu(i)**2))/
963 . (a(1)*((one-mu(i))**2) + two*b(1)*mu(i
965 u = a(1)*((one - mu(i))**2) + two*b
966 uprim = da_dcos2(1)*((one - mu(i))**2) + two*mu(i)*(one-mu(i))*(dweight_dcos2*b(1)+
967 . weight(i)*db_dcos2(1)) + dc_dcos2(1)*(mu(i)**2)
968 v = (one-mu(i))**2 + two*weight(i)*mu(i)*(one-mu(i)) + mu(i)**2
969 vprim = two*mu(i)*(one-mu(i))*dweight_dcos2
971 df1_dcos2 = (uprim*v - u*vprim)/
max((v**2),em20)
972 u = a(2)*((one - mu(i))**2) + two*b(2)*mu(i)*weight(i
973 uprim = da_dcos2(2)*((one - mu(i))**2) + two*mu(i)*(one-mu(i))*(dweight_dcos2*b(2)+
974 . weight(i)*db_dcos2(2)) + dc_dcos2(2)*(mu(i)**2)
976 df2_dcos2 = (uprim*v - u*vprim)/
max((v**2),em20)
978 u = a(1)*((one - mu(i))**2) + two*b(1)*mu(i)*weight(i
979 uprim = -two*(one-mu(i))*a(1) + two*weight(i)*b(1)*(one-two*mu(i)) + two*mu(i)*c(1)
980 v = (one-mu(i))**2 + two*weight(i)*mu(i)*(one-mu(i)) + mu(i)**2
981 vprim = -two*(one-mu(i)) + two*weight(i)*(one-two*mu(i)) + two*mu(i)
982 df1_dmu = (uprim*v - u*vprim)/
max((v**2),em20)
983 u = a(2)*((one - mu(i))**2) + two*b(2)*mu(i)*weight(i)*(one-mu(i)) + c(2)*(mu(i)**2)
984 uprim = -two*(one-mu(i))*a(2) + two*weight(i)*b(2)*(one-two*mu(i)) + two*mu(i)*c(2)
985 df2_dmu = (uprim*v - u*vprim)/
max((v**2),em20)
986 IF ((f1*df2_dmu - f2*df1_dmu)/=zero)
THEN
987 dphi_dsig1 = df2_dmu/(f1*df2_dmu - f2*df1_dmu)
988 dphi_dsig2 = -df1_dmu/(f1*df2_dmu - f2*df1_dmu
989 IF (abs(sig1(i)-sig2(i))>tol
THEN
990 dphi_dcos2 = (sigvg(i)/(sig1(i) - sig2(i)))*(df2_dcos2*df1_dmu -
991 . df1_dcos2*df2_dmu)/(f1*df2_dmu - f2*df1_dmu)
993 dphi_dcos2 = (two*((one-mu(i))*da_dcos2(2)+two*weight(i)*mu(i)*db_dcos2
994 . two*((one-mu(i))*da_dcos2(1)+two*weight(i)*mu(i)*db_dcos2(1))*df2_dmu)/
995 . ((one-mu(i))*(a(1)-a(2)) + two*weight(i)*mu(i)*(b(1)-b(2)))
1002 normxx = half*(one + cos2theta(i))*dphi_dsig1 + half*(one-cos2theta(i
1003 . (sin2theta(i)**2)*dphi_dcos2
1004 normyy = half*(one - cos2theta(i))*dphi_dsig1 + half*(one+cos2theta(i))*dphi_dsig2 -
1005 . (sin2theta(i)**2)*dphi_dcos2
1006 normxy = sin2theta(i)*dphi_dsig1 - sin2theta(i)*dphi_dsig2 -
1007 . (two*sin2theta(i)*cos2theta(i))*dphi_dcos2
1008 IF (sign_changed(i))
THEN
1013 sig_dfdsig = signxx(i) * normxx
1014 . + signyy(i) * normyy
1015 . + signxy(i) * normxy
1016 IF (sig_dfdsig > zero)
THEN
1017 dezz(i) = -
max(dplanl(i),zero)*(yld(i)/sig_dfdsig)*(normxx+normyy)
1022 dezz(i) = deelzz(i) + dezz
1023 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)