32 1 NEL0 ,NUPARAM,NUVAR ,MFUNC ,KFUNC ,
33 2 NPF ,NPT0 ,IPT ,IFLAG ,ASRATE ,
34 2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,
36 4 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,
37 5 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
38 6 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
39 7 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
40 8 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
41 9 SIGVXX ,SIGVYY ,SIGVXY ,SIGVYZ ,SIGVZX ,
42 A SOUNDSP,VISCMAX,THK ,PLA ,UVAR ,
43 B OFF ,NGL ,IPM ,MAT ,ETSE ,
44 C GS ,YLD ,EPSD_PG ,EPSP ,ISRATE )
48#include "implicit_f.inc"
104#include "param_c.inc"
105#include "com01_c.inc"
110 INTEGER NEL0, NUPARAM, NUVAR, NPT0,ISRATE, IPT,(*),
111 . NGL(NEL0),MAT(NEL0),IPM(NPROPMI,*)
112 my_real ,
INTENT(IN) :: ASRATE
113 my_real ,
DIMENSION(NEL0) ,
INTENT(IN) :: EPSD_PG
114 my_real ,
DIMENSION(NEL0) ,
INTENT(INOUT) :: EPSP
115 my_real TIME,TIMESTEP(NEL0),UPARAM(*),
116 . AREA(),RHO0(NEL0),EINT(NEL0,2),
117 . THKLY(NEL0),PLA(NEL0),
118 . EPSPXX(NEL0),EPSPYY(NEL0),
119 . EPSPXY(NEL0),EPSPYZ(NEL0),EPSPZX(NEL0),
120 . DEPSXX(NEL0),DEPSYY(NEL0),
121 . DEPSXY(NEL0),DEPSYZ(NEL0)
124 . sigoxx(nel0),sigoyy(nel0),
125 . sigoxy(nel0),sigoyz(nel0),sigozx(nel0),gs(*)
130 . signxx(nel0),signyy(nel0),
131 . signxy(nel0),signyz(nel0),signzx(nel0),
132 . sigvxx(nel0),sigvyy(nel0),
133 . sigvxy(nel0),sigvyz(nel0),sigvzx(nel0),
134 . soundsp(nel0),viscmax(nel0),etse(nel0)
138 my_real uvar(nel0,nuvar), off(nel0),thk(nel0),yld(nel0)
142 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
143 my_real FINTER ,TF(*)
155 INTEGER I,J,NRATE(MVSIZ),J1,J2,N,NINDX,NMAX,IADBUF,NFUNC,
156 . iad1(mvsiz),ipos1(mvsiz),ilen1(mvsiz),
157 . iad2(mvsiz),ipos2(mvsiz),ilen2(mvsiz),
158 . jj(mvsiz),index(mvsiz),ifunc(mvsiz,100),nratem,
159 . nrate1,ifunc1(100),iadbufv(mvsiz),nfuncv(mvsiz),
160 . nfuncm, nratep(mvsiz), nraten(mvsiz),i1, i2,
161 . iad1p(mvsiz),ipos1p(mvsiz),ilen1p(mvsiz),
162 . iad2p(mvsiz),ipos2p(mvsiz),ilen2p(mvsiz),
163 . iad1n(mvsiz),ipos1n(mvsiz),ilen1n(mvsiz),
164 . iad2n(mvsiz),ipos2n(mvsiz),ilen2n(mvsiz),ii(mvsiz),
167 . e(mvsiz),a1(mvsiz),a2(mvsiz),g(mvsiz),g3(mvsiz),
168 . dydx1(mvsiz),dydx2(mvsiz),rate(mvsiz,2),svm(mvsiz),
169 . y1(mvsiz),y2(mvsiz),dr(mvsiz),epsmax(mvsiz),
170 . yfac(mvsiz,2),nnu1(mvsiz),nu1(mvsiz),
171 . nu2(mvsiz),nu3(mvsiz),nu4(mvsiz),nu5(mvsiz),nu6(mvsiz),
172 . aa(mvsiz),bb(mvsiz),dpla_i(mvsiz),dpla_j(mvsiz),
173 . pp(mvsiz),qq(mvsiz),fail(mvsiz),svmo(mvsiz),h(mvsiz),
174 . epsr1(mvsiz),epsr2(mvsiz),fisokin(mvsiz),
175 . sigexx(mvsiz),sigeyy(mvsiz),sigexy(mvsiz),sigezx(mvsiz),
176 . sigeyz(mvsiz),yn1(mvsiz),yn2(mvsiz),yp1(mvsiz),yp2(mvsiz),
177 . hk(mvsiz),nu(mvsiz), visc(mvsiz), viscv(mvsiz),c1(mvsiz),
178 . c2(mvsiz),ratep(mvsiz,2),raten(mvsiz,2), yldmax(mvsiz),
179 . yldmin(mvsiz), epst(mvsiz), yldelas(mvsiz),nnu(mvsiz)
181 . r,umr,a,b,c,amu,s11,s22,s12,p,p2,fac,dezz,
182 . sigz,s1,s2,s3,dpla,vm2,nnu2,
183 . err,f,df,pla_i,q2,yld_i,sigpxx,sigpyy,sigpxy,
185 . e1,a11,a21,g1,g31,nnu11,nu11,nu21,nu31,nu41,nu51,nu61,
187 . dsxx,dsyy,dsxy,dexx,deyy,dexy,nux,c11, c21
189 . y11(mvsiz),y21(mvsiz), me, ma1, ma2, mg, mnu,svm_old,
190 . dev, dtinv, lamda, deps33, svm1
191 INTEGER JST(MVSIZ+1), IC, MNRATE, ITER, MX
204 ifunc(i,j)=ipm(10+j,mx)
211 e(i) = uparam(iadbuf+2)
212 a1(i) = uparam(iadbuf+3)
213 a2(i) = uparam(iadbuf+4)
214 g(i) = uparam(iadbuf+5)
216 nu(i) = uparam(iadbuf+6)
217 visc(i) = uparam(iadbuf+7)
218 viscv(i) = uparam(iadbuf+8)
219 nratep(i) = uparam(iadbuf+9)
220 nraten(i) = uparam(iadbuf+10)
221 epsmax(i) = uparam(iadbuf+11)
222 nrate(i) =nraten(i) + nratep(i) +1
225 nnu(i) = nu(i) / (one - nu(i))
240 signxx(i)=sigoxx(i) + a1(i)*depsxx(i)+a2(i)*depsyy(i)
241 signyy(i)=sigoyy(i) + a2(i)*depsxx(i)+a1(i)*depsyy(i)
242 signxy(i)=sigoxy(i) + g(i) *depsxy(i)
243 signyz(i)=sigoyz(i) + gs(i) *depsyz(i)
244 signzx(i)=sigozx(i) + gs(i) *depszx(i)
246 visc(i) = visc(i)*rho0(i)
247 viscv(i) = viscv(i)*rho0(i)
249 c11 = one/
max(em20,three*visc(i) + four*viscv(i))
250 c1(i) = four* visc(i)*(three*viscv(i)
252 c2(i) = two*viscv(i)*(three*visc(i)
253 . - two*viscv(i))*c11
255 dtinv = timestep(i)**2/
max(em20, timestep(i))
257 sigvxx(i)= c2(i)*(epspxx(i)+epspyy(i))
258 . + two*viscv(i)*epspxx(i)
259 sigvyy(i)= c2(i)*(epspxx(i)+epspyy(i))
260 . + two*viscv(i)*epspyy(i)
261 sigvxy(i)= viscv(i)*epspxy(i)
262 sigvyz(i)= viscv(i)*epspyz(i)
263 sigvzx(i)= viscv(i)*epspzx(i)
265 soundsp(i) = sqrt(a1(i)/rho0(i))
266 c11 = c2(i) + 2*viscv(i)
268 viscmax(i) =
max(c2(i), c11)
269 viscmax(i) = viscmax(i)/
270 . (onep414*rho0(i)*soundsp(i)*sqrt(area(i)))
275 IF (israte == 0)
THEN
276 epsp(i) = half*(epspxx(i)+epspyy(i)
277 . + sqrt( (epspxx(i)-epspyy(i))*(epspxx(i)-epspyy(i))
278 . + epspxy(i)*epspxy(i) ) )
280 epsp(i) = asrate*epsd_pg(i) + (one-asrate)*epsp(i)
286 epst(i) = half*(epsxx(i)+epsyy(i)
287 . + sqrt( (epsxx(i)-epsyy(i))*(epsxx(i)-epsyy(i))
288 . + epsxy(i)*epsxy(i) ) )
289 IF(off(i)==one.AND.epst(i)>epsmax(i))off(i) =four_over_5
296 ii(i) = 1 + nratep(i)
301 iadbuf = ipm(7,mat(i)) - 1
302 IF(abs(epsp(i))>=uparam(iadbuf+ 10 +j)) jj(i) = j
308 iadbuf = ipm(7,mat(i))-1
310 . abs(uparam(iadbuf+10 + nratep(i) + j))) ii(i) = nratep(i) + j
314 iadbuf = ipm(7,mat(i))-1
315 ratep(i,1)=uparam(iadbuf+10+jj(i))
316 ratep(i,2)=uparam(iadbuf+10+jj(i)+1)
317 raten(i,1)=uparam(iadbuf+10+ii(i))
318 raten(i,2)=uparam(iadbuf+10+ii(i)+1)
327 ipos1p(i) = nint(uvar(i,j1))
328 iad1p(i) = npf(ifunc(i,j1)) / 2 + 1
329 ilen1p(i) = npf(ifunc(i,j1)+1) / 2 - iad1p(i) - ipos1p(i)
330 ipos2p(i) = nint(uvar(i,j2))
331 iad2p(i) = npf(ifunc(i,j2)) / 2 + 1
332 ilen2p(i) = npf(ifunc(i,j2)+1) / 2 - iad2p(i) - ipos2p(i)
334 ipos1n(i) = nint(uvar(i,i1))
335 iad1n(i) = npf(ifunc(i,i1)) / 2 + 1
336 ilen1n(i) = npf(ifunc(i,i1)+1) / 2 - iad1n(i) - ipos1n(i)
337 ipos2n(i) = nint(uvar(i,i2))
338 iad2n(i) = npf(ifunc(i,i2)) / 2 + 1
339 ilen2n(i) = npf(ifunc(i,i2)+1) / 2 - iad2n(i) - ipos2n(i)
341 ipos1(i) = nint(uvar(i,1))
343 ilen1(i) = npf(ifunc(i,1)+1) / 2 - iad1(i) - ipos1(i)
346 CALL vinter(tf,iad1p,ipos1p,ilen1p,nel0,epst,dydx1,yp1)
347 CALL vinter(tf,iad2p,ipos2p,ilen2p,nel0,epst,dydx2,yp2)
349 CALL vinter(tf,iad1n,ipos1n,ilen1n,nel0,epst,dydx1,yn1)
350 CALL vinter(tf,iad2n,ipos2n,ilen2n,nel0,epst,dydx2,yn2)
352 CALL vinter(tf,iad1,ipos1,ilen1,nel0,epst,dydx1,y1)
360 fac = (epsp(i) - ratep(i,1))/(ratep(i,2) - ratep(i,1))
361 yldmax(i) = yp1(i) + fac*(yp2(i)-yp1(i))
362 yldmax(i) =
max(yldmax(i),em20)
363 uvar(i,j1) = ipos1p(i)
364 uvar(i,j2) = ipos2p(i)
369 yldmin(i) = yn2(i) + fac*(yn1(i)-yn2(i))
370 yldmin(i) =
max(yldmin(i),em20)
371 uvar(i,i1) = ipos1n(i)
372 uvar(i,i2) = ipos2n(i)
386 svm(i)=sqrt(signxx(i)*signxx(i)
387 . +signyy(i)*signyy(i)
388 . -signxx(i)*signyy(i)
389 . +three*signxy(i)*signxy(i))
391 IF(svm(i)/=zero)
THEN
392 IF(svm(i)>=yldelas(i))
THEN
394 r =
min(one,yldelas(i)/
max(em20,svm(i)))
395 dev = (signxx(i) + signyy(i))*third
396 signxx(i)=(signxx(i)-dev)*r
397 signyy(i)=(signyy(i)-dev)*r
398 signxy(i)=signxy(i)*r
399 signyz(i)=signyz(i)*r
400 signzx(i)=signzx(i)*r
402 signxx(i)=(signxx(i)+ dev)
403 signyy(i)=(signyy(i)+ dev)
404 svm(i)=sqrt(signxx(i)*signxx(i)
405 . +signyy(i)*signyy(i)
406 . -signxx(i)*signyy(i)
407 . + three*signxy(i)*signxy(i))
411 sigexx(i)=signxx(i) + sigvxx(i)
412 sigeyy(i)=signyy(i) + sigvyy(i)
413 sigexy(i)=signxy(i) + sigvxy(i)
414 sigeyz(i)=signyz(i) + sigvyz(i)
415 sigezx(i)=signzx(i) + sigvzx(i)
416 svm(i)=sqrt(sigexx(i)*sigexx(i)
417 . +sigeyy(i)*sigeyy(i)
418 . -sigexx(i)*sigeyy(i)
419 . + three*sigexy(i)*sigexy(i))
420 IF(svm(i)>=yldmax(i))
THEN
421 r =
min(one,yldmax(i)/
max(em20,svm(i)))
422 ELSEIF(svm(i)<=yldmin(i))
THEN
423 r =
max(one,yldmin(i)/
max(em20,svm(i)))
425 dev = (sigexx(i) + sigeyy(i))*third
426 sigexx(i)=(sigexx(i)-dev)*r
427 sigeyy(i)=(sigeyy(i)-dev)*r
428 sigexy(i)=sigexy(i)*r
429 sigeyz(i)=sigeyz(i)*r
430 sigezx(i)=sigezx(i)*r
431 sigexx(i)=sigexx(i)+ dev
432 sigeyy(i)=sigeyy(i)+ dev
433 svm(i)=sqrt(sigexx(i)*sigexx(i)
434 . +sigeyy(i)*sigeyy(i)
435 . -sigexx(i)*sigeyy(i)
436 . + three*sigexy(i)*sigexy(i))
439 sigvxx(i)=sigexx(i) - signxx(i)
440 sigvyy(i)=sigeyy(i) - signyy(i)
441 sigvxy(i)=sigexy(i) - signxy(i)
442 sigvyz(i)=sigeyz(i) - signyz(i)
443 sigvzx(i)=sigezx(i) - signzx(i)
457 lamda = nu(i) * e(i) /((one + nu(i))*(one - two* nu(i)))
458 lamda = lamda + dtinv*third*(three*visc(i) - two*viscv(i))
459 c11= lamda + two*g(i) + two*dtinv*viscv(i)
460 dezz = -( lamda/
max(em20,c11))*(depsxx(i) + depsyy(i))
461 thk(i) = thk(i) + dezz*thkly(i)*off(i)
464 ELSEIF(iflag(1)==1)
THEN
470 ELSEIF(iflag(1)==0)
THEN