28 SUBROUTINE m27plas(JFT ,JLT ,PM ,OFF ,SIG ,
29 2 PLA ,IMAT ,DT1 ,IPLA ,EZZ ,
30 3 EPSD_PG,ISRATE ,YLD ,ETSE ,DPLA ,
31 4 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX,
36#include "implicit_f.inc"
48 INTEGER JFT,JLT,IPLA,IMAT,ISRATE,NEL
50 my_real,
INTENT(IN) :: ASRATE
51 my_real,
INTENT(IN) :: DT1
52 my_real,
INTENT(INOUT) :: sig(nel,5)
54 . pm(npropm,*),off(*),pla(*),ezz(*),dpla(*),
55 . depsxx(mvsiz),depsyy
59 my_real,
DIMENSION(NEL) ,
INTENT(IN) :: epsd_pg
60 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: epsd
65 INTEGER I,J,N,NINDX,INDEX(MVSIZ),NMAX
67 . (MVSIZ),CB(MVSIZ),CN(MVSIZ),YMAX(MVSIZ),
68 . cc(mvsiz),epdr(mvsiz),svm(mvsiz),a(mvsiz),b(mvsiz),
69 . dpla_i(mvsiz),dpla_j(mvsiz),dr(mvsiz),h(mvsiz),
70 . nu1(mvsiz),nu2(mvsiz),p(mvsiz),q(mvsiz),nu(mvsiz),
71 . young(mvsiz),g(mvsiz),err,f,df,pla_i,p2,q2,r,s1,s2,s3,
72 . yld_i,nnu1,nnu2,nu3,nu4,nu5,nu6,sigz,pp,aa,bb,c,s11,
73 . s22,s12,s1s2,s122,umr,vm2,qq,small
74 my_real,
DIMENSION(NEL) :: epsp
79#include "vectorize.inc"
89 epdr(i) =
max(em20,pm(44,imat)*dt1)
90 icc(i) = nint(pm(49,imat))
98 epsp(i) =
max(abs(depsxx(i)),abs(depsyy(i)),half*abs(depsxy(i)))
100 epsd(i) = asrate*epsd_pg(i) + (one-asrate)*epsd(i)
101 epsp(i) = epsd(i) * dt1
103 epsp(i) =
max(epsp(i),epdr(i))
104 q(i) = (one + cc(i) * log(epsp(i)/epdr(i)))
108 IF (icc(i) == 1) ymax(i) = ymax(i) * q(i)
113 yld(i) = (ca(i)+cb(i)*pla(i)**cn(i)) * q(i)
114 yld(i) =
min(yld(i),ymax(i))
126 svm(i) = sqrt(sig(i,1)*sig(i,1)
129 . +three*sig(i,3)*sig(i,3))
134#include "vectorize.inc"
136 r =
min(one,yld(i)/(svm(i)+ em15))
137 sig(i,1) = sig(i,1)*r
138 sig(i,2) = sig(i,2)*r
139 sig(i,3) = sig(i,3)*r
140 dpla(i) = off(i) *
max(zero,(svm(i)-yld(i))/young(i))
141 h(i) = cn(i)*cb(i)*exp((cn(i)-one)*log(pla(i)+small))
142 IF (yld(i) >= ymax(i)) h(i) = zero
143 etse(i)= h(i)/(h(i)+young(i))
144 s1 = half*(sig(i,1)+sig(i,2))
145 ezz(i) = dpla(i) * s1 /yld(i)
146 pla(i) = pla(i) + dpla(i)
149 ELSEIF (ipla == 1)
THEN
154 s1 = sig(i,1) + sig(i,2)
155 s2 = sig(i,1) - sig(i,2)
158 b(i) = three_over_4*s2*s2+three*s3*s3
159 svm(i) = sqrt(a(i)+b(i))
166 IF (svm(i) > yld(i) .AND. off(i) == one)
THEN
171 IF (nindx == 0)
RETURN
175#include "vectorize.inc"
178 nu1(i) = one/(one-nu(i))
179 nu2(i) = one/(one+nu(i))
180 h(i) = cn(i)*cb(i)*exp((cn(i)-one)*log(pla(i)+small))
181 IF (yld(i) >= ymax(i)) h(i) = zero
182 dpla_j(i) = (svm(i)-yld(i))/(three*g(i)+h(i))
183 etse(i) = h(i)/(h(i)+young(i))
187#include "vectorize.inc"
190 dpla_i(i) = dpla_j(i)
192 pla_i = pla(i)+dpla_i(i)
193 yld_i =
min(ymax(i),ca(i)+cb(i)*pla_i**cn(i))
194 dr(i) = half*young(i)*dpla_i(i)/yld_i
195 p(i) = one/(one+dr(i)*nu1(i))
196 q(i) = one/(one + three*dr(i)*nu2(i))
199 f = a(i)*p2+b(i)*q2-yld_i*yld_i
200 df = -(a(i)*nu1(i)*p2*p(i)+3.*b(i)*nu2(i)*q2*q(i))
201 . *(young(i)-two*dr(i)*h(i))/yld_i
203 IF (dpla_i(i) > zero)
THEN
204 dpla_j(i) =
max(zero,dpla_i(i)-f/df)
213#include "vectorize.inc"
216 pla(i) = pla(i) + dpla_i(i)
217 s1 = (sig(i,1)+sig(i,2))*p(i)
218 s2 = (sig(i,1)-sig(i,2))*q(i)
219 sig(i,1) = half*(s1+s2)
220 sig(i,2) = half*(s1-s2)
221 sig(i,3) = sig(i,3)*q(i)
222 ezz(i) = dr(i)*s1/young(i)
225 ELSEIF (ipla == 2)
THEN
230 pp = -(sig(i,1)+sig(i,2))*third
237 nnu1 = nu(i) / (one - nu(i))
239 nu4 = one + nnu2 + nnu1
240 nu6 = half - nnu2 + half*nnu1
242 aa = p2*nu4 + three*(s122 - s1s2)
246 c = c - yld(i)*yld(i)
248 r =
min(one,(-bb+ sqrt(
max(zero,bb*bb-aa*c)))/
max(aa ,em20))
252 sig(i,1) = sig(i,1)*r - qq
253 sig(i,2) = sig(i,2)*r - qq
255 dpla(i) = off(i)*sqrt(vm2)*umr/(three*g(i))
256 h(i) = cn(i)*cb(i)*exp((cn(i)-one)*log(pla(i)+small))
257 IF (yld(i) >= ymax(i)) h(i) = zero
258 etse(i) = h(i)/(h(i)+young(i))
259 s1 = half*(sig(i,1)+sig(i,2))
260 ezz(i) = dpla(i) * s1 / yld(i)
261 pla(i) = pla(i) + dpla(i)
subroutine m27plas(jft, jlt, pm, off, sig, pla, imat, dt1, ipla, ezz, epsd_pg, israte, yld, etse, dpla, depsxx, depsyy, depsxy, depsyz, depszx, nel, epsd, asrate)