42
43
44
45#include "implicit_f.inc"
46
47
48
49#include "mvsiz_p.inc"
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94#include "param_c.inc"
95#include "scr17_c.inc"
96
97 INTEGER NEL, NUPARAM, NUVAR,IPT,
98 . IPM(NPROPMI,*),NGL(NEL),MAT(NEL)
99 my_real time,timestep,uparam(*),
100 . rho(nel),rho0(nel),volume(nel),eint(nel),
101 . epspxx(nel),epspyy(nel),epspzz(nel),
102 . epspxy(nel),epspyz(nel),epspzx(nel),
103 . depsxx(nel),depsyy(nel),depszz(nel),
104 . depsxy(nel),depsyz(nel),depszx(nel),
105 . epsxx(nel) ,epsyy(nel) ,epszz(nel) ,
106 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,
107 . sigoxx(nel),sigoyy(nel),sigozz(nel),
108 . sigoxy(nel),sigoyz(nel),sigozx(nel),
109 . epsp(nel),amu(nel)
110
111
112
114 . signxx(nel),signyy(nel),signzz(nel),
115 . signxy(nel),signyz(nel),signzx(nel),
116 . sigvxx(nel),sigvyy(nel),sigvzz(nel),
117 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
118 . soundsp(nel),viscmax(nel),sigy(nel),defp(nel),
119 . dpla1(mvsiz)
120
121
122
124 . uvar(nel,nuvar), off(nel)
125
126
127
128 INTEGER NPF(*),MFUNC,KFUNC(MFUNC)
130 . tf(*)
131
132
133
134
135 INTEGER I,IADBUF,MX
137 . e,nu,p,dav,vm,r,dpla,epst,e1,e2,e3,e4,e5,e6,c,cd,d,
138 . y,yp,e42,e52,e62,epst2,pa,pb,pc,pda,pdb,yy,
139 . c1(mvsiz),c2(mvsiz),c3(mvsiz),
140 . g(mvsiz),g2(mvsiz),g3(mvsiz),epsgm(mvsiz),
141 . epmax(mvsiz),smax(mvsiz),pla(mvsiz),fail(mvsiz),
142 . epsr1(mvsiz),epsr2(mvsiz),yld(mvsiz),h(mvsiz),
143 . ca(mvsiz),cb(mvsiz),cn(mvsiz),cc(mvsiz),co(mvsiz),
144 . cm(mvsiz),ce(mvsiz),ck(mvsiz),eps0(mvsiz)
145
146 IF(time==zero)THEN
147 DO i=1,nel
148 uvar(i,1)=zero
149 ENDDO
150 ENDIF
151
152
153 mx = mat(1)
154 iadbuf = ipm(7,mx)-1
155 DO i=1,nel
156 e = uparam(iadbuf+1)
157 nu = uparam(iadbuf+2)
158 ca(i) = uparam(iadbuf+3)
159 smax(i) = uparam(iadbuf+4)
160 epmax(i)= uparam(iadbuf+5)
161 epsr1(i)= uparam(iadbuf+6)
162 epsr2(i)= uparam(iadbuf+7)
163 cb(i) = uparam(iadbuf+8)
164 cn(i) = uparam(iadbuf+9)
165 cc(i) = uparam(iadbuf+10)
166 co(i) = uparam(iadbuf+11)
167 cm(i) = uparam(iadbuf+12)
168 g(i) = uparam(iadbuf+16)
169 g2(i) = uparam(iadbuf+17)
170 g3(i) = uparam(iadbuf+18)
171 c1(i) = uparam(iadbuf+19)
172 c2(i) = uparam(iadbuf+20)
173 c3(i) = uparam(iadbuf+21)
174 epsgm(i)= uparam(iadbuf+22)
175 eps0(i) = uparam(iadbuf+23)
176 ce(i) = uparam(iadbuf+24)
177 ck(i) = uparam(iadbuf+25)
178 ENDDO
179
180
181
182 DO i=1,nel
183 pla(i) = uvar(i,1)
184 p = -(sigoxx(i)+sigoyy(i)+sigozz(i))* third
185 dav = (depsxx(i)+depsyy(i)+depszz(i))* third
186 signxx(i)=sigoxx(i) + p + g2(i)*(depsxx(i)-dav)
187 signyy(i)=sigoyy(i) + p + g2(i)*(depsyy(i)-dav)
188 signzz(i)=sigozz(i) + p + g2(i)*(depszz(i)-dav)
189 signxy(i)=sigoxy(i) + g(i)*depsxy(i)
190 signyz(i)=sigoyz(i) + g(i)*depsyz(i)
191 signzx(i)=sigozx(i) + g(i)*depszx(i)
192
193 soundsp(i) = sqrt((c1(i)+four*g(i)/three)/rho0(i))
194 viscmax(i) = zero
195 dpla1(i) = zero
196 ENDDO
197
198
199
200
201 DO i=1,nel
202
203 dav = (epsxx(i)+epsyy(i)+epszz(i))*third
204 e1 = epsxx(i) - dav
205 e2 = epsyy(i) - dav
206 e3 = epszz(i) - dav
207 e4 = half*epsxy(i)
208 e5 = half*epsyz(i)
209 e6 = half*epszx(i)
210
211
212
213
214
215
216 e42 = e4*e4
217 e52 = e5*e5
218 e62 = e6*e6
219 c = - e1*e1 - e2*e2 - e3*e3 - e42 - e52 - e62
220 d = - e1*e2*e3 + e1*e52 + e2*e62 + e3*e42
221 & - two*e4*e5*e6
222 cd = c*third
223 epst = sqrt(-cd)
224 epst2 = epst * epst
225 y = (epst2 + c)* epst + d
226 IF(abs(y)>em8)THEN
227 epst = onep75 * epst
228 epst2 = epst * epst
229 y = (epst2 + c)* epst + d
230 yp = three*epst2 + c
231 IF(yp/=zero)epst = epst - y/yp
232 epst2 = epst * epst
233 y = (epst2 + c)* epst + d
234 yp = three*epst2 + c
235 IF(yp/=zero)epst = epst - y/yp
236 epst2 = epst * epst
237 y = (epst2 + c)* epst + d
238 yp = three*epst2 + c
239 IF(yp/=zero)epst = epst - y/yp
240 epst2 = epst * epst
241 y = (epst2 + c)* epst + d
242 yp = 3*epst2 + c
243 IF(yp/=zero)epst = epst - y/yp
244 epst = epst + dav
245 ENDIF
246
247
248
249 fail(i) =
max(zero,
min(one,
250 . (epsr2(i)-epst)/(epsr2(i)-epsr1(i)) ))
251
252 ENDDO
253
254
255
256
257
258
259 DO i=1,nel
260 IF(pla(i)<=zero) THEN
261 pa=ca(i)
262 ELSEIF(pla(i)>epmax(i)) THEN
263 pa=ca(i)+cb(i)*epmax(i)**cn(i)
264 ELSE
265 pa=ca(i)+cb(i)*pla(i)**cn(i)
266 ENDIF
267 IF(epsp(i)<=eps0(i)) THEN
268 pb=zero
269 ELSEIF(pla(i)<=zero) THEN
270 pb=cc(i)*log(epsp(i)/eps0(i))
271 ELSE
272 pb=(cc(i)-co(i)*pla(i)**cm(i))*log(epsp(i)/eps0(i))
273 ENDIF
274 IF(epsp(i)<=zero) THEN
275 pc=zero
276 ELSE
277 pc=ce(i)*epsp(i)**ck(i)
278 ENDIF
279
280 IF(pla(i)>zero. and .cn(i)>=one) THEN
281 pda = cb(i)*cn(i)*pla(i)**(cn(i)- one)
282 ELSEIF(pla(i)>zero. and .cn(i)<one)THEN
283 pda = cb(i)*cn(i)*pla(i)**(one-cn(i))
284 ELSE
285 pda = e
286 ENDIF
287 IF(pla(i)<=zero. or .epsp(i)<=eps0(i)) THEN
288 pdb = zero
289 ELSEIF(cm(i)>=one) THEN
290 pdb = co(i)*cm(i)*pla(i)**(cm(i)- one)*log(epsp(i)/eps0(i))
291 ELSE
292 pdb = co(i)*cm(i)*pla(i)**(one - cm(i))*log(epsp(i)/eps0(i))
293 ENDIF
294
295 yy = pa + pb + pc
296 yld(i)=
min(smax(i)+pc, yy)
297 h(i) = pda + pdb
298 IF (yld(i)<yy) h(i) = zero
299 yld(i)= fail(i)*yld(i)
300 h(i) = fail(i)*h(i)
301 sigy(i)=yld(i)
302 IF(pla(i)>epmax(i)) yld(i)=zero
303 ENDDO
304
305
306
307
308 DO i=1,nel
309 vm =half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
310 1 +signxy(i)**2+signyz(i)**2+signzx(i)**2
311 vm =sqrt(three*vm)
312 r =
min(one,yld(i)/
max(vm,em20))
313
314 dpla=(one -r)*vm/
max(g3(i)+h(i),em20)
315
316 yld(i)=yld(i)+dpla*h(i)
317 IF(pla(i)>epmax(i)) yld(i)=zero
318 r =
min(one,yld(i)/
max(vm,em20))
319
320
321 p = c1(i) * amu(i)
322 signxx(i)=signxx(i)*r-p
323 signyy(i)=signyy(i)*r-p
324 signzz(i)=signzz(i)*r-p
325 signxy(i)=signxy(i)*r
326 signyz(i)=signyz(i)*r
327 signzx(i)=signzx(i)*r
328 pla(i)=pla(i) + dpla
329 uvar(i,1)=pla(i)
330 dpla1(i) = dpla
331 ENDDO
332
333 DO i=1,nel
334 sigy(i)=
max(sigy(i),yld(i))
335 defp(i)=uvar(i,1)
336 ENDDO
337
338 RETURN