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,JTHE,NUMTABL,ITABLE(NUMTABL),NVARTMP,NPF(*),INLOC
62 INTEGER ,
DIMENSION(NEL),
INTENT(IN) :: NGL
64 . TIME,TIMESTEP,ASRATE
65INTEGER :: VARTMP(NEL,)
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 ,
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
81DIMENSION(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,(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),fsh_theta(nel,2),fps_theta(nel,2),
102 . hips_theta(nel,2),hiun_theta(nel,2),hish_theta(nel,2)
104 . f1,f2,df1_dmu,df2_dmu,normxx,normyy,normxy,
105 . denom,sig_dfdsig,dfdsig2,dphi_dsig1,dphi_dsig2,
106 . dsxx,dsyy,dsxy,dexx,deyy,dexy,
alpha,da_dcos2(2),
107 . db_dcos2(2),dc_dcos2(2),df1_dcos2,df2_dcos2,
108 . dphi_dcos2,cos2(10,10)
110 my_real,
DIMENSION(NEL) ::
111 . dsigxx,dsigyy,dsigxy,dsigyz,dsigzx,sigvg,yld,hardp,sighard,sigrate,
112 . phi,dpla_dlam,dezz,dphi_dlam,dpxx,dpyy,dpxy,dpyz,dpzx,dpzz,
113 . sig1,sig2,cos2theta,sin2theta
114 . sigexy,hardr,yld_tref,dydx,yld_temp,tfac
116 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
117 . hips,hiun,hish,q_fsh,q_fps,q_hiun,q_hips,q_hish
119 my_real,
DIMENSION(:),
ALLOCATABLE ::
122 my_real,
PARAMETER :: tol = 1.0d-6
124 LOGICAL :: SIGN_CHANGED(NEL)
127 1 1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
128 2 0. ,1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
129 3 -1. ,0. ,2. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
130 4 0. ,-3. ,0. ,4. ,0. ,0. ,0. ,0. ,0. ,0. ,
131 5 1. ,0. ,-8. ,0. ,8. ,0. ,0. ,0. ,0. ,0. ,
132 6 0. ,5. ,0. ,-20. ,0. ,16. ,0. ,0. ,0. ,0. ,
134 8 0. ,-7. ,0. ,56. ,0. ,-112.,0. ,64. ,0. ,0. ,
135 9 1. ,0. ,-32. ,0. ,160. ,0. ,-256.,0. ,128. ,0. ,
136 a 0. ,9. ,0. ,-120.,0. ,432. ,0. ,-576 ,0. ,256. /
138 ! drucker material law with no damage
174 vflag = nint(uparam(23))
178 nangle = nint(uparam(26))
179 ismooth = nint(uparam(28))
181 ALLOCATE(hips(nangle,2),hiun(nangle,2),hish(nangle,2),
182 . q_fsh(nangle,2),q_fun(nangle),q_fps(nangle,2),
183 . q_hish(nangle,2),q_hiun(nangle,2),q_hips(nangle,2))
187 hips(i,1) = uparam(30+17*(i-1))
188 hips(i,2) = uparam(31+17*(i-1))
189 hiun(i,1) = uparam(32+17*(i-1))
190 hiun(i,2) = uparam(33+17*(i-1))
191 hish(i,1) = uparam(34+17*(i-1))
192 hish(i,2) = uparam(35+17*(i-1))
194 q_fsh(i,1) = uparam(36+17*(i-1))
195 q_fsh(i,2) = uparam(37+17*(i-1))
196 q_fun(i) = uparam(38+17*(i-1))
197 q_fps(i,1) = uparam(39+17*(i-1))
198 q_fps(i,2) = uparam(40+17*(i-1))
199 q_hish(i,1) = uparam(41+17*(i-1))
200 q_hish(i,2) = uparam(42+17*(i-1))
201 q_hiun(i,1) = uparam(43+17*(i-1))
202 q_hiun(i,2) = uparam(44+17*(i-1))
203 q_hips(i,1) = uparam(45+17*(i-1))
204 q_hips(i,2) = uparam(46+17*(i-1))
208 IF (time == zero)
THEN
212 IF (eps0 > zero)
THEN
219 IF (off(i) < 0.1) off(i) = zero
220 IF (off(i) < one) off(i) = off(i)*four_over_5
225 sign_changed(i) = .false.
231 temp(1:nel) = tempel(1:nel)
235 IF ((vflag == 1) .OR. (vflag == 3))
THEN
239 ELSEIF (vflag == 3)
THEN
240 dav = (epspxx(i)+epspyy(i))*third
241 deve1 = epspxx(i) - dav
242 deve2 = epspyy(i) - dav
244 deve4 = half*epspxy(i)
245 epsp(i) = half*(deve1**2 + deve2**2 + deve3**2)
247 epsp(i) = asrate*epsp(i) + (one - asrate)*uvar(i,1)
254 IF (fisokin > zero)
THEN
255 IF (numtabl > 0)
THEN
257 xvec(1:nel,2) = epsp(1:nel) * xscale
261 yl0(1:nel) = yl0(1:nel) * yscale
263 IF (numtabl == 2)
THEN
268 CALL table_vinterp(table(itable(2)),nel,nel,ipos0,xvec,yld_tref,dydx
270 xvec(1:nel,2) = temp(1:nel)
271 CALL table_vinterp(table(itable(2)),nel,nel,ipos0,xvec,yld_temp,dydx)
272 tfac(1:nel) = yld_temp(1:nel) / yld_tref(1:nel)
273 yl0(1:nel) = yl0(1:nel) * tfac(1:nel)
283 IF (numtabl > 0)
THEN
286 xvec(1:nel,2) = epsp(1:nel) * xscale
287 ipos(1:nel,1) = vartmp(1:nel,1)
290 yld(1:nel) = yld(1:nel) * yscale
291 hardp(1:nel) = hardp(1:nel) * yscale
292 vartmp(1:nel,1) = ipos(1:nel,1)
294 IF (numtabl == 2)
THEN
297 ipos(1:nel,1) = vartmp(1:nel,2)
298 ipos(1:nel,2) = vartmp(1:nel,3)
300 vartmp(1:nel,2) = ipos(1:nel,1)
301 vartmp(1:nel,3) = ipos(1:nel,2)
303 xvec(1:nel,2) = temp(1:nel)
304 CALL table_vinterp(table(itable(2)),nel,nel,ipos,xvec,yld_temp,dydx)
305 tfac(1:nel) = yld_temp(1:nel) / yld_tref(1:nel)
306 yld(1:nel) = yld(1:nel) * tfac(1:nel)
307 hardp(1:nel) = hardp(1:nel) * tfac(1:nel)
312 yld(1:nel) = (one-fisokin)*yld(1:nel)+fisokin*yl0(1:nel)
317 sighard(i) = yld0 + dsigm*(beta*(pla(i))+(one-exp(-omega*(pla(i))))**nexp)
319 sigrate(i) = sigst*(one + (kboltz*temp(i)/dg0)*log(one + (epsp(i)/deps0)))**mexp
321 yld(i) = sighard(i) + sigrate(i)
323 IF (fisokin > zero)
THEN
324 yl0(i) = yl0(i) + sigrate(i)
326 yld(i) = (one-fisokin)*yld(i)+fisokin*yl0(i)
328 yld(i) =
max(em10, yld(i))
338 IF (fisokin > zero)
THEN
339 signxx(i) = sigoxx(i) - siga(i,1) + a11*depsxx(i) + a12*depsyy(i)
340 signyy(i) = sigoyy(i) - siga(i,2) + a12*depsxx(i) + a11*depsyy(i)
341 signxy(i) = sigoxy(i) - siga(i,3) + g*depsxy(i)
342 sigexx(i) = signxx(i)
344 sigexy(i) = signxy(i)
346 signxx(i) = sigoxx(i) + a11*depsxx(i) + a12*depsyy(i)
347 signyy(i) = sigoyy(i) + a11*depsyy(i) + a12*depsxx(i)
348 signxy(i) = sigoxy(i) + depsxy(i)*g
350 signyz(i) = sigoyz(i) + depsyz(i)*gs(i)
351 signzx(i) = sigozx(i) + depszx(i)*gs(i)
354 normsig = sqrt(signxx(i)*signxx(i)
355 . + signyy(i)*signyy(i)
356 . + two*signxy(i)*signxy(i))
357 IF (normsig < em20)
THEN
362 mohr_radius = sqrt(((signxx(i)-signyy(i))/two)**2 + signxy(i)**2)
363 mohr_center = (signxx(i)+signyy(i))/two
364 sig1(i) = mohr_center + mohr_radius
365 sig2(i) = mohr_center - mohr_radius
366 IF (mohr_radius>em20)
THEN
367 cos2theta(i) = ((signxx(i)-signyy(i))/two)/mohr_radius
368 sin2theta(i) = signxy(i)/mohr_radius
375 fsh_theta(i,1:2) = zero
376 fps_theta(i,1:2) = zero
379 fsh_theta(i,1:2) = fsh_theta(i,1
380 fps_theta(i,1:2) = fps_theta(i,1:2) + q_fps
385 IF (sig1(i)<zero .OR. ((sig2(i)<zero) .AND. (sig2(i)*fsh_theta(i,1)<sig1(i)*fsh_theta(i,2))))
THEN
386 cos2theta(i) = -cos2theta(i)
387 sin2theta(i) = -sin2theta(i)
391 sign_changed(i) = .true.
393 fsh_theta(i,1:2) = zero
394 fps_theta(i,1:2) = zero
397 fsh_theta(i,1:2) = fsh_theta(i,1:2) + q_fsh(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
398 fps_theta(i,1:2) = fps_theta(i
402 sign_changed(i) = .false.
405 IF (sig2(i)<zero)
THEN
408 hish_theta(i,1:2) = zero
411 fun_theta(i,1) = fun_theta(i
412 hish_theta(i,1:2) = hish_theta(i,1:2) + q_hish(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
416 a(1:2) = fsh_theta(i,1:2)
417 b(1:2) = hish_theta(i,1:2)
420 ELSEIF (sig2(i)/sig1(i)<fps_theta(i,2)/fps_theta(i,1))
THEN
421 ! interpolation of factors
422 fun_theta(i,1:2) = zero
423 hiun_theta(i,1:2) = zero
426 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2
427 hiun_theta(i,1:2) = hiun_theta(i,1:2) + q_hiun(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
431 a(1:2) = fun_theta(i,1:2)
432 b(1:2) = hiun_theta(i,1:2)
433 c(1:2) = fps_theta(i,1:2)
437 hips_theta(i,1:2) = zero
440 hips_theta(i,1:2) = hips_theta(i,1:2) + q_hips(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
444 a(1:2) = fps_theta(i,1:2)
445 b(1:2) = hips_theta(i,1:2)
449 IF (sig1(i)<em20)
THEN
453 sig_ratio = sig2(i)/sig1(i)
455 var_b = two*((b(2)-a(2)) - sig_ratio
456 var_c = a(2) - sig_ratio*a(1)
457 IF (abs(var_a)<em08)
THEN
462 sigvg(i) = sig1(i)/(a(1)+two*mu(i)*(b(1)-a(1))+mu(i)*mu(i)*(c(1)+a(1)-two*b(1)))
476 IF (phi(i) > zero .AND. off(i) == one)
THEN
489 ! loop over yielding elements
490#include "vectorize.inc"
496 ! initialization of
the iterative newton procedure
507#include "vectorize.inc"
518 ! -> dphi_dlambda : derivative of phi with respect to dlambda by taking
527 IF (sig2(i)<zero)
THEN
528 a(1:2) = fsh_theta(i,1:2)
529 b(1:2) = hish_theta(i
530 c(1:2) = fun_theta(i,1:2)
540 da_dcos2(1:2) = da_dcos2(1:2) + q_fsh(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
541 db_dcos2(1:2) = db_dcos2(1:2) + q_hish(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
542 dc_dcos2(1) = dc_dcos2(1) + q_fun(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
547 ELSEIF (sig2(i)/sig1(i)<fps_theta(i,2)/fps_theta(i,1))
THEN
548 a(1:2) = fun_theta(i,1:2)
549 b(1:2) = hiun_theta(i,1:2)
550 c(1:2) = fps_theta(i,1:2)
560 da_dcos2(1) = da_dcos2(1) + q_fun(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
561 db_dcos2(1:2) = db_dcos2(1:2) + q_hiun(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
562 dc_dcos2(1:2) = dc_dcos2(1:2) + q_fps(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
568 a(1:2) = fps_theta(i,1:2)
569 b(1:2) = hips_theta(i,1:2)
580 da_dcos2(1:2) = da_dcos2(1:2) + q_fps(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
581 db_dcos2(1:2) = db_dcos2(1:2) + q_hips
588 df1_dcos2 = da_dcos2(1) + two*mu(i)*(db_dcos2(1)-da_dcos2(1)) +
589 . mu(i)*mu(i)*(da_dcos2(1)+dc_dcos2(1)-two*db_dcos2(1))
590 df2_dcos2 = da_dcos2(2) + two*mu(i)*(db_dcos2(2)-da_dcos2(2)) +
594 f1 = mu(i)*mu(i)*(a(1)+c(1)-two*b
595 f2 = mu(i)*mu(i)*(a(2)+c(2)-two*b(2))+two*mu(i)*(b(2)-a(2))+a(2)
598 df1_dmu = two*(b(1)-a(1)) + two*mu(i)*(a(1)+c(1)-two*b(1))
599 df2_dmu = two*(b(2)-a(2)) + two*mu(i)*(a(2)+c(2)-two*b(2))
602 IF ((f1*df2_dmu - f2*df1_dmu)/=zero)
THEN
603 dphi_dsig1 = df2_dmu/(f1*df2_dmu - f2*df1_dmu)
604 dphi_dsig2 = -df1_dmu/(f1*df2_dmu - f2*df1_dmu)
605 IF (abs(sig1(i)-sig2(i))>tol)
THEN
606 dphi_dcos2 = (sigvg(i)/(sig1(i) - sig2(i)))*(df2_dcos2*df1_dmu -
607 . df1_dcos2*df2_dmu)/(f1*df2_dmu - f2*df1_dmu
609 dphi_dcos2 = (two*((one-mu(i))*da_dcos2(2)+two
610 . two*((one-mu(i))*da_dcos2(1)+two*mu(i)*db_dcos2(1))*df2_dmu)/
611 . ((one-mu(i))*(a(1)-a(2)) + two*mu(i)*(b(1)-b(2)))
618 normxx = half*(one + cos2theta
619 . (sin2theta(i)**2)*dphi_dcos2
620 normyy = half*(one - cos2theta(i))*dphi_dsig1 + half*(one+cos2theta(i))*dphi_dsig2 -
621 . (sin2theta(i)**2)*dphi_dcos2
622 normxy = sin2theta(i)*dphi_dsig1 - sin2theta(i)*dphi_dsig2 -
623 . (two*sin2theta(i)*cos2theta(i))*dphi_dcos2
624 IF (sign_changed(i))
THEN
635 dfdsig2 = normxx * (a11*normxx + a12*normyy)
636 . + normyy * (a11*normyy + a12*normxx)
637 . + normxy * normxy * g
644 IF (numtabl == 0)
THEN
646 hardp(i) = dsigm*beta
647 IF (pla(i)>zero)
THEN
648 hardp(i) = hardp(i) + dsigm*(nexp*(one-exp(-omega*(pla(i))))**(nexp-one))*
649 . (omega*exp(-omega*(pla(i))))
653 dyld_dpla(i) = (one-fisokin)*hardp(i)
657 sig_dfdsig = signxx(i) * normxx
658 . + signyy(i) * normyy
659 . + signxy(i) * normxy
660 dpla_dlam(i) = sig_dfdsig/yld(i)
666 dphi_dlam(i) = - dfdsig2 - dyld_dpla(i)*dpla_dlam(i)
667 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
670 dlam = -phi(i)/dphi_dlam(i)
673 dpxx(i) = dlam * normxx
674 dpyy(i) = dlam * normyy
675 dpxy(i) = dlam * normxy
678 signxx(i) = signxx(i) - (a11*dpxx(i) + a12*dpyy(i))
679 signyy(i) = signyy(i) - (a11*dpyy(i
680 signxy(i) = signxy(i) - dpxy(i)*g
683 ddep = dlam*sig_dfdsig/yld(i)
684 dpla(i) =
max(zero, dpla(i) + ddep)
685 pla(i) = pla(i) + ddep
688 normsig = sqrt(signxx(i)*signxx(i)
689 . + signyy(i)*signyy(i)
690 . + two*signxy(i)*signxy(i))
691 IF (normsig < em20)
THEN
695 mohr_radius = sqrt(((signxx(i)-signyy(i))/two)**2 + signxy(i)**2)
696 mohr_center = (signxx(i)+signyy(i))/two
697 sig1(i) = mohr_center + mohr_radius
698 sig2(i) = mohr_center - mohr_radius
699 IF (mohr_radius>em20)
THEN
700 cos2theta(i) = ((signxx(i)-signyy(i))/two)/mohr_radius
701 sin2theta(i) = signxy(i)/mohr_radius
707 fsh_theta(i,1:2) = zero
708 fps_theta(i,1:2) = zero
711 fsh_theta(i,1:2) = fsh_theta(i,1:2) + q_fsh(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
712 fps_theta(i,1:2) = fps_theta(i,1:2) + q_fps(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
717 cos2theta(i) = -cos2theta(i)
718 sin2theta(i) = -sin2theta(i)
722 sign_changed(i) = .true.
723 fsh_theta(i,1:2) = zero
724 fps_theta(i,1:2) = zero
727 fsh_theta(i,1:2) = fsh_theta(i,1:2) + q_fsh(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
728 fps_theta(i,1:2) = fps_theta(i,1:2) + q_fps(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
732 sign_changed(i) = .false.
735 IF (sig2(i)<zero)
THEN
737 fun_theta(i,1:2) = zero
738 hish_theta(i,1:2) = zero
741 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2(k,j)*(cos2theta(i))**(k-1)
742 hish_theta(i,1:2) = hish_theta(i,1:2) + q_hish(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
746 a(1:2) = fsh_theta(i,1:2)
747 b(1:2) = hish_theta(i,1:2)
748 c(1:2) = fun_theta(i,1:2)
750 ELSEIF (sig2(i)/sig1(i)<fps_theta(i,2)/fps_theta(i
THEN
752 fun_theta(i,1:2) = zero
753 hiun_theta(i,1:2) = zero
756 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2(k,j)*(cos2theta(i))**(k-1)
757 hiun_theta(i,1:2) = hiun_theta(i,1:2) + q_hiun(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
761 a(1:2) = fun_theta(i,1:2)
762 b(1:2) = hiun_theta(i,1:2)
763 c(1:2) = fps_theta(i,1:2)
767 hips_theta(i,1:2) = zero
770 hips_theta(i,1:2) = hips_theta(i,1:2) + q_hips(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
774 a(1:2) = fps_theta(i,1:2)
775 b(1:2) = hips_theta(i,1:2)
779 IF (sig1(i)<em20)
THEN
783 sig_ratio = sig2(i)/sig1(i)
784 var_a = (c(2)+a(2)-two*b(2)) - sig_ratio*(c(1)+a(1)-two*b(1))
785 var_b = two*((b(2)-a(2)) - sig_ratio*(b(1)-a(1)))
786 var_c = a(2) - sig_ratio*a(1)
792 sigvg(i) = sig1(i)/(a(1)+two*mu(i)*(b(1)-a
796 IF (numtabl == 0)
THEN
798 sighard(i) = yld0 + dsigm*(beta*(pla(i))+(one-exp(-omega*(pla(i))))**nexp)
800 yld(i) = sighard(i) + sigrate(i)
801 yld(i) = (one-fisokin)*yld(i)+fisokin*yl0(i)
802 yld(i) =
max(yld(i), em10)
804 phi(i) = sigvg(i) - yld(i)
809 dezz(i) = dezz(i) - (dpxx(i)+dpyy(i
816 IF ((numtabl > 0).AND.(nindx > 0))
THEN
817 xvec(1:nel,1) = pla(1:nel)
818 xvec(1:nel,2) = epsp(1:nel) * xscale
819 ipos(1:nel,1) = vartmp(1:nel,1)
822 yld(1:nel) = yld(1:nel) * yscale
823 hardp(1:nel) = hardp(1:nel) * yscale
824 vartmp(1:nel,1) = ipos(1:nel,1)
825 ! tabulation with temperature
826 IF (numtabl == 2)
THEN
829 ipos(1:nel,1) = vartmp(1:nel,2)
830 ipos(1:nel,2) = vartmp(1:nel,3)
831 CALL table_vinterp(table(itable(2)),nel,nel,ipos,xvec,yld_tref,dydx)
832 vartmp(1:nel,2) = ipos(1:nel,1)
833 vartmp(1:nel,3) = ipos(1:nel,2)
835 xvec(1:nel,2) = temp(1:nel)
836 CALL table_vinterp(table(itable(2)),nel,nel,ipos,xvec,yld_temp,dydx)
837 tfac(1:nel) = yld_temp(1:nel) / yld_tref(1:nel)
838 yld(1:nel) = yld(1:nel) * tfac(1:nel)
839 hardp(1:nel) = hardp(1:nel) * tfac(1:nel)
844 yld(1:nel) = (one-fisokin)*yld(1:nel)+fisokin*yl0(1:nel)
846 phi(1:nel) = sigvg(1:nel) - yld(1:nel)
856 IF (fisokin > zero)
THEN
858 dsxx = sigexx(i) - signxx(i)
859 dsyy = sigeyy(i) - signyy(i)
860 dsxy = sigexy(i) - signxy(i)
861 dexx = (dsxx - nu*dsyy)
862 deyy = (dsyy - nu*dsxx)
863 dexy = two*(one+nu)*dsxy
864 alpha = fisokin*hardp(i)/(young+hardp(i))*third
865 signxx(i) = signxx(i) + siga(i,1)
866 signyy(i) = signyy(i) + siga(i,2)
867 signxy(i) = signxy(i) + siga(i,3)
868 siga(i,1) = siga(i,1) +
alpha*(four*dexx+two*deyy)
869 siga(i,2) = siga(i,2) +
alpha*(four*deyy+two*dexx)
870 siga(i,3) = siga(i,3) +
alpha*dexy
878 dpdt = dpla(i)/
max(em20,timestep)
879 uvar(i,1) = asrate * dpdt + (one - asrate) * uvar(i,1)
885 IF (dpla(i) > zero)
THEN
886 et(i) = hardp(i) / (hardp(i) + young)
891 soundsp(i) = sqrt(a11/rho(i))
895 deelzz(i) = -nu*(signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/young
897 IF ((inloc > 0).AND.(loff(i) == one))
THEN
899 mohr_radius = sqrt(((signxx(i)-signyy(i))/two)**2 + signxy(i)**2)
900 mohr_center = (signxx(i)+signyy(i))/two
901 sig1(i) = mohr_center + mohr_radius
902 sig2(i) = mohr_center - mohr_radius
903 IF (mohr_radius>em20)
THEN
904 cos2theta(i) = ((signxx(i)-signyy(i))/two)/mohr_radius
905 sin2theta(i) = signxy(i)/mohr_radius
911 fsh_theta(i,1:2) = zero
912 fps_theta(i,1:2) = zero
915 fsh_theta(i,1:2) = fsh_theta(i,1:2) + q_fsh(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
916 fps_theta(i,1:2) = fps_theta(i,1:2) + q_fps(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
920 IF (sig1(i)<zero .OR. ((sig2(i)<zero) .AND. (sig2(i)*fsh_theta(i,1)<sig1(i)*fsh_theta(i,2))))
THEN
921 cos2theta(i) = -cos2theta(i)
922 sin2theta(i) = -sin2theta(i)
926 sign_changed(i) = .true.
928 fsh_theta(i,1:2) = zero
929 fps_theta(i,1:2) = zero
932 fsh_theta(i,1:2) = fsh_theta(i,1:2) + q_fsh(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
933 fps_theta(i,1:2) = fps_theta(i,1:2) + q_fps(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
937 sign_changed(i) = .false.
940 IF (sig2(i)<zero)
THEN
942 fun_theta(i,1:2) = zero
943 hish_theta(i,1:2) = zero
946 fun_theta(i,1) = fun_theta(i,1) + q_fun
947 hish_theta(i,1:2) = hish_theta(i,1:2) + q_hish(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
951 a(1:2) = fsh_theta(i,1:2)
952 b(1:2) = hish_theta(i,1:2)
953 c(1:2) = fun_theta(i,1:2)
963 da_dcos2(1:2) = da_dcos2(1:2) + q_fsh(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
964 db_dcos2(1:2) = db_dcos2(1:2) + q_hish
965 dc_dcos2(1) = dc_dcos2(1) + q_fun(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
970 ELSEIF (sig2(i)/sig1(i)<fps_theta(i,2)/fps_theta(i,1))
THEN
972 fun_theta(i,1:2) = zero
973 hiun_theta(i,1:2) = zero
976 fun_theta(i,1) = fun_theta(i,1) + q_fun(j)*cos2(k,j)*(cos2theta(i))**(k-1)
977 hiun_theta(i,1:2) = hiun_theta(i,1:2) + q_hiun(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
981 a(1:2) = fun_theta(i,1:2)
982 b(1:2) = hiun_theta(i,1:2)
983 c(1:2) = fps_theta(i,1:2)
993 da_dcos2(1) = da_dcos2(1) + q_fun(j)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
994 db_dcos2(1:2) = db_dcos2(1:2) + q_hiun(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
995 dc_dcos2(1:2) = dc_dcos2(1:2) + q_fps(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
1002 hips_theta(i,1:2) = zero
1005 hips_theta(i,1:2) = hips_theta(i,1:2) + q_hips(j,1:2)*cos2(k,j)*(cos2theta(i))**(k-1)
1009 a(1:2) = fps_theta(i,1:2)
1010 b(1:2) = hips_theta(i,1:2)
1013 da_dcos2(1:2) = zero
1014 db_dcos2(1:2) = zero
1015 dc_dcos2(1:2) = zero
1017 IF (nangle > 1)
THEN
1021 da_dcos2(1:2) = da_dcos2(1:2) + q_fps(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
1022 db_dcos2(1:2) = db_dcos2(1:2) + q_hips(j,1:2)*(k-1)*cos2(k,j)*(cos2theta(i))**(k-2)
1028 IF (sig1(i)<em20)
THEN
1032 sig_ratio = sig2(i)/sig1(i)
1033 var_a = (c(2)+a(2)-two*b(2)) - sig_ratio*(c(1)+a(1)-two*b(1))
1034 var_b = two*((b(2)-a(2)) - sig_ratio*(b(1)-a(1)))
1035 var_c = a(2) - sig_ratio*a(1)
1036 IF (abs(var_a)<em08)
THEN
1037 mu(i) = -var_c/var_b
1039 mu(i) = (-var_b+sqrt(var_b*var_b - four*var_a*var_c))/(two*var_a)
1041 sigvg(i) = sig1(i)/(a(1)+two*mu(i)*(b(1)-a(1))+mu(i)*mu(i)*(c(1)+a(1)-two*b(1)))
1044 df1_dcos2 = da_dcos2(1) + two*mu(i)*(db_dcos2(1)-da_dcos2(1)) +
1045 . mu(i)*mu(i)*(da_dcos2(1)+dc_dcos2(1)-two*db_dcos2(1))
1046 df2_dcos2 = da_dcos2(2) + two*mu(i)*(db_dcos2(2)-da_dcos2(2)) +
1047 . mu(i)*mu(i)*(da_dcos2(2)+dc_dcos2(2)-two*db_dcos2(2))
1049 f1 = mu(i)*mu(i)*(a(1)+c(1)-two*b(1))+two*mu(i)*(b(1)-a(1))+a(1)
1052 df1_dmu = two*(b(1)-a(1)) + two*mu(i
1053 df2_dmu = two*(b(2)-a(2)) + two*mu(i)*(a(2)+c(2)-two*b(2))
1055 IF ((f1*df2_dmu - f2*df1_dmu)/=zero)
THEN
1056 dphi_dsig1 = df2_dmu/(f1*df2_dmu - f2*df1_dmu)
1058 IF (abs(sig1(i)-sig2(i))>tol)
THEN
1059 dphi_dcos2 = (sigvg(i)/(sig1(i) - sig2(i)))*(df2_dcos2*df1_dmu -
1060 . df1_dcos2*df2_dmu)/(f1*df2_dmu - f2*df1_dmu)
1062 dphi_dcos2 = (two*((one-mu(i))*da_dcos2(2)+two*mu(i)*db_dcos2(2))*df1_dmu -
1063 . two*((one-mu(i))*da_dcos2(1)+two*mu(i)*db_dcos2(1))*df2_dmu)/
1064 . ((one-mu(i))*(a(1)-a(2)) + two*mu(i)*(b(1)-b(2)))
1071 normxx = half*(one + cos2theta(i))*dphi_dsig1 + half*(one-cos2theta(i))*dphi_dsig2 +
1072 . (sin2theta(i)**2)*dphi_dcos2
1073 normyy = half*(one - cos2theta(i))*dphi_dsig1 + half*(one+cos2theta(i))*dphi_dsig2 -
1074 . (sin2theta(i)**2)*dphi_dcos2
1075 normxy = sin2theta(i)*dphi_dsig1 - sin2theta(i)*dphi_dsig2 -
1076 . (two*sin2theta(i)*cos2theta(i))*dphi_dcos2
1077 IF (sign_changed(i))
THEN
1082 sig_dfdsig = signxx(i) * normxx
1083 . + signyy(i) * normyy
1084 . + signxy(i) * normxy
1085 IF (sig_dfdsig > zero)
THEN
1086 dezz(i) = -
max(dplanl(i),zero)*(yld(i)/sig_dfdsig)*(normxx+normyy)
1091 dezz(i) = deelzz(i) + dezz(i)
1092 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)