49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "mvsiz_p.inc"
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108#include "param_c.inc"
109#include "com01_c.inc"
110
111
112
113 INTEGER, INTENT(IN) :: JTHE
114 INTEGER NEL0, NUPARAM, NUVAR, NPT0, IPT,IFLAG(*),
115 . NGL(NEL0),MAT(NEL0),IPM(NPROPMI,*),INLOC
116 my_real time,timestep,uparam(*),
117 .
area(nel0),rho0(nel0),eint(nel0,2),
118 . thkly(nel0),pla(nel0),
119 . epspxx(nel0),epspyy(nel0),
120 . epspxy(nel0),epspyz(nel0),epspzx(nel0),
121 . depsxx(nel0),depsyy(nel0),
122 . depsxy(nel0),depsyz(nel0),depszx(nel0),
123 . epsxx(nel0) ,epsyy(nel0) ,
124 . epsxy(nel0) ,epsyz(nel0) ,epszx(nel0) ,
125 . sigoxx(nel0),sigoyy(nel0),
126 . sigoxy(nel0),sigoyz(nel0),sigozx(nel0),
127 . gs(*),vol(nel0),tempel(nel0),
128 . die(nel0),coef(nel0),dplanl(nel0)
129 my_real,
DIMENSION(NEL0),
INTENT(IN) :: loff
130
131
132
134 . signxx(nel0),signyy(nel0),
135 . signxy(nel0),signyz(nel0),signzx(nel0),
136 . sigvxx(nel0),sigvyy(nel0),
137 . sigvxy(nel0),sigvyz(nel0),sigvzx(nel0),
138 . soundsp(nel0),viscmax(nel0),etse(nel0)
139
140
141
142 my_real uvar(nel0,nuvar), off(nel0),thk(nel0),yld(nel0)
143
144
145
146 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
148 EXTERNAL finter
149
150
151
152
153
154
155
156
157
158
159 INTEGER I,J,NRATE(MVSIZ),J1,J2,N,NINDX,
160 . NMAX,INDEX(MVSIZ),
161 . (MVSIZ),IPOS1(MVSIZ),ILEN1(MVSIZ),
162 . IAD2(MVSIZ),IPOS2(MVSIZ),ILEN2(MVSIZ),
163 . NFUNC, IFUNC(2),MX
165 . e,a1,a2,g,g3,
166 . aa(mvsiz),bb(mvsiz),pp(mvsiz),qq(mvsiz),h(mvsiz),
167 . epsmax(mvsiz),cc(mvsiz),dd(mvsiz),
168 . cn, cm(mvsiz), k1(mvsiz),
169 . v0, temp(mvsiz),vmc,fac,
170 . vol0,dvm, vm(mvsiz),nu,
171 . nnu2,nu1,nu2,nu3,nu4,
172 . nu5,nu6,svm(mvsiz),
173 . dydx1(mvsiz),dydx2(mvsiz), y1(mvsiz),y2(mvsiz)
175 . dpla(mvsiz),umr, r, cp, eps0(mvsiz),dezz,s1, s2,
176 . s3, dpla_j(mvsiz), yld_i,dr(mvsiz), p2,q2,nnu1,
177 . s11,s22,pla_i,
178 . s12, vm2, a, b, c, sigz, f, df, p,md,
179 . cd,yfac(2),
180 . hl
181 DATA nmax/3/
182
183
184
185
186 mx = mat(1)
187 nfunc = ipm(10,mx)
188 DO j=1,nfunc
189 ifunc(j)=ipm(10+j,mx)
190 ENDDO
191 e = uparam(1)
192 a1 = uparam(2)
193 a2 = uparam(3)
194 g = uparam(4)
195 nu = uparam(5)
196 cd = uparam(6)
197 cn = uparam(7)
198 md = uparam(8)
199 v0 = uparam(9)
200 vmc = uparam(10)
201 cp = uparam(11)
202 yfac(1) = uparam(13)
203 yfac(2) = uparam(14)
204 g3 = three*g
205 nnu1 = nu / (one - nu)
206 nnu2 = nnu1*nnu1
207 nu1 = one/(one - nu)
208 nu2 = one/(one + nu)
209 nu3 = one -nnu1
210 nu4 = one + nnu2 + nnu1
211 nu5 = one + nnu2 - two*nnu1
212 nu6 = half - nnu2 + half*nnu1
213 DO i=1,nel0
214 temp(i) = uparam(12)
215
216 hl = uparam(15)
217 coef(i) = one
218
219 ENDDO
220
221 IF (isigi==0) THEN
222 IF(time==0.0)THEN
223 DO i=1,nel0
224 uvar(i,1)=zero
225 uvar(i,2)=zero
226 uvar(i,3) = zero
227 uvar(i,4) = zero
228 uvar(i,5) = zero
229 uvar(i,6) = zero
230 ENDDO
231 ENDIF
232 ENDIF
233
234
235
236 IF(jthe > 0 ) THEN
237 DO i=1,nel0
238 temp(i) = tempel(i)
239 ENDDO
240 ELSE
241 DO
242 vol0 = vol(i) * rho0(i)
243 vm(i) = uvar(i,2)
244 temp(i) = temp(i)
245 . + coef(i)*cp*(eint(i,1)+ eint(i,2))/vol0
246 . + cp*vm(i)*hl/vol0
247 ENDDO
248 ENDIF
249
250 DO i=1,nel0
251
252 signxx(i)=sigoxx(i) + a1*depsxx(i) + a2*depsyy(i)
253 signyy(i)=sigoyy(i) + a2*depsxx(i) + a1*depsyy(i)
254 signxy(i)=sigoxy(i) + g *depsxy(i)
255 signyz(i)=sigoyz(i) + gs(i)*depsyz(i)
256 signzx(i)=sigozx(i) + gs(i)*depszx(i)
257 vm(i) = uvar(i,2)
258 dpla(i) = zero
259
260
261 soundsp(i) = sqrt(a1/rho0(i))
262 viscmax(i) = zero
263 etse(i) = one
264
265 ENDDO
266
267 DO i=1,nel0
268 ipos1(i) = nint(uvar(i,3))
269 iad1(i) = npf(ifunc(1)) / 2 + 1
270 ilen1(i) = npf(ifunc(1)+1) / 2 - iad1(i) - ipos1(i)
271 ipos2(i) = nint(uvar(i,4))
272 iad2(i) = npf(ifunc(2)) / 2 + 1
273 ilen2(i) = npf(ifunc(2)+1) / 2 - iad2(i) - ipos2(i)
274 ENDDO
275
276 CALL vinter(tf,iad1,ipos1,ilen1,nel0,pla,dydx1,y1)
277 CALL vinter(tf,iad2,ipos2,ilen2,nel0,pla,dydx2,y2)
278
279 DO i=1,nel0
280 y1(i)=y1(i)*yfac(1)
281 y2(i)=y2(i)*yfac(2)
282 fac = vm(i)/vmc
283 yld(i) = y1(i) + fac*(y2(i)-y1(i))
284 yld(i) =
max(yld(i),em20)
285
286 dydx1(i)=dydx1(i)*yfac(1)
287 dydx2(i)=dydx2(i)*yfac(2)
288 h(i) = (dydx1(i) + fac*(dydx2(i)-dydx1(i)))
289 uvar(i,3) = ipos1(i)
290 uvar(i,4) = ipos2(i)
291 ENDDO
292
293
294
295 IF(iflag(1)==0)THEN
296
297 DO i=1,nel0
298 svm(i)=sqrt(signxx(i)*signxx(i)
299 . +signyy(i)*signyy(i)
300 . -signxx(i)*signyy(i)
301 . +three*signxy(i)*signxy(i))
302 r =
min(one,yld(i)/
max(em20,svm(i)))
303 signxx(i)=signxx(i)*r
304 signyy(i)=signyy(i)*r
305 signxy(i)=signxy(i)*r
306 umr = one - r
307
308 dpla(i) = off(i)*svm(i)*umr/e
309 pla(i) = pla(i) + dpla(i)
310 s1=half*(signxx(i)+signyy(i))
311 IF (inloc == 0) THEN
312 dezz = dpla(i) * half*(signxx(i)+signyy(i)) / yld(i)
313 dezz=-(depsxx(i)+depsyy(i))*nnu1-nu3*dezz
314 thk(i) = thk(i) + dezz*thkly(i)*off(i)
315 ENDIF
316 IF(r<one) etse(i)= h(i)/(h(i)+e)
317 ENDDO
318 ELSEIF(iflag(1)==1)THEN
319
320
321
322 DO i=1,nel0
323 h(i) =
max(zero,h(i))
324 s1=signxx(i)+signyy(i)
325 s2=signxx(i)-signyy(i)
326 s3=signxy(i)
327 aa(i)=fourth*s1*s1
328 bb(i)=three_over_4*s2*s2+three*s3*s3
329 svm(i)=sqrt(aa(i)+bb(i))
330 IF (inloc == 0) THEN
331 dezz = -(depsxx(i)+depsyy(i))*nnu1
332 thk(i) = thk(i) + dezz*thkly(i)*off(i)
333 ENDIF
334 ENDDO
335
336
337
338 nindx=0
339 DO i=1,nel0
340 IF(svm(i)>yld(i).AND.off(i)==one) THEN
341 nindx=nindx+1
342 index(nindx)=i
343 ENDIF
344 ENDDO
345
346 IF(nindx/=0) THEN
347
348
349
350 DO j=1,nindx
351 i=index(j)
352 dpla_j(i)=(svm(i)-yld(i))/(g3+h(i))
353 etse(i)= h(i)/(h(i)+e)
354 ENDDO
355
356 DO n=1,nmax
357#include "vectorize.inc"
358 DO j=1,nindx
359 i=index(j)
360 dpla(i)=dpla_j(i)
361
362 yld_i = yld(i) + h(i)*dpla(i)
363
364 dr(i) =half*e*dpla(i)/yld_i
365 pp(i) =one/(one+dr(i)*nu1)
366 qq(i) =one/(one + three*dr(i)*nu2)
367 p2 =pp(i)*pp(i)
368 q2 =qq(i)*qq(i)
369 f =aa(i)*p2+bb(i)*q2-yld_i*yld_i
370 df =-(aa(i)*nu1*p2*pp(i)+three*bb(i)*nu2*q2*qq(i))
371 . *(e-two*dr(i)*h(i))/yld_i
372 . -two*h(i)*yld_i
373 df = sign(
max(abs(df),em20),df)
374 IF(dpla(i)>zero) THEN
375 dpla_j(i)=
max(zero,dpla(i)-f/df)
376 ELSE
377 dpla_j(i)=zero
378 ENDIF
379 ENDDO
380 ENDDO
381
382
383
384#include "vectorize.inc"
385 DO j=1,nindx
386 i=index(j)
387 pla(i) = pla(i) + dpla(i)
388 s1=(signxx(i)+signyy(i))*pp(i)
389 s2=(signxx(i)-signyy(i))*qq(i)
390 signxx(i)=half*(s1+s2)
391 signyy(i)=half*(s1-s2)
392 signxy
393 IF (inloc == 0) THEN
394 dezz = - nu3*dr(i)*s1/e
395 thk(i) = thk(i) + dezz*thkly(i)*off(i)
396 ENDIF
397 ENDDO
398 ENDIF
399
400 ELSEIF(iflag(1)==2)THEN
401
402
403
404
405 DO i=1,nel0
406 p = -(signxx(i)+signyy(i))*third
407 s11 = signxx(i)+p
408 s22 = signyy(i)+p
409
410 s12 = signxy(i)
411
412 p2 = p*p
413 vm2= three*(s12*s12 - s11*s22)
414 a = p2*nu4 + vm2
415 vm2= three*p2 + vm2
416 b = p2*nu6
417 c = p2*nu5 - yld(i)*yld(i)
419 signxx(i) = s11*r - p
420 signyy(i) = s22*r - p
421 signxy(i) = s12*r
422
423
424 umr = one - r
425 sigz = nnu1*p*umr
426 signxx(i) = signxx(i) + sigz
427 signyy(i) = signyy(i) + sigz
428 svm(i)=sqrt(vm2)
429 dpla(i) = off(i)*svm(i)*umr/g3
430
431 pla(i) = pla(i) + dpla(i)
432 IF (inloc == 0) THEN
433 dezz = dpla(i) * half*(signxx(i)+signyy(i)) / yld(i)
434 dezz=-(depsxx(i)+depsyy(i))*nnu1-nu3*dezz
435 thk(i) = thk(i) + dezz*thkly(i)*off(i)
436 ENDIF
437 IF(r<one) etse(i)= h(i)/(h(i)+e)
438 ENDDO
439 ENDIF
440
441 DO i=1,nel0
442 dvm = zero
443 IF(temp(i)<md) THEN
444 dvm = cn*cd*exp((cn-one)*log(
max(cd*pla(i),em20)))
445 dvm = dvm*exp(-(cd*pla(i))**cn)
446 dvm = dvm*v0*log(md - temp(i) + one)
447 ENDIF
448
449 vm(i) = vm(i) +
max(dvm*dpla(i),zero)
450 vm(i) =
min(vm(i), one)
451
452 IF(jthe > 0 ) die(i) = (vm(i) - uvar(i,2))*hl
453 uvar(i,2) = vm(i)
454 uvar(i,5) = temp(i)
455 uvar(i,1) = pla(i)
456 ENDDO
457
458
459
460
461 IF (inloc > 0) THEN
462 DO i = 1,nel0
463 IF (loff(i) == one) THEN
464 svm(i) = sqrt(signxx(i)*signxx(i) + signyy(i)*signyy(i)
465 . - signxx(i)*signyy(i) + three*signxy(i)*signxy(i))
466 dezz =
max(dplanl(i),zero)*half*(signxx(i)+signyy(i))/
max(svm(i),em20)
467 dezz = -nu*((signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/e) - dezz
468 thk(i) = thk(i) + dezz*thkly(i)*off(i)
469 ENDIF
470 ENDDO
471 ENDIF
472
473 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine vinter(tf, iad, ipos, ilen, nel, x, dydx, y)