34 1 NEL ,NUPARAM,NUVAR ,MFUNC ,KFUNC ,NPF ,
35 2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,RHO ,
37 4 EPSPXX ,EPSPYY ,EPSPZZ ,EPSPXY ,EPSPYZ ,EPSPZX ,
38 5 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
39 6 EPSXX ,EPSYY ,EPSZZ ,EPSXY ,EPSYZ ,EPSZX ,
40 7 SIGOXX ,SIGOYY ,SIGOZZ ,SIGOXY ,SIGOYZ ,SIGOZX ,
41 8 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
42 9 SIGVXX ,SIGVYY ,SIGVZZ ,SIGVXY ,SIGVYZ ,SIGVZX ,
43 A SOUNDSP,VISCMAX,UVAR ,OFF ,NGL ,IPM ,
44 B MAT ,EPSP ,IPLA ,YLD ,PLA ,ETSE ,
50#include
"implicit_f.inc"
100#include "param_c.inc"
105 INTEGER NEL, NUPARAM, NUVAR,IPT,IPLA, JTHE,
106 . NGL(NEL),MAT(NEL),IPM(NPROPMI,*)
108 . ,TIMESTEP,UPARAM(*),
109 . RHO(NEL),RHO0(NEL),VOLUME(NEL),(NEL),
110 . EPSPXX(NEL),EPSPYY(NEL),EPSPZZ(NEL),
111 . EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(),
112 . DEPSXX(NEL),DEPSYY(NEL),DEPSZZ(NEL),
113 . DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(),
114 . EPSXX(NEL) ,EPSYY(NEL) ,EPSZZ(NEL) ,
115 . EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
116 . SIGOXX(NEL),SIGOYY(NEL),SIGOZZ(NEL),
117 . sigoxy(nel),sigoyz(nel),sigozx(nel),
118 . epsp(nel),etse(nel), tempel(nel),amu(nel)
123 . signxx(nel),signyy(nel),signzz(nel),
124 . signxy(nel),signyz(nel),signzx(nel),
125 . sigvxx(nel),sigvyy(nel),sigvzz(nel),
126 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
127 . soundsp(nel),viscmax(nel),dpla(nel)
132 . uvar(nel,nuvar), off(nel), yld(nel), pla(nel)
136 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
139 EXTERNAL FINTER2,FINTER
151 INTEGER ,I1,I2,J,IADBUF,J1,J2,NFUNC,FUNC,FUND,
152 . NP1,,K1,K,,N0,N1,N2,N3,N4
154 . IPOSC1(NEL),IADC1(NEL),ILENC1(NEL),
155 . IPOSC2(NEL),IADC2(NEL),ILENC2(NEL),
156 . IPOSD1(NEL),IADD1(NEL),ILEND1(NEL),FLAG(NEL),
157 . IPOSD2(NEL),IADD2(NEL),ILEND2(NEL),IFUNC(100)
161 . S1,S2,T1,T2,X1,X2,Y1,Y2,SX,TY,DYDX,DTDS,RATE1,
162 . RATE2,SIGY1,SIGY2,SVTEST,TEST,HH,DESEL
164 . e(nel),nu,g3,g,eps(nel),c1,
165 . epsmax,trsigo(nel),nuu(nel),epss(nel),
166 . eps0(nel),depseq(nel),dsigxx(nel),dsigyy(nel),
167 . dsigzz(nel),sv2(nel),sigo(nel),svm(nel),
168 . strxx(nel),stryy(nel),strzz(nel),sigm(nel),
169 . strxy(nel),stryz(nel),strzx(nel),trsign(nel),
171 . dydxc1(nel),dydxc2(nel),yc1(nel),yc2(nel),
172 . dydxd1(nel),dydxd2(nel),yd1(nel),yd2(nel),
173 . sigyld(nel),hc(nel),hd(nel),sigfc(nel), sigfd(nel),
174 . fac(nel),epse(nel),yfac(nel,2),depss(nel),h(nel),
175 . depse(nel),deq(nel),yield(nel),unload(nel),
176 . epsc1(nel),epsc2(nel),epsd1(nel),epsd2(nel),work(nel),
177 . dydxc(nel),yc(nel),yfac1(nel),yfac2(nel),coefb(nel),
178 . dexx(nel),deyy(nel),dezz(nel),p0(nel),coefa(nel),
179 . soxx(nel),soyy(nel),sozz(nel) ,svmo2(nel),dsig(nel),
180 . a,b,cc,x11,x22,dav,
alpha,sfc,sfd,p
188 ifunc(j)=ipm(10+j,mx)
190 iadbuf = ipm(7,mx) - 1
191 nrate = nint(uparam(iadbuf+1))
193 nu = uparam(iadbuf+4)
194 g2 = uparam(iadbuf+7)
195 g3 = uparam(iadbuf+8)
196 epsmax= uparam(iadbuf+11)
197 c1=uparam(iadbuf+2)/three/(one - two*nu)
199 rbulk = uparam(iadbuf+2)*third/(one-two*nu)
201 e(i) = uparam(iadbuf+2)
203 nrate = nint(uparam(iadbuf+1))
210 IF (time == zero)
THEN
217 trsigo(i)=-(sigoxx(i)+sigoyy(i)+sigozz(i))*third
218 uvar(i,3) = sqrt(three_half*(
219 . (sigoxx(i)+trsigo(i))*(signxx(i)+trsigo(i))
220 . +(sigoyy(i)+trsigo(i))*(signyy(i)+trsigo(i))
221 . +(sigozz(i)+trsigo(i))*(signzz(i)+trsigo(i))
222 . +two*(sigoxy(i)*sigoxy(i)+sigoyz(i)*sigoyz(i)
223 . +sigozx(i)*sigozx(i))))
230 fund = ifunc(i1+nrate)
231 np1 = (npf(func+1)-npf(func))/2
232 np2 = (npf(fund+1)-npf(fund))/2
237 s2=tf(npf(func)+j1+2)
238 t1=tf(npf(func)+j1+1)
239 t2=tf(npf(func)+j1+3)
243 x2=tf(npf(fund)+k1+2)
244 y1=tf(npf(fund)+k1+1)
245 y2=tf(npf(fund)+k1+3)
246 IF (y2>=t1 .AND. y1<=t2 .AND. x2>=s1 .AND. x1<=s2)
THEN
247 dydx = (y2-y1) / (x2-x1)
248 dtds = (t2-t1) / (s2-s1)
249 IF (dydx > dtds)
THEN
250 sx = (t1-y1-dtds*s1+dydx*x1) / (dydx-dtds)
251 ty = t1 + dtds*(sx - s1)
252 IF (ty>=y1 .AND. ty<=y2 .AND. sx>=x1 .AND. sx<=x2)
THEN
253 iadbuf = ipm(7,mx) + 13
254 uparam(iadbuf+i1+nrate*2) = ty
275 eps(i) = (one/(one+nu))*sqrt((epsxx(i)*epsxx(i)+epsyy(i)*epsyy(i)+
276 . epszz(i)*epszz(i)+two*(epsxy(i
278 depseq(i) = (one/(one+nu))*sqrt((depsxx(i)*depsxx(i) + depsyy(i)*
280 . depsyz(i)*depsyz(i) +depszx(i)*depszx(i))))
288 dav = (depsxx(i)+depsyy(i)+depszz(i))*third
290 p0(i) = -(sigoxx(i)+sigoyy(i)+sigozz(i))*third
292 dexx(i) = depsxx(i)-dav
293 deyy(i) = depsyy(i)-dav
294 dezz(i) = depszz(i)-dav
296 soxx(i) =sigoxx(i)+p0(i)
297 soyy(i) =sigoyy(i)+p0(i)
298 sozz(i) =sigozz(i)+p0(i)
300 svmo2(i) = two_third*uvar(i,3)*uvar(i,3)
302 signxx(i)=soxx(i)+g2*dexx(i)
303 signyy(i)=soyy(i)+g2*deyy(i)
304 signzz(i)=sozz(i)+g2*dezz(i)
305 signxy(i)=sigoxy(i)+g *depsxy(i)
306 signyz(i)=sigoyz(i)+g *depsyz(i)
307 signzx(i)=sigozx(i)+g *depszx(i)
310 sv2(i) = three_half*(signxx(i)*signxx(i)+signyy(i)*signyy
311 . +signzz(i) *signzz(i)
312 . +two*(signxy(i)*signxy(i)
313 . +signyz(i)*signyz(i)
314 . +signzx(i)*signzx(i)))
315 svm(i) = sqrt(sv2(i))
318 p = c1 * (rho(i)/rho0(i)-one)
319 work(i) = (signxx(i)-p)*depsxx(i) +
320 . (signyy(i)-p)*depsyy(i) +
321 . (signzz(i)-p)*depszz(i) +
322 . two*signxy(i) *depsxy(i) +
323 . two*signyz(i) *depsyz(i) +
324 . two*signzx(i) *depszx(i)
326 dsig(i) = sqrt(three_half* ( (g2*dexx(i))**2+
329 . two*((g *depsxy(i))**2+
331 . (g *depszx(i))**2) ))
334 coefa(i) = two* g*g *(two*(dexx(i)*dexx(i)+
335 . deyy(i)*deyy(i) + dezz(i)*dezz(i)) +
336 . depsxy(i)*depsxy(i)+depsyz(i)*depsyz(i)+
337 . depszx(i)*depszx(i))
339 coefb(i) = four *g*(soxx(i)*dexx(i)
340 . +soyy(i)*deyy(i)+sozz(i)*dezz(i)+sigoxy(i)*depsxy(i)
341 . +sigoyz(i)*depsyz(i)+sigozx(i)*depszx(i))
346 soundsp(i) = sqrt((rbulk+four_over_3*g)/rho0(i))
352 iadbuf = ipm(7,mat(1))-1+14
357 IF (epsp(i) > uparam(iadbuf+j)) jj(i) = j
363 yfac1(i) = uparam(i1+nrate)
364 sigy1 = uparam(i1+nrate*2)*yfac1(i)
371 yfac2(i) = uparam(i2+nrate)
372 fac(i) = (epsp(i) - rate1) / (rate2 - rate1)
373 sigy2 = uparam(i2+nrate*2)*yfac2(i)
374 sigyld(i) = sigy1 + fac(i)*(sigy2-sigy1)
376 iposc1(i) = nint(uvar(i,n0+j1))
377 iposc2(i) = nint(uvar(i,n0+j2))
378 epsc1(i) = uvar(i,n1+j1)
379 epsc2(i) = uvar(i,n1+j2)
380 iadc1(i) = npf(ipm(10+j1,mx))/2 + 1
381 iadc2(i) = npf(ipm(10+j2,mx))/2 + 1
382 ilenc1(i) = npf(ipm(10+j1,mx)+1)/2-iadc1(i)-iposc1(i)
383 ilenc2(i) = npf(ipm(10+j2,mx)+1)/2-iadc2(i)-iposc2(i)
385 iposd1(i) = nint(uvar(i,n2+j1))
386 iposd2(i) = nint(uvar(i,n2+j2))
387 epsd1(i) = uvar(i,n3+j1)
388 epsd2(i) = uvar(i,n3+j2)
389 iadd1(i) = npf(ipm(10+nrate+j1,mx))/2 + 1
390 iadd2(i) = npf(ipm(10+nrate+j2,mx))/2 + 1
391 ilend1(i) = npf(ipm(10+nrate+j1,mx)+1)/2
392 . - iadd1(i) - iposd1(i)
393 ilend2(i) = npf(ipm(10+nrate+j2,mx)+1)/2
394 . - iadd2(i) - iposd2(i)
397 iposc1(i) = nint(uvar(i,n0+j1))
398 iposd1(i) = nint(uvar(i,n2+j1))
399 epsc1(i) = uvar(i,n1+j1)
400 epsd1(i) = uvar(i,n3+j1)
402 iadc1(i) = npf(ipm(10+j1,mx))/2 + 1
403 iadd1(i) = npf(ipm(10+nrate+j1,mx))/2 + 1
404 ilenc1(i) = npf(ipm(10+j1,mx)+1)/2-iadc1(i)-iposc1(i)
405 ilend1(i) = npf(ipm(10+nrate+j1,mx)+1)/2
406 . - iadd1(i) - iposd1(i)
411 CALL interstar(tf ,iadc1,iposc1,ilenc1,nel ,
412 . epss ,epsc1,dydxc1,e ,yc1 ,yfac1 )
413 CALL interstar(tf ,iadc2,iposc2,ilenc2,nel ,
414 . epss ,epsc2,dydxc2,e ,yc2 ,yfac2 )
416 CALL interstar(tf ,iadd1,iposd1,ilend1,nel ,
418 CALL interstar(tf ,iadd2,iposd2,ilend2,nel ,
419 . epse ,epsd2,dydxd2,e ,yd2 ,yfac2 )
421 CALL interstar(tf ,iadc1,iposc1,ilenc1,nel ,
422 . epss ,epsc1,dydxc1,e ,yc1 ,yfac1 )
423 CALL interstar(tf ,iadd1,iposd1,ilend1,nel ,
424 . epse ,epsd1,dydxd1,e ,yd1 ,yfac1 )
431 uvar(i,n0+j1) = iposc1(i)
432 uvar(i,n0+j2) = iposc2(i)
433 uvar(i,n1+j1) = epsc1(i)
434 uvar(i,n1+j2) = epsc2(i)
435 uvar(i,n2+j1) = iposd1(i)
436 uvar(i,n2+j2) = iposd2(i)
437 uvar(i,n3+j1) = epsd1(i)
438 uvar(i,n3+j2) = epsd2(i)
449 hc(i) = dydxc1(i) + (dydxc2(i)-dydxc1(i))*fac(i)
450 hd(i) = dydxd1(i) + (dydxd2(i)-dydxd1(i))*fac(i)
451 sigfc(i) = yc1(i) + (yc2(i)-yc1(i))*fac(i)
452 sigfd(i) = yd1(i) + (yd2(i)-yd1(i))*fac(i)
458 uvar(i,n0+j1) = iposc1(i)
459 uvar(i,n1+j1) = epsc1(i)
460 uvar(i,n2+j1) = iposd1(i)
461 uvar(i,n3+j1) = epsd1(i)
475 deq(i) = eps(i) -uvar(i,n4+1)
476 flag(i) = int(uvar(i,n4+2) )
478 IF (svm(i) < sigfd(i))
THEN
480 depss(i) = (svm(i) - sigfd(i)) / (e(i) + hd(i))
482 sigfd(i) = sigfd(i) + hd(i)*depss(i)
483 desel = ( sigfd(i) - sfd ) / e(i)
484 test = desel + depss(i)
485 IF((depseq(i)-abs(test))>em15.AND. dsig(i)> sqrt(svmo2(i)))
THEN
486 depss(i) = -(svm(i) + sfd) / (e(i) + hd(i))
488 sigfd(i) = sigfd(i) + hd(i)*depss(i)
492 cc = svmo2(i) - two_third * sigfd(i)*sigfd(i)
498 signxx(i)=soxx(i)+
alpha*g2*dexx(i)
499 signyy(i)=soyy(i)+
alpha*g2*deyy(i)
500 signzz(i)=sozz(i)+
alpha*g2*dezz(i)
501 signxy(i)=sigoxy(i)+
alpha*g *depsxy(i)
502 signyz(i)=sigoyz(i)+
alpha*g *depsyz(i)
503 signzx(i)=sigozx(i)+
alpha*g *depszx(i)
505 ELSEIF (svm(i) >= sigfc(i))
THEN
507 depss(i) = (svm(i) - sigfc(i)) / (e(i) + hc(i))
508 sfc = sigfc(i) + hc(i)*depss(i)
509 sfd = sigfd(i) + hd(i)*depss(i)
513 cc = svmo2(i) - two_third * sfc*sfc
516 signxx(i)=soxx(i)+
alpha*g2*dexx(i)
517 signyy(i)=soyy(i)+
alpha*g2*deyy(i)
518 signzz(i)=sozz(i)+
alpha*g2*dezz(i)
519 signxy(i)=sigoxy(i)+
alpha*g *depsxy(i)
520 signyz(i)=sigoyz(i)+
alpha*g *depsyz(i)
521 signzx(i)=sigozx(i)+
alpha*g *depszx(i)
524 depss(i) = (svm(i) - sigfc(i)) / (g3 + hc(i))
525 sigfc(i) = sigfc(i) + hc(i)*depss(i)
526 sigfd(i) = sigfd(i) + hd(i)*depss(i)
529 cc = svmo2(i) - two_third * sigfc(i)*sigfc(i)
532 signxx(i)=soxx(i)+
alpha*g2*dexx(i)
533 signyy(i)=soyy(i)+
alpha*g2*deyy(i)
534 signzz(i)=sozz(i)+
alpha*g2*dezz(i)
535 signxy(i)=sigoxy(i)+
alpha*g *depsxy(i)
536 signyz(i)=sigoyz(i)+
alpha*g *depsyz(i)
537 signzx(i)=sigozx(i)+
alpha*g *depszx(i)
539 pla(i) = pla(i) + off(i)*dpla(i)
545 ELSEIF ( svm(i) < sigfc(i))
THEN
547 IF (flag(i) == -1 .AND. work(i) < zero.AND.epss(i)>pla(i))
THEN
549 yield(i)=svm(i)+sigfd(i)
550 depss(i) = -(yield(i)) / (e(i) + hd(i))
551 sigfd(i) = sigfd(i) + hd(i)*depss(i)
554 cc = svmo2(i) - two_third * sigfd(i)*sigfd(i)
559 signxx(i)=soxx(i)+
alpha*g2*dexx(i)
560 signyy(i)=soyy(i)+
alpha*g2
561 signzz(i)=sozz(i)+
alpha*g2*dezz(i)
563 signyz(i)=sigoyz(i)+
alpha*g *depsyz(i)
564 signzx(i)=sigozx(i)+
alpha*g *depszx(i)
571 svm(i) = sqrt(three_half*(signxx(i)*signxx(i)+signyy(i)*signyy(i)
572 . +signzz(i) *signzz(i)
573 . +two*(signxy(i)*signxy(i)
574 . +signyz(i)*signyz(i)
575 . +signzx(i)*signzx(i))))
578 signxx(i)=signxx(i)-p
579 signyy(i)=signyy(i)-p
580 signzz(i)=signzz(i)-p
582 IF( dpla(i) > zero)
THEN
583 h(i)=(svm(i)-uvar(i,3))/dpla(i)
587 epss(i) = epss(i) + depss(i)
588 epse(i) = epss(i) - pla(i)
595 uvar(i,n4+1) = eps(i)
596 uvar(i,n4+2) = flag(i)
600 IF(pla(i) > epsmax .AND. off(i) == one) off(i)=four_over_5