35 1 NEL ,NUPARAM ,NUVAR ,MFUNC ,KFUNC ,
36 2 NPF ,NPT0 ,IPT ,IFLAG ,
37 2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,
38 3 AREA ,EINT ,THKLY ,ISRATE ,ASRATE ,
39 4 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,
40 5 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
41 6 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
42 7 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
43 8 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
44 9 SIGVXX ,SIGVYY ,SIGVXY ,SIGVYZ ,SIGVZX ,
45 A SOUNDSP,VISCMAX ,THK ,PLA ,UVAR ,
46 B OFF ,NGL ,IPM ,MAT ,ETSE ,
47 C GS ,YLD ,EPSD_PG ,EPSP ,INLOC ,
48 D DPLANL ,MAT_PARAM,NUVARV ,UVARV ,LOFF )
56#include "implicit_f.inc"
108#include "param_c.inc"
109#include "com01_c.inc"
113 INTEGER ,
INTENT(IN) :: NUVARV
114 INTEGER , NUPARAM, NUVAR, NPT0, IPT,IFLAG(*),
115 . NGL(NEL),MAT(NEL),ISRATE,IPM(NPROPMI,*),INLOC
116 my_real ,
INTENT(IN) :: ASRATE
117 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: EPSD_PG
118 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: EPSP
120 . TIME,TIMESTEP(NEL),UPARAM(*),
121 . AREA(NEL),RHO0(NEL),EINT(NEL,2),
122 . THKLY(NEL),PLA(NEL),
123 . EPSPXX(NEL),EPSPYY(NEL),
124 . EPSPXY(NEL),EPSPYZ(NEL),(NEL),
125 . DEPSXX(NEL),DEPSYY(NEL),
126 . DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
127 . epsxx(nel) ,epsyy(nel) ,
128 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,
129 . sigoxx(nel),sigoyy(nel),
130 . sigoxy(nel),sigoyz(nel),sigozx(nel),
132 TYPE(matparam_struct_) ,
INTENT(IN) :: MAT_PARAM
133 my_real,
DIMENSION(NEL),
INTENT(IN) :: loff
138 . signxx(nel),signyy(nel),
139 . signxy(nel),signyz(nel),signzx(nel),
140 . sigvxx(nel),sigvyy(nel),
141 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
142 . soundsp(nel),viscmax(nel),etse(nel),
147 my_real ,
DIMENSION(NEL,NUVARV) ,
INTENT(INOUT) :: uvarv
148 my_real ,
INTENT(INOUT) :: uvar(nel,nuvar), off(nel),thk(nel),yld(nel)
152 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
154 . FINTER ,TF(*),FINTER2
155 EXTERNAL FINTER,FINTER2
166 INTEGER I,J,N,NINDX,NMAX,IRATE,NCC,NCT,NFUNC,
167 . j1,j2,nprony,iadbuf,
168 . iad1(nel),ipos1(nel),ilen1(nel),
169 . iad2(nel),ipos2(nel),ilen2(nel),
170 . index(nel),jjc(nel),jjt(nel),ifunc(mfunc)
171 my_real ec, e1t,a11t,a21t,g1t,
172 . yfacc,yfact,cp,edp,fisokin,
173 . nu,pc,pt,rpct, epspo,nnu11,epsp0,g31,dsxx,dsyy,dsxy,
174 . dexx,deyy,dexy,sigpxx,sigpyy,sigpxy,kv,vp,sigy,
175 . fac,epd,nu31,r,umr,dezz,s2,s3,nu11,s1,nu21,
176 . nu110,nu210,p2,q2,f,df,a,yld_i,yrate,hkin,
alpha,
179 . rate0(mfunc),gv(100),beta(100),yfac(mfunc)
180 my_real ,
DIMENSION(NEL) ::
181 . e, a11 , a21, g,g3,c1, sigexx ,sigeyy ,sigexy ,
182 . dydx1 ,dydx2 ,svm ,
184 . hk ,nnu1 ,hi ,dpla_j ,
185 . aa ,bb ,dr ,pp ,qq ,
187 . y2 ,ht ,rate ,hc ,epspzz
193 iadbuf = ipm(7,mat(1))
195 irate = nint(uparam(iadbuf ))
196 e1t = uparam(iadbuf +1)
197 a11t = uparam(iadbuf +2)
198 a21t = uparam(iadbuf +3)
199 g1t = uparam(iadbuf +4)
200 nu = uparam(iadbuf +5)
201 pc = uparam(iadbuf +6)
202 pt = uparam(iadbuf +7)
203 epsp0 = uparam(iadbuf +8)
204 cp = uparam(iadbuf +9)
205 ncc = nint(uparam(iadbuf +10))
206 nct = nint(uparam(iadbuf +11))
207 fisokin = uparam(iadbuf + 12)
209 nfunc = ipm(10,mat(1))
212 ifunc(i) = ipm(10+i,mat(1))
213 yfac(i) = uparam(iadbuf +12+i)
214 rate0(i) = uparam(iadbuf +12+nfunc + i)
217 sigy = uparam(iadbuf + 13 + 2*mfunc)
218 vp = uparam(iadbuf + 14 + 2*mfunc)
220 ec = uparam(iadbuf + 15 + 2*mfunc)
221 rpct = uparam(iadbuf + 16 + 2*mfunc)
223 IF(vp /=0 .and .iflag(1) /= 1) vp = 0
225 nnu11 = nu / (one - nu)
244 signxx(i)=sigoxx(i) - uvar(i,2) + a11t*depsxx(i)+a21t*depsyy(i)
245 signyy(i)=sigoyy(i) - uvar(i,3) + a21t*depsxx(i)+a11t*depsyy(i)
246 p(i) = -third*(signxx(i) + signyy(i) )
252 IF(pc == zero .and. pt == zero .AND. abs(p(i)) < em10)
THEN
254 ELSEIF(p(i) <= - rpct * pt)
THEN
256 ELSEIF(p(i) >= rpct *pc)
THEN
259 fac = rpct *(pc + pt)
260 fac = (rpct * pc - p(i))/fac
261 e(i) = fac*e1t + (one -fac)*ec
266 g(i) = half*e(i)/( one + nu)
267 a11(i) = e(i)/(one - nu*nu)
281 signxx(i)=sigoxx(i) - uvar(i,2) + a11(i)*depsxx(i)+a21(i)*depsyy(i)
282 signyy(i)=sigoyy(i) - uvar(i,3) + a21(i)*depsxx(i)+a11(i)*depsyy(i)
283 signxy(i)=sigoxy(i) - uvar(i,4) + g(i) *depsxy(i)
284 signyz(i)=sigoyz(i) + gs(i) *depsyz(i)
285 signzx(i)=sigozx(i) + gs(i) *depszx(i)
287 sigexx(i) = signxx(i)
288 sigeyy(i) = signyy(i)
289 sigexy(i) = signxy(i)
291 p(i) = -third*(signxx(i) + signyy(i) )
293 soundsp(i) = sqrt(a11t/rho0(i))
299 IF (israte == 0)
THEN
300 epsp(i) = half*( abs(epspxx(i)+epspyy(i))
301 . + sqrt( (epspxx(i)-epspyy(i))*(epspxx(i)-epspyy(i))
302 . + epspxy(i)*epspxy(i) ) )
304 epsp(i) = asrate*epsd_pg(i) + (one-asrate)*epsp(i)
314 ipos1(i) = nint(uvar(i,5))
315 iad1(i) = npf(ifunc(1)) / 2 + 1
316 ilen1(i) = npf(ifunc(1)+1) / 2 - iad1(i)-ipos1(i)
317 ipos2(i) = nint(uvar(i,6))
318 iad2(i) = npf(ifunc(2)) / 2 + 1
319 ilen2(i) = npf(ifunc(2) + 1) / 2 - iad2(i)-ipos2(i)
325 CALL vinter(tf,iad1,ipos1,ilen1,nel,pla,dydx1,yc)
326 CALL vinter(tf,iad2,ipos2,ilen2,nel,pla,dydx2,yt)
328 IF(fisokin == zero)
THEN
332 hc(i)=dydx1(i)*yfac(1)
333 ht(i)=dydx2(i)*yfac(2)
335 ELSEIF(fisokin == one )
THEN
337 hc(i)=dydx1(i)*yfac(1)
338 ht(i)=dydx2(i)*yfac(2)
339 yc(i)=tf(npf(ifunc(1)) + 1)
340 yt(i)=tf(npf(ifunc(2)) + 1)
343 yc(i) =
max(em20, yc(i))
344 yt(i) =
max(em20, yt(i))
350 yc(i) =
max(yc(i),em20)
351 yt(i) =
max(yt(i),em20)
352 hc(i) = dydx1(i)*yfac(1)
353 ht(i) = dydx2(i)*yfac(2)
355 y1(i)=yfac(1)*tf(npf(ifunc(1))+1)
356 y2(i)=yfac(2)*tf(npf(ifunc(2))+1)
357 yc(i) = (one - fisokin) * yc(i) + fisokin * y1(i)
358 yt(i) = (one - fisokin) * yt(i) + fisokin * y2(i)
368 IF(epsp(i) >= rate0(j) ) jjc(i) = j
373 rate(i)=(epsp(i) - fac)/(rate0(jjc(i) +1) - fac)
378 ipos1(i) = nint(uvar(i,4+j1 ))
379 iad1(i) = npf(ifunc(j1)) / 2 + 1
380 ilen1(i) = npf(ifunc(j1)+1) / 2 - iad1(i)-ipos1(i)
381 ipos2(i) = nint(uvar(i,4+j2))
382 iad2(i) = npf(ifunc(j2)) / 2 + 1
383 ilen2(i) = npf(ifunc(j2)+1) / 2 - iad2(i)-ipos2(i)
385 uvar(i,4+j1) = ipos1(i)
386 uvar(i,4+j2) = ipos2(i)
388 CALL vinter(tf,iad1,ipos1,ilen1,nel,pla,dydx1,y1)
389 CALL vinter(tf,iad2,ipos2,ilen2,nel,pla,dydx2,y2)
391 IF (fisokin == zero)
THEN
398 yc(i) =(y1(i) + fac*(y2(i)-y1(i)))
399 yc(i) =
max(yc(i),em20)
400 dydx1(i)=dydx1(i)*yfac(j1)
401 dydx2(i)=dydx2(i)*yfac(j2)
402 hc(i) = (dydx1(i) + fac*(dydx2(i)-dydx1(i)))
404 ELSEIF (fisokin == one )
THEN
409 dydx1(i)=dydx1(i)*yfac(j1)
410 dydx2(i)=dydx2(i)*yfac(j2)
411 hc(i) =(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
413 y1(i)=tf(npf(ifunc(j1)) + 1)
414 y2(i)=tf(npf(ifunc(j2)) + 1)
417 yc(i) = (y1(i) + fac*(y2(i)-y1(i)))
418 yc(i) =
max(em20,yc(i))
427 yc(i) = (y1(i) + fac*(y2(i)-y1(i)))
428 yc(i) =
max(yc(i),em20)
429 dydx1(i)=dydx1(i)*yfac(j1)
430 dydx2(i)=dydx2(i)*yfac(j2)
431 hc(i) = (dydx1(i) + fac*(dydx2(i)-dydx1(i)))
433 y1(i)=tf(npf(ifunc(j1))+1)
434 y2(i)=tf(npf(ifunc(j2))+1)
437 yc(i) = (one - fisokin) * yc(i) +
438 . fisokin * ((y1(i) + fac*
446 IF(epsp(i) >= rate0(ncc+j)) jjt(i) = ncc + j
456 ipos1(i) = nint(uvar(i,4+j1))
457 iad1(i) = npf(ifunc(j1)) / 2 + 1
458 ilen1(i) = npf(ifunc(j1)+1) / 2 - iad1(i)-ipos1(i)
459 ipos2(i) = nint(uvar(i,4+j2))
460 iad2(i) = npf(ifunc(j2)) / 2 + 1
461 ilen2(i) = npf(ifunc(j2)+1) / 2 - iad2(i)-ipos2(i)
463 uvar(i,4+j1) = ipos1(i)
464 uvar(i,4+j2) = ipos2(i)
466 CALL vinter(tf,iad1,ipos1,ilen1,nel,pla,dydx1,y1)
467 CALL vinter(tf,iad2,ipos2,ilen2,nel,pla,dydx2,y2)
469 IF (fisokin == zero)
THEN
476 yt(i) =(y1(i) + fac*(y2(i)-y1(i)))
477 yt(i) =
max(yt(i),em20)
478 dydx1(i)=dydx1(i)*yfac(j1)
479 dydx2(i)=dydx2(i)*yfac(j2)
480 ht(i) = (dydx1(i) + fac*(dydx2(i)-dydx1(i)))
482 ELSEIF (fisokin == one )
THEN
487 dydx1(i)=dydx1(i)*yfac(j1)
488 dydx2(i)=dydx2(i)*yfac(j2)
489 ht(i) =(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
491 y1(i)=yfac(j1)*tf(npf(ifunc(j1)) + 1)
492 y2(i)=yfac(j2)*tf(npf(ifunc(j2)) + 1)
493 yt(i) = (y1(i) + fac*(y2(i)-y1(i)))
494 yt(i) =
max(em20,yt(i))
503 yt(i) = (y1(i) + fac*(y2(i)-y1(i)))
504 yt(i) =
max(yt(i),em20)
505 dydx1(i)=dydx1(i)*yfac(j1)
506 dydx2(i)=dydx2(i)*yfac(j2)
507 ht(i) = (dydx1(i) + fac*(dydx2(i)-dydx1(i)))
509 y1(i)=yfac(j1)*tf(npf(ifunc(j1))+1)
510 y2(i)=yfac(j2)*tf(npf(ifunc(j2))+1)
511 yt(i) = (one - fisokin) * yt(i) +
512 . fisokin * ((y1(i) + fac*(y2(i)-y1(i))))
521 yrate = yfac(3)*finter(ifunc(3),epsp(i),npf,tf,df)
525 yrate = yfac(4)*finter(ifunc(4),epsp(i),npf,tf,df)
532 IF(pc == zero .AND. pt == zero .AND. abs(p(i)) < em10)
THEN
533 yld(i) =
max(yc(i), em20)
535 ELSEIF(p(i) <= -pt)
THEN
536 yld(i) =
max(yt(i),em20)
538 ELSEIF(p(i) >= pc)
THEN
539 yld(i) =
max(yc(i), em20)
543 fac = (pc - p(i))/fac
544 yld(i) = fac*yt(i) + (one -fac)*yc(i)
545 yld(i) =
max(em20,yld(i))
546 h(i) = fac*ht(i) + (one -fac)*hc(i)
555 epd =
max(em20,epsp(i)/epsp0)
556 yrate = one + exp(cp*log(epd))
557 yld(i) = yld(i)*yrate
561 ELSEIF(irate == 2)
THEN
563 epd =
max(em20,epsp(i)/epsp0)
564 yrate = one + cp*log(epd)
565 yld(i) = yld(i)*yrate
573 IF(iflag(1) == 0)
THEN
577 svm(i)=sqrt(signxx(i)*signxx(i)
578 . +signyy(i)*signyy(i)
579 . -signxx(i)*signyy(i)
580 . +three*signxy(i)*signxy(i))
581 r =
min(one,yld(i)/
max(em20,svm(i)))
582 signxx(i)=signxx(i)*r
583 signyy(i)=signyy(i)*r
584 signxy(i)=signxy(i)*r
586 dpla_i(i) = off(i)*svm(i)*umr/(g3(i)+h(i))
587 pla(i) = pla(i) + dpla_i(i)
588 s1=half*(signxx(i)+signyy(i))
590 dezz = dpla_i(i) * half*(signxx(i)+signyy(i)) / yld(i)
591 dezz=-(depsxx(i)+depsyy(i))*nnu11-nu31*dezz
592 thk(i) = thk(i) + dezz*thkly(i)*off(i)
594 IF(r<one) etse(i)= h(i)/(h(i)+e(i))
597 ELSEIF(iflag(1)==1)
THEN
602 h(i) =
max(zero,h(i))
603 s1=signxx(i)+signyy(i)
604 s2=signxx(i)-signyy(i)
607 bb(i)=three_over_4*s2*s2+3.*s3*s3
608 svm(i)=sqrt(aa(i)+bb(i))
610 dezz = -(depsxx(i)+depsyy(i))*nnu11
611 thk(i) = thk(i) + dezz*thkly(i)*off(i)
619 IF(svm(i)>yld(i).AND.off(i)==one)
THEN
631 dpla_j(i)=(svm(i)-yld(i))/(g3(i)+h(i))
632 etse(i)= h(i)/(h(i)+e(i))
633 hi(i) = h(i)*(one-fisokin)
634 hk(i) = two_third*h(i)*fisokin
640 dtinv = timestep(i)/
max(em20, timestep(i)**2)
641 epd = dpla_j(i)*dtinv
642 epd =
max(em20,epd/epsp0)
643 yrate = one + exp(cp*log(epd))
644 IF(sigy == zero)
THEN
645 yld(i) = yld(i)*yrate
649 yld(i) = yld(i) + sigy*(yrate - one)
658#include "vectorize.inc"
662 yld_i =yld(i)+hi(i)*dpla_i(i)
663 dr(i) =half*e(i)*dpla_i(i)/yld_i
664 nu110 = nu11+three*hk(i)/e(i)
665 nu210 = nu21+hk(i)/e(i)
666 pp(i) =one/(one+dr(i)*nu110)
667 qq(i) =one/(one+three*dr(i)*nu210)
670 f =aa(i)*p2+bb(i)*q2-yld_i*yld_i
671 df =-(aa(i)*nu110*p2*pp(i)+three*bb(i)*nu210*q2*qq(i))
674 df = sign(
max(abs(df),em20),df)
675 IF(dpla_i(i)>zero)
THEN
676 dpla_j(i)=
max(zero,dpla_i(i)-f/df)
685#include "vectorize.inc"
688 pla(i) = pla(i) + dpla_i(i)
689 s1=(signxx(i)+signyy(i))*pp(i)
690 s2=(signxx(i)-signyy(i))*qq(i)
691 signxx(i)=half*(s1+s2)
692 signyy(i)=half*(s1-s2)
693 signxy(i)=signxy(i)*qq(i)
695 dezz = - nu31*dr(i)*s1/e(i)
696 thk(i) = thk(i) + dezz*thkly(i)*off(i)
701 ELSEIF(iflag(1)==2)
THEN
706 h(i) =
max(zero,h(i))
707 svm2(i)=signxx(i)*signxx(i)
708 . +signyy(i)*signyy(i)
709 . -signxx(i)*signyy(i)
710 . +three*signxy(i)*signxy(i)
713 dezz = -(depsxx(i)+depsyy(i))*nnu11
714 thk(i) = thk(i) + dezz*thkly(i)*off(i)
722 yld2(i)=yld(i)*yld(i)
723 IF(svm2(i)>yld2(i).AND.off(i)==one)
THEN
737 . /(five*svm2(i)+three*(-signxx(i)*signyy(i)+signxy(i)*signxy(i)))
738 s1=(one-two*a)*signxx(i)+ a*signyy(i)
739 s2= a*signxx(i)+(one-two*a)*signyy(i)
740 s3=(one-three*a)*signxy(i)
744 dpla_i(i) = off(i)*(svm(i)-yld(i))/(g3(i)+h(i))
746 hk(i) = h(i)*(one-fisokin)
747 yld(i)= yld(i)+hk(i)*dpla_i(i)
752 svm(i)= signxx(i)*signxx(i) + signyy(i)*signyy(i)
753 . - signxx(i)*signyy(i) + three*signxy(i)*signxy(i)
754 IF (svm(i) > yld(i)*yld(i))
THEN
755 svm(i) = sqrt(svm(i))
757 signxx(i) = signxx(i)*r
758 signyy(i) = signyy(i)*r
759 signxy(i) = signxy(i)*r
760 pla(i) = pla(i) + dpla_i(i)
762 dezz = dpla_i(i) * half*(signxx(i)+signyy(i)) / yld(i)
764 thk(i) = thk(i) + dezz*thkly(i)*off(i)
766 etse(i)= h(i)/(h(i)+e(i))
776 IF (fisokin > zero)
THEN
778 dsxx = sigexx(i) - signxx(i)
779 dsyy = sigeyy(i) - signyy(i)
780 dsxy = sigexy(i) - signxy(i)
781 dexx = (dsxx - nu*dsyy)
782 deyy = (dsyy - nu*dsxx)
784 dexy = two*(one+nu)*dsxy
785 hkin = two_third*fisokin*h(i)
786 alpha = hkin/(e(i)+hkin)
787 sigpxx =
alpha*(two*dexx+deyy)
788 sigpyy =
alpha*(two*deyy+dexx)
789 sigpxy =
alpha*dexy*half
790 uvar(i,2) = uvar(i,2) + sigpxx
791 uvar(i,3) = uvar(i,3) + sigpyy
792 uvar(i,4) = uvar(i,4) + sigpxy
794 signxx(i) = signxx(i) + uvar(i,2)
795 signyy(i) = signyy(i) + uvar(i,3)
796 signxy(i) = signxy(i) + uvar(i,4)
807 IF (loff(i) == one)
THEN
808 svm(i) = sqrt(signxx(i)*signxx(i) + signyy(i)*signyy(i)
809 . - signxx(i)*signyy(i) + three*signxy(i)*signxy(i))
810 dezz =
max(dplanl(i),zero)*half*(signxx(i)+signyy(i))/
max(svm(i),em20)
811 dezz = -nu*((signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/e(i)) - dezz
812 thk(i) = thk(i) + dezz*thkly(i)*off(i)