33 1 NEL ,NUPARAM,NUVAR ,MFUNC ,KFUNC ,
34 2 NPF ,NPT0 ,IPT ,IFLAG ,
35 2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,
36 3 AREA ,EINT ,THKLY ,ISRATE ,ASRATE ,
37 4 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,
38 5 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
39 6 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
40 7 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
41 8 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
42 9 SIGVXX ,SIGVYY ,SIGVXY ,SIGVYZ ,SIGVZX ,
43 A SOUNDSP,VISCMAX,THK ,PLA ,UVAR ,
44 B OFF ,NGL ,IPM ,MAT ,ETSE ,
45 C GS ,YLD ,EPSP ,DPLA_I )
49#include "implicit_f.inc"
101#include "param_c.inc"
102#include "com01_c.inc"
106 INTEGER NEL, NUPARAM, NUVAR, NPT0, IPT,ISRATE,
107 . IFLAG(*),NGL(NEL),MAT(NEL),IPM(NPROPMI,*)
108 my_real ,
INTENT(IN) :: ASRATE
109 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: EPSP
110 my_real TIME,TIMESTEP,UPARAM(*),
111 . AREA(NEL),RHO0(),EINT(NEL,2),
112 . THKLY(NEL),PLA(NEL),
113 . EPSPXX(NEL),EPSPYY(NEL),
114 . EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
115 . DEPSXX(NEL),DEPSYY(NEL),
116 . DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
117 . EPSXX(NEL) ,EPSYY(NEL) ,
118 . EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
119 . sigoxx(nel),sigoyy(nel),
120 . sigoxy(nel),sigoyz(nel),sigozx(nel),
126 . signxx(nel),signyy(nel),
127 . signxy(nel),signyz(nel),signzx(nel),
128 . sigvxx(nel),sigvyy(nel),
129 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
130 . soundsp(nel),viscmax(nel),etse(nel),
135 my_real uvar(nel,nuvar), off(nel),thk(nel),yld(nel)
139 INTEGER (*), MFUNC, KFUNC(MFUNC)
152 INTEGER I,I1,I2,J,J1,J2,K,,N0,N1,N2,N3,IADBUF,NFUNC,FUNC,FUND,
154 INTEGER JJ(NEL),IFUNC(NEL,100),
155 . IPOS(NEL),IAD(NEL),ILEN(NEL),
156 . IPOSC1(NEL),IADC1(NEL),ILENC1(NEL),
157 . IPOSC2(NEL),IADC2(NEL),ILENC2(NEL),
158 . IPOSD1(NEL),IADD1(NEL),ILEND1(NEL),
159 . IPOSD2(NEL),IADD2(NEL),ILEND2(NEL)
161 . ,DEZZ,DPLA,A11,A22,RATE1,RATE2,SIGY1,SIGY2,DYDX,DTDS,ALPHA,
162 . S1,S2,SX,T1,T2,TY,X1,X2,Y1,Y2,A,B,C,EPSEFF,SFC,SFD,EPSPL
164 . E(NEL),A1(NEL),A2(NEL),G(NEL),G3(NEL),HC(NEL),HD(NEL),
165 . nu(nel),nnu1(nel),nu3(nel),epsmax(nel),fac(nel),deplzz(nel),
166 . sigo(nel),svm(nel),sigyld(nel),
167 . dydxc1(nel),dydxc2(nel),yc1(nel),yc2(nel),
168 . dydxd1(nel),dydxd2(nel),yd1(nel),yd2(nel),
169 . depse(nel),epse(nel),depss(nel),epss(nel),
170 . dsigxx(nel),dsigyy(nel),dsigxy(nel),
171 . crit(nel),sigfd(nel),sigfc(nel),dsigv(nel),
172 . sds(nel),dsig2(nel),sv2(nel),dsvm(nel),
173 . epsc1(nel),epsc2(nel),epsd1(nel),epsd2(nel),
174 . dydxc(nel),yc(nel),yfac1(nel),yfac2(nel)
192 nfunc = ipm(10,mat(i))
194 ifunc(i,j)=ipm(10+j,mat(i))
197 iadbuf = ipm(7,mat(1)) - 1
199 e(i) = uparam(iadbuf+2)
200 g(i) = uparam(iadbuf+3)
201 nu(i) = uparam(iadbuf+4)
202 a1(i) = uparam(iadbuf+5)
203 a2(i) = uparam(iadbuf+6)
204 g3(i) = uparam(iadbuf+8)
205 nnu1(i)= nu(i) / (one - nu(i))
206 nu3(i) = one - nnu1(i)
207 epsmax(i)= uparam(iadbuf+11)
209 nrate = nint(uparam(iadbuf+1))
215 IF (time == zero)
THEN
221 uvar(i,3) = sqrt(sigoxx(i)*sigoxx(i) + sigoyy(i)*sigoyy(i)
222 . -sigoxx(i)*sigoyy(i) + sigoxy(i)*sigoxy(i)*three)
229 fund = ifunc(i,i1+nrate)
230 np1 = (npf(func+1)-npf(func))/2
231 np2 = (npf(fund+1)-npf(fund))/2
236 s2=tf(npf(func)+j1+2)
237 t1=tf(npf(func)+j1+1)
238 t2=tf(npf(func)+j1+3)
242 x2=tf(npf(fund)+k1+2)
243 y1=tf(npf(fund)+k1+1)
244 y2=tf(npf(fund)+k1+3)
245 IF (y2>=t1 .AND. y1<=t2 .AND. x2>=s1 .AND. x1<=s2)
THEN
246 dydx = (y2-y1) / (x2-x1)
247 dtds = (t2-t1) / (s2-s1)
248 IF (dydx > dtds)
THEN
249 sx = (t1-y1-dtds*s1+dydx*x1) / (dydx-dtds)
250 ty = t1 + dtds*(sx - s1)
251 IF (ty>=y1 .AND. ty<=y2 .AND. sx>=x1 .AND. sx<=x2)
THEN
252 iadbuf = ipm(7,mat(i)) + 13
253 uparam(iadbuf+i1+nrate*2) = ty
269 epspl = half*(abs(epspxx(i)+epspyy(i))
270 . + sqrt((epspxx(i)-epspyy(i))**2 + epspxy(i)**2))
271 epsp(i) = asrate*epspl + (one-asrate)*epsp(i)
287 dsigxx(i) = a11*depsxx(i)+a22*depsyy(i)
288 dsigyy(i) = a22*depsxx(i)+a11*depsyy(i)
289 dsigxy(i) = g(i)*depsxy(i)
291 signxx(i) = sigoxx(i)+dsigxx(i)
292 signyy(i) = sigoyy(i)+dsigyy(i)
293 signxy(i) = sigoxy(i)+dsigxy(i)
294 signyz(i) = sigoyz(i) + gs(i)*depsyz(i)
295 signzx(i) = sigozx(i) + gs(i)*depszx(i)
297 crit(i) = sigoxx(i)*depsxx(i) + sigoyy(i)*depsyy(i)
298 . + half*(sigoxy(i)*depsxy(i))
299 dsvm(i) = dsigxx(i)*dsigxx(i) + dsigyy(i)*dsigyy(i)
302 sv2(i) = signxx(i)*signxx(i) + signyy(i)*signyy(i)
303 . -signxx(i)*signyy(i) + signxy(i)*signxy(i)*three
304 svm(i) = sqrt(sv2(i))
305 dsig2(i) = dsigxx(i)*dsigxx(i) + dsigyy(i)*dsigyy(i)
306 . -dsigxx(i)*dsigyy(i) + dsigxy(i)*dsigxy(i)*three
307 sds(i) = (sigoxx(i)*dsigxx(i) + sigoyy(i)*dsigyy(i)
308 . +sigoxy(i)*dsigxy(i)*three)*two
309 . -sigoxx(i)*dsigyy(i) - sigoyy(i)*dsigxx(i)
314 soundsp(i) = sqrt(e(i)/rho0(i))
321 iadbuf = ipm(7,mat(1))-1+14
325 IF (epsp(i) > uparam(iadbuf+j)) jj(i) = j
331 yfac1(i) = uparam(i1+nrate)
332 sigy1 = uparam(i1+nrate*2)*yfac1(i)
339 yfac2(i) = uparam(i2+nrate)
340 fac(i) = (epsp(i) - rate1) / (rate2 - rate1)
341 sigy2 = uparam(i2+nrate*2)*yfac2(i)
342 sigyld(i) = sigy1 + fac(i)*(sigy2-sigy1)
344 iposc1(i) = nint(uvar(i,n0+j1))
345 iposc2(i) = nint(uvar(i,n0+j2))
346 epsc1(i) = uvar(i,n1+j1)
347 epsc2(i) = uvar(i,n1+j2)
348 iadc1(i) = npf(ipm(10+j1,mat(i)))/2 + 1
349 iadc2(i) = npf(ipm(10+j2,mat(i)))/2 + 1
350 ilenc1(i) = npf(ipm(10+j1,mat(i))+1)/2-iadc1(i)-iposc1(i)
351 ilenc2(i) = npf(ipm(10+j2,mat(i))+1)/2-iadc2(i)-iposc2(i)
353 iposd1(i) = nint(uvar(i,n2+j1))
354 iposd2(i) = nint(uvar(i,n2+j2))
355 epsd1(i) = uvar(i,n3+j1)
356 epsd2(i) = uvar(i,n3+j2)
357 iadd1(i) = npf(ipm(10+nrate+j1,mat(i)))/2 + 1
358 iadd2(i) = npf(ipm(10+nrate+j2,mat(i)))/2 + 1
359 ilend1(i) = npf(ipm(10+nrate+j1,mat(i))+1)/2
360 . - iadd1(i) - iposd1(i)
361 ilend2(i) = npf(ipm(10+nrate+j2,mat(i))+1)/2
362 . - iadd2(i) - iposd2(i)
365 iposc1(i) = nint(uvar(i,n0+j1))
366 iposd1(i) = nint(uvar(i,n2+j1))
367 epsc1(i) = uvar(i,n1+j1)
368 epsd1(i) = uvar(i,n3+j1)
370 iadc1(i) = npf(ipm(10+j1,mat(i)))/2 + 1
371 iadd1(i) = npf(ipm(10+nrate+j1,mat(i)))/2 + 1
372 ilenc1(i) = npf(ipm(10+j1,mat(i))+1)/2-iadc1(i)-iposc1(i)
373 ilend1(i) = npf(ipm(10+nrate+j1,mat(i))+1)/2
374 . - iadd1(i) - iposd1(i)
380 CALL interstar(tf ,iadc1,iposc1,ilenc1,nel ,
381 . epss ,epsc1,dydxc1,e ,yc1 ,yfac1 )
382 CALL interstar(tf ,iadc2,iposc2,ilenc2,nel ,
383 . epss ,epsc2,dydxc2,e ,yc2 ,yfac2 )
385 CALL interstar(tf ,iadd1,iposd1,ilend1,nel ,
386 . epse ,epsd1,dydxd1,e ,yd1 ,yfac1 )
387 CALL interstar(tf ,iadd2,iposd2,ilend2,nel ,
388 . epse ,epsd2,dydxd2,e ,yd2 ,yfac2 )
390 CALL interstar(tf ,iadc1,iposc1,ilenc1,nel ,
391 . epss ,epsc1,dydxc1,e ,yc1 ,yfac1 )
392 CALL interstar(tf ,iadd1,iposd1,ilend1,nel ,
393 . epse ,epsd1,dydxd1,e ,yd1 ,yfac1 )
400 uvar(i,n0+j1) = iposc1(i)
401 uvar(i,n0+j2) = iposc2(i)
402 uvar(i,n1+j1) = epsc1(i)
403 uvar(i,n1+j2) = epsc2(i)
404 uvar(i,n2+j1) = iposd1(i)
405 uvar(i,n2+j2) = iposd2(i)
406 uvar(i,n3+j1) = epsd1(i)
407 uvar(i,n3+j2) = epsd2(i)
418 hc(i) = dydxc1(i) + (dydxc2(i)-dydxc1(i))*fac(i)
419 hd(i) = dydxd1(i) + (dydxd2(i)-dydxd1(i))*fac(i)
420 sigfc(i) = yc1(i) + (yc2(i)-yc1(i))*fac(i)
421 sigfd(i) = yd1(i) + (yd2(i)-yd1(i))*fac(i)
427 uvar(i,n0+j1) = iposc1(i)
428 uvar(i,n1+j1) = epsc1(i)
429 uvar(i,n2+j1) = iposd1(i)
430 uvar(i,n3+j1) = epsd1(i)
447 IF (svm(i) > sigfc(i))
THEN
449 depss(i) = (svm(i) - sigfc(i)) / (e(i) + hc(i))
450 sfc = sigfc(i) + hc(i)*depss(i)
451 sfd = sigfd(i) + hd(i)*depss(i)
455 c = sigo(i)*sigo(i) - sfc*sfc
458 signxx(i) = sigoxx(i) + dsigxx(i)*alpha
459 signyy(i) = sigoyy(i) + dsigyy(i)*alpha
460 signxy(i) = sigoxy(i) + dsigxy(i)*alpha
463 depss(i) = (svm(i) - sigfc(i)) / (g3(i) + hc(i))
464 sigfc(i) = sigfc(i) + hc(i)*depss(i)
465 sigfd(i) = sigfd(i) + hd(i)*depss(i)
469 c = sigo(i)*sigo(i) - sigfc(i)*sigfc(i)
472 signxx(i) = sigoxx(i) + dsigxx(i)*alpha
473 signyy(i) = sigoyy(i) + dsigyy(i)*alpha
474 signxy(i) = sigoxy(i) + dsigxy(i)*alpha
477 pla(i) = pla(i) + off(i)*dpla_i(i)
478 deplzz(i) = dpla_i(i)*(signxx(i)+signyy(i))*half*nu3(i)
479 . /
max(em20,sigfc(i))
480 etse(i)= hc(i)/(hc(i)+e(i))
487 ELSEIF (svm(i) < sigfd(i))
THEN
489 depss(i) = (svm(i) - sigfd(i)) / (e(i) + hd(i))
490 sigfd(i) = sigfd(i) + hd(i)*depss(i)
493 c = sigo(i)*sigo(i) - sigfd(i)*sigfd(i)
498 signxx(i) = sigoxx(i) + dsigxx(i)*alpha
499 signyy(i) = sigoyy(i) + dsigyy(i)*alpha
500 signxy(i) = sigoxy(i) + dsigxy(i)*alpha
510 dezz = (depsxx(i)+depsyy(i))*nnu1(i) + deplzz(i)
511 thk(i)= thk(i) - dezz*thkly(i)*off(i)
514 . -signxx(i)*signyy(i) + three*signxy(i)*signxy(i))
515 epss(i) = epss(i) + depss(i)
516 epse(i) = epss(i) - pla(i)
523 IF (pla(i) > epsmax(i) .and. off(i) == one) off(i)=four_over_5