31 1 NEL ,NUPARAM ,UPARAM ,IPM ,IMAT ,
32 2 OFF ,PLA ,DEPSXX ,DEPSXY ,DEPSXZ ,
33 3 SIGOXX ,SIGOXY ,SIGOXZ ,EPST ,EPSP ,
34 4 SIGNXX ,SIGNXY ,SIGNXZ ,ETSE ,NUVAR ,
35 5 UVAR ,IFUNC ,NVARTMP ,VARTMP ,NPF ,
40#include "implicit_f.inc"
51 INTEGER ,
INTENT(IN) :: IMAT
52 INTEGER ,
INTENT(IN) :: NEL,NUPARAM,NUVAR,
53 . NFUNC,IFUNC(NFUNC),NPF(*),NVARTMP
54 INTEGER ,
DIMENSION(NPROPMI,NUMMAT) ,
INTENT(IN) :: IPM
55 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: EPST,
56 . DEPSXX,DEPSXY,DEPSXZ,SIGOXX,SIGOXY,SIGOXZ
57 my_real ,
DIMENSION(*) ,
INTENT(IN) :: uparam
63 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: signxx,signxy,signxz,etse
64 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: pla,off,epsp
65 INTEGER :: VARTMP(NEL,NVARTMP)
66 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT):: UVAR
67 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: SIGY
72 my_real :: svm,shfact,gs,epif,dmg,r,frate,
alpha,epsdot
73 INTEGER,
DIMENSION(NEL) :: ICC,ISRATE,VFLAG,IAD,IPOS,ILEN
74 my_real,
DIMENSION(NEL) :: E,NU,G,G3,YLD,YLDMAX,EPMAX,EPDR,
75 . EPSR1,EPSR2,CA,,CN,CP,ASRATE,YSCALE,DFDPLA,DPLA
80 iadbuf = ipm(7,imat)-1
82 e(i) = uparam(iadbuf+1)
83 nu(i) = uparam(iadbuf+2)
84 ca(i) = uparam(iadbuf+3)
85 yldmax(i)= uparam(iadbuf+4)
86 epmax(i) = uparam(iadbuf+5)
87 epsr1(i) = uparam(iadbuf+6)
88 epsr2(i) = uparam(iadbuf+7)
89 cb(i) = uparam(iadbuf+8)
90 cn(i) = uparam(iadbuf+9)
91 icc(i) = nint(uparam(iadbuf+10))
92 epdr(i) = uparam(iadbuf+11)
93 epif =
max(epif,epdr(i))
94 cp(i) = uparam(iadbuf+12)
95 g(i) = uparam(iadbuf+16)
96 g3(i) = uparam(iadbuf+18)
97 israte(i)= nint(uparam(iadbuf+13))
98 asrate(i)= uparam(iadbuf+14)
99 vflag(i) = nint(uparam(iadbuf+23))
100 yscale(i)= uparam(iadbuf+24)
101 IF (vflag(i) == 1)
THEN
111 signxx(i) = sigoxx(i) + e(i)*depsxx(i)
112 signxy(i) = sigoxy(i) + gs*depsxy(i)
113 signxz(i) = sigoxz(i) + gs*depsxz(i)
120 ipos(1:nel) = vartmp(1:nel,1)
121 iad(1:nel) = npf(ifunc(1)) / 2 + 1
122 ilen(1:nel) = npf(ifunc(1)+1) / 2 - iad(1:nel) - ipos(1:nel)
123 CALL vinter(tf,iad,ipos,ilen,nel,pla,dfdpla,yld)
124 vartmp(1:nel,1) = ipos(1:nel)
131 yld(i) = yscale(i)*yld(i)
140 IF (pla(i) > zero)
THEN
142 yld(i) = yscale(i)*yld(i)
144 yld(i) = ca(i) + cb(i)*exp(cn(i)*log(pla(i)))
151 IF (epif > zero)
THEN
153 IF (epdr(i) > zero)
THEN
154 frate = one + (epsp(i)*epdr(i))**cp(i)
155 IF (icc(i)== 1) yldmax(i) = yldmax(i) * frate
156 IF ((nfunc > 0) .AND. (ca(i) /= zero))
THEN
157 IF (pla(i)>zero)
THEN
158 yld(i) = yld(i) + (ca(i) + cb(i)*exp(cn(i)*log(pla(i))))*(frate-one)
160 yld(i) = yld(i) + ca(i)*(frate-one)
163 yld(i) = yld(i) * frate
172 yld(i) =
min(yld(i),yldmax(i))
174 svm = signxx(i)**2 + three*(signxy(i)**2 + signxz(i)**2)
175 IF (svm > yld(i)**2)
THEN
177 r =
min( one, yld(i) / svm)
178 signxx(i) = signxx(i)*r
179 signxy(i) = signxy(i)*r
180 signxz(i) = signxz(i)*r
181 dpla(i) = off(i)*svm*(one - r) / e(i)
182 pla(i) = pla(i) + off(i)*svm*(one - r) / e(i)
189 IF (off(i) < em01) off(i) = zero
190 IF (off(i) < one) off(i) = off(i)*four_over_5
196 IF (off(i) == one)
THEN
198 IF (epst(i) > epsr1(i))
THEN
199 dmg = (epsr2(i) - epst(i)) / (epsr2(i) - epsr1(i))
201 signxx(i) = signxx(i)*dmg
202 signxy(i) = signxy(i)*dmg
203 signxz(i) = signxz(i)*dmg
206 IF (dmg == zero .or. pla(i) >= epmax(i))
THEN
209 IF (vflag(i) == 1)
THEN
211 epsdot = dpla(i)/
max(em20,dt1)
212 epsp(i) =
alpha*epsdot + (one -
alpha)*epsp(i)
subroutine sigeps44pi(nel, nuparam, uparam, ipm, imat, off, pla, depsxx, depsxy, depsxz, sigoxx, sigoxy, sigoxz, epst, epsp, signxx, signxy, signxz, etse, nuvar, uvar, ifunc, nvartmp, vartmp, npf, tf, nfunc, sigy)