33
34
35
36#include "implicit_f.inc"
37
38
39
40#include "mvsiz_p.inc"
41
42
43
44#include "param_c.inc"
45
46
47
48 INTEGER JFT,JLT,IPLA,IMAT,ISRATE,NEL
49
52 my_real,
INTENT(INOUT) :: sig(nel,5)
54 . pm(npropm,*),off(*),pla(*),ezz(*),dpla(*),
55 . depsxx(mvsiz),depsyy(mvsiz),depsxy(mvsiz),depsyz(mvsiz),
56 . depszx(mvsiz)
58 . yld(*),etse(*)
59 my_real,
DIMENSION(NEL) ,
INTENT(IN) :: epsd_pg
60 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: epsd
61
62
63
64 INTEGER ICC(MVSIZ)
65 INTEGER I,J,N,NINDX,INDEX(MVSIZ),NMAX
67 . ca(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
75 DATA nmax/3/
76
77 small = em7
78
79#include "vectorize.inc"
80 DO i=jft,jlt
81 young(i)= pm(20,imat)
82 nu(i) = pm(21,imat)
83 g(i) = pm(22,imat)
84 ca(i) = pm(38,imat)
85 cb(i) = pm(39,imat)
86 cn(i) = pm(40,imat)
88 cc(i) = pm(43,imat)
89 epdr(i) =
max(em20,pm(44,imat)*dt1)
90 icc(i) = nint(pm(49,imat))
91 etse(i) = one
92 ENDDO
93
94
95
96 DO i=jft,jlt
97 IF (israte == 0) THEN
98 epsp(i) =
max(abs(depsxx(i)),abs(depsyy(i)),half*abs(depsxy(i)))
99 ELSE
100 epsd(i) = asrate*epsd_pg(i) + (one-asrate)*epsd(i)
101 epsp(i) = epsd(i) * dt1
102 END IF
103 epsp(i) =
max(epsp(i),epdr(i))
104 q(i) = (one + cc(i) * log(epsp(i)/epdr(i)))
105 ENDDO
106
107 DO i=jft,jlt
108 IF (icc(i) == 1)
ymax(i) =
ymax(i) * q(i)
109 ENDDO
110
111 DO i=jft,jlt
112 dpla(i) = zero
113 yld(i) = (ca(i)+cb(i)*pla(i)**cn(i)) * q(i)
115 ca(i) = ca(i)*q(i)
116 cb(i) = cb(i)*q(i)
117 ENDDO
118
119
120
121 IF (ipla == 0) THEN
122
123
124
125 DO i=jft,jlt
126 svm(i) = sqrt(sig(i,1)*sig(i,1)
127 . +sig(i,2)*sig(i,2)
128 . -sig(i,1)*sig(i,2)
129 . +three*sig(i,3)*sig(i,3))
130 ENDDO
131
132
133
134#include "vectorize.inc"
135 DO i=jft,jlt
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)
147 ENDDO
148
149 ELSEIF (ipla == 1) THEN
150
151
152
153 DO i=jft,jlt
154 s1 = sig(i,1) + sig(i,2)
155 s2 = sig(i,1) - sig(i,2)
156 s3 = sig(i,3)
157 a(i) = fourth*s1*s1
158 b(i) = three_over_4*s2*s2+three*s3*s3
159 svm(i) = sqrt(a(i)+b(i))
160 ENDDO
161
162
163
164 nindx=0
165 DO i=jft,jlt
166 IF (svm(i) > yld(i) .AND. off(i) == one) THEN
167 nindx = nindx + 1
168 index(nindx) = i
169 ENDIF
170 ENDDO
171 IF (nindx == 0) RETURN
172
173
174
175#include "vectorize.inc"
176 DO j=1,nindx
177 i = index(j)
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))
184 ENDDO
185
186 DO n=1,nmax
187#include "vectorize.inc"
188 DO j=1,nindx
189 i = index(j)
190 dpla_i(i) = dpla_j(i)
191 dpla(i) = dpla_i(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))
197 p2 = p(i)*p(i)
198 q2 = q(i)*q(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
202 . -two*h(i)*yld_i
203 IF (dpla_i(i) > zero) THEN
204 dpla_j(i) =
max(zero,dpla_i(i)-f/df)
205 ELSE
206 dpla_j(i) = zero
207 ENDIF
208 ENDDO
209 ENDDO
210
211
212
213#include "vectorize.inc"
214 DO j=1,nindx
215 i = index(j)
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)
223 ENDDO
224
225 ELSEIF (ipla == 2) THEN
226
227
228
229 DO i=jft,jlt
230 pp = -(sig(i,1)+sig(i,2))*third
231 s11 = sig(i,1)+pp
232 s22 = sig(i,2)+pp
233 s12 = sig(i,3)
234 p2 = pp*pp
235 s1s2 = s11*s22
236 s122 = s12*s12
237 nnu1 = nu(i) / (one - nu(i))
238 nnu2 = nnu1*nnu1
239 nu4 = one + nnu2 + nnu1
240 nu6 = half - nnu2 + half*nnu1
241 qq = (one-nnu1)*pp
242 aa = p2*nu4 + three*(s122 - s1s2)
243 bb = p2*nu6
244 c = qq*qq
245 vm2= aa+bb+bb+c
246 c = c - yld(i)*yld(i)
247
248 r =
min(one,(-bb+ sqrt(
max(zero,bb*bb-aa*c)))/
max(aa ,em20))
249
250 umr = one - r
251 qq = qq*umr
252 sig(i,1) = sig(i,1)*r - qq
253 sig(i,2) = sig(i,2)*r - qq
254 sig(i,3) = s12*r
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)
262 ENDDO
263 ENDIF
264
265 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)