36 1 NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC ,NPF ,
37 2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,RHO ,
38 3 VOLUME ,EINT ,UVAR ,OFF ,OFFG ,SOUNDSP ,
39 4 EPSP1 ,EPSP2 ,EPSP3 ,EPSP4 ,EPSP5 ,EPSP6 ,
40 5 EPSXX ,EPSYY ,EPSZZ ,EPSXY ,EPSYZ ,EPSZX ,
41 6 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
42 7 MFXX ,MFXY ,MFXZ ,MFYX ,MFYY ,MFYZ ,
43 8 MFZX ,MFZY ,MFZZ ,VISCMAX ,ISMSTR ,ET ,
44 9 IHET ,EPSTH3 ,IEXPAN ,NIPARAM ,IPARAM )
48#include "implicit_f.inc"
59#include "tabsiz_c.inc"
63 INTEGER,
INTENT(IN) :: NUPARAM
64 INTEGER,
INTENT(IN) :: NIPARAM
65 INTEGER,
INTENT(IN) :: NEL,NUVAR,ISMSTR,IHET,IEXPAN
66 my_real,
INTENT(IN) :: TIME, TIMESTEP
67 INTEGER,
DIMENSION(NIPARAM),
INTENT(IN) :: IPARAM(NIPARAM)
68 my_real,
DIMENSION(NUPARAM),
INTENT(IN) :: UPARAM()
69 my_real,
DIMENSION(NEL),
INTENT(IN) ::RHO,RHO0,VOLUME,EINT,
70 . OFFG,EPSTH3,,EPSP2,EPSP3,EPSP4,EPSP5,EPSP6,
71 . EPSXX,EPSYY,EPSZZ,EPSXY,EPSYZ,EPSZX,
72 . mfxx,mfxy,mfxz,mfyx,mfyy,mfyz,mfzx,mfzy,mfzz
76 my_real ,
DIMENSION(NEL),
INTENT(OUT) :: soundsp,viscmax
77 . signxx,signyy,signzz,signxy,signyz,signzx
81 my_real,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) :: uvar(nel,nuvar)
82 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: off(nel),et(nel)
86 INTEGER NPF(SNPC),NFUNC,IFUNC(NFUNC)
87 my_real FINTER,TF(STF)
92 INTEGER I,II,J,K,KFP,NPRONY,NORDER,IFORM
93 my_real TENSIONCUT,AMAX,GVMAX,GMAX,FFAC,TRACE,RBULK,DPDMU,
94 . AA,CC,FAC,INVE,ETV,RV_PUI,AMIN,NU_1
95 my_real,
DIMENSION(3) :: lam_al,fft
96 my_real,
DIMENSION(10) :: al,mu
97 my_real,
DIMENSION(100) :: gi,taux
98 my_real,
DIMENSION(NEL) :: sumdwdl,rv,j2third,p,dwdrv,eti,gtmax
99 my_real,
DIMENSION(3,3) :: a
100 my_real,
DIMENSION(NEL,3) :: t1,sigprv,ev,evm
101 my_real,
DIMENSION(NEL,6) :: dotb,svisc,c0,c1
102 my_real,
DIMENSION(NEL,3,3) :: f,ll,bb,lb,blt
103 my_real,
DIMENSION(NEL,6,100) :: h0, h
104 my_real,
DIMENSION(MVSIZ,3) :: evv
105 my_real,
DIMENSION(MVSIZ,6) :: av
106 my_real,
DIMENSION(MVSIZ,3,3) :: dirprv
107 my_real,
DIMENSION(NEL) :: p_fac
108 DOUBLE PRECISION AMAX1
127 gmax = gmax + mu(i)*al(i)
132 tensioncut = uparam(23)
142 taux(i) = uparam(24 + nprony + i)
143 gi(i) = uparam(24 + i)
144 gvmax = gvmax + gi(i)
146 etv =
min(gvmax,rbulk)/gmax
154 av(i,4) = epsxy(i) * half
155 av(i,5) = epsyz(i) * half
156 av(i,6) = epszx(i) * half
171 IF (ismstr == 0 .OR. ismstr == 2 .OR. ismstr == 4)
THEN
173 ev(i,1) = exp(evv(i,1))
174 ev(i,2) = exp(evv(i,2))
175 ev(i,3) = exp(evv(i,3))
178 ELSEIF (ismstr == 10 .OR. ismstr == 12)
THEN
180 IF (offg(i)<=one)
THEN
181 ev(i,1) = sqrt(evv(i,1) + one)
182 ev(i,2) = sqrt(evv(i,2) + one)
183 ev(i,3) = sqrt(evv(i,3) + one)
185 ev(i,1) = evv(i,1) + one
186 ev(i,2) = evv(i,2) + one
187 ev(i,3) = evv(i,3) + one
193 ev(i,1) = evv(i,1) + one
194 ev(i,2) = evv(i,2) + one
195 ev(i,3) = evv(i,3) + one
200 IF (impl_s > 0 .OR. ihet > 1)
THEN
207 IF(mu(ii)*al(ii)/=zero)
THEN
211 IF((al(ii)-one)/=zero)
THEN
212 eti(i) = eti(i) + mu(ii)*al(ii) * exp((al(ii)-one)*log(amax))
214 eti(i) = eti(i) + mu(ii)*al(ii)
220 et(1:nel)=
max(eti(1:nel),et(1:nel))
223 et(i) =
max(one,et(i)/gmax)
231 rv(i) = (ev(i,1)*ev(i,2)*ev(i,3))
235 IF (iexpan > 0 .AND. (ismstr == 10 .OR. ismstr == 11 .OR. ismstr == 12))
THEN
237 rv(i) = rv(i) - epsth3(i)
242 IF (rbulk > 24*gmax)
THEN
243 nu_1 = fourty*(half-(3*rbulk-gmax)/(6*rbulk+gmax))
245 amin =
min(ev(i,1),ev(i,2),ev(i,3))
246 IF (amin<zep2) p_fac(i) =
max(one,nu_1/
max
255 IF (rv(i) > zero)
THEN
256 rv_pui = exp((-third)*log(rv(i)))
257 j2third(i) = rv_pui**2
262 evm(i,1) = ev(i,1)*rv_pui
263 evm(i,2) = ev(i,2)*rv_pui
264 evm(i,3) = ev(i,3)*rv_pui
268 p(i) = rbulk*ffac*finter(kfp,rv(i),npf,tf,dpdmu)
271 p(i) = p_fac(i)*rbulk
276 gtmax(1:nel) = gmax + gvmax
278 cii(1:nel,1:3) = zero
280 IF (mu(ii)*al(ii) /= zero)
THEN
282 lam_al(1:3) = exp(al(ii)*log(evm(i,1:3)))
283 amax = third*(lam_al(1)+lam_al(2)+lam_al(3))
284 cii(i,1:3) = cii(i,1:3) + mu(ii)*al(ii)*(lam_al(1:3)+amax)
289 amax1 = 0.81*half/gmax
291 amax = amax1*
max(cii(i,1),cii(i,2),cii(i,3))
292 eti(i) =
max(one,amax)
293 gtmax(i) = gmax*eti(i) + gvmax
307 IF (evm(i,j)/=zero)
THEN
308 IF (al(ii)/=zero)
THEN
309 dwdl(i,j) = dwdl(i,j) + mu(ii) * exp(al(ii)*log(evm(i,j)))
311 dwdl(i,j) = dwdl(i,j) + mu(ii)
323 dwdrv(i) = p(i)*(rv(i)- one)
325 ELSEIF (iform == 2)
THEN
328 sumdwdl(i)=(dwdl(i,1)+dwdl(i,2)+dwdl(i,3))*third
335 sigprv(i,j) = (dwdl(i,j)-(sumdwdl(i)-rv(i)*dwdrv(i)))*inve
341 t1(i,1) = rv(i)*sigprv(i,1)/ev(i,1)
342 t1(i,2) = rv(i)*sigprv(i,2)/ev(i,2)
343 t1(i,3) = rv(i)*sigprv(i,3)/ev(i,3)
349 IF(off(i)==zero.OR.t1(i,j)>abs(tensioncut))
THEN
362 signxx(i) = dirprv(i,1,1)*dirprv(i,1,1)*sigprv(i,1)
363 . + dirprv(i,1,2)*dirprv(i,1,2)*sigprv(i,2)
364 . + dirprv(i,1,3)*dirprv(i,1,3)*sigprv(i,3)
366 signyy(i) = dirprv(i,2,2)*dirprv(i,2,2)*sigprv(i,2)
367 . + dirprv(i,2,3)*dirprv(i,2,3)*sigprv(i,3)
368 . + dirprv(i,2,1)*dirprv(i,2,1)*sigprv(i,1)
370 signzz(i) = dirprv(i,3,3)*dirprv(i,3,3)*sigprv(i,3)
371 . + dirprv(i,3,1)*dirprv(i,3,1)*sigprv(i,1)
372 . + dirprv(i,3,2)*dirprv(i,3,2)*sigprv(i,2)
374 signxy(i) = dirprv(i,1,1)*dirprv(i,2,1)*sigprv(i,1)
375 . + dirprv(i,1,2)*dirprv(i,2,2)*sigprv(i,2)
376 . + dirprv(i,1,3)*dirprv(i,2,3)*sigprv(i,3)
378 signyz(i) = dirprv(i,2,2)*dirprv(i,3,2)*sigprv(i,2)
379 . + dirprv(i,2,3)*dirprv(i,3,3)*sigprv(i,3)
380 . + dirprv(i,2,1)*dirprv(i,3,1)*sigprv(i,1)
382 signzx(i) = dirprv(i,3,3)*dirprv(i,1,3)*sigprv(i,3)
383 . + dirprv(i,3,1)*dirprv(i,1,1)*sigprv(i,1)
384 . + dirprv(i,3,2)*dirprv(i,1,2)*sigprv(i,2)
387 uvar(i,1) =
max(sigprv(i,1),sigprv(i,2),sigprv(i,3))
388 uvar(i,2) =
min(sigprv(i,1),sigprv(i,2),sigprv(i,3))
393 soundsp(i) = sqrt((two_third*gtmax(i)+p(i))/rho(i))
402 IF (ismstr == 10 .or. ismstr == 12)
THEN
412 ll(i,1,2) = epsp4(i) * half
413 ll(i,2,3) = epsp5(i) * half
414 ll(i,1,3) = epsp6(i) * half
415 ll(i,2,1) = ll(i,1,2)
416 ll(i,3,1) = ll(i,1,3)
417 ll(i,3,2) = ll(i,2,3)
419 f(i,1,1) = one + mfxx(i)
420 f(i,2,2) = one + mfyy(i)
421 f(i,3,3) = one + mfzz(i)
435 bb(i,1,1) = bb(i,1,1) * j2third(i)
436 bb(i,2,2) = bb(i,2,2) * j2third(i)
437 bb(i,3,3) = bb(i,3,3) * j2third(i)
438 bb(i,1,2) = bb(i,1,2) * j2third(i)
439 bb(i,2,3) = bb(i,2,3) * j2third(i)
440 bb(i,1,3) = bb(i,1,3) * j2third(i)
441 bb(i,2,1) = bb(i,1,2)
442 bb(i,3,2) = bb(i,2,3)
443 bb(i,3,1) = bb(i,1,3)
451 dotb(i,1) = lb(i,1,1) + blt(i,1,1)
452 dotb(i,2) = lb(i,2,2) + blt(i,2,2)
453 dotb(i,3) = lb(i,3,3) + blt(i,3,3)
454 dotb(i,4) = lb(i,1,2) + blt(i,1,2)
456 dotb(i,6) = lb(i,1,3) + blt(i,1,3)
460 svisc(1:nel,j) = zero
462 fac= -timestep/taux(ii)
464 h0(i,j,ii) = uvar(i, 6 + (ii - 1)*6 + j)
465 h(i,j,ii) = exp(fac)*h0(i,j,ii) +
466 . exp(half*fac)*dotb(i,j)*timestep
467 uvar(i, 6 + (ii - 1)*6 + j)= h(i,j,ii)
475 svisc(i,j) = svisc(i,j) + gi(ii)*h(i,j,ii)
484 svisc(i,1) = svisc(i,1)*inve
485 svisc(i,2) = svisc(i,2)*inve
486 svisc(i,3) = svisc(i,3)*inve
487 svisc(i,4) = svisc(i,4)*inve
488 svisc(i,5) = svisc(i,5)*inve
489 svisc(i,6) = svisc(i,6)*inve
491 trace = (svisc(i,1) + svisc(i,2) + svisc(i,3)) * third
492 svisc(i,1) = svisc(i,1) - trace
493 svisc(i,2) = svisc(i,2) - trace
494 svisc(i,3) = svisc(i,3) - trace
496 signxx(i) = signxx(i) + svisc(i,1)
497 signyy(i) = signyy(i) + svisc(i,2)
498 signzz(i) = signzz(i) + svisc(i,3)
499 signxy(i) = signxy(i) + svisc(i,4)
500 signyz(i) = signyz(i) + svisc(i,5)
501 signzx(i) = signzx(i) + svisc(i,6)
515 cc = third*(evm(i,1)**2 + evm(i,2)**2 + evm(i,3)**2)
516 fft(1) = evm(i,1)**2 - cc
517 fft(2) = evm(i,2)**2 - cc
518 fft(3) = evm(i,3)**2 - cc
520 c1(i,1) = dirprv(i,1,1)*dirprv(i,1,1)*fft(1)
521 . + dirprv(i,1,2)*dirprv(i,1,2)*fft(2)
522 . + dirprv(i,1,3)*dirprv(i,1,3)*fft(3)
524 c1(i,2) = dirprv(i,2,2)*dirprv(i,2,2)*fft(2)
525 . + dirprv(i,2,3)*dirprv(i,2,3)*fft(3)
526 . + dirprv(i,2,1)*dirprv(i,2,1)*fft(1)
528 c1(i,3) = dirprv(i,3,3)*dirprv(i,3,3)*fft(3)
529 . + dirprv(i,3,1)*dirprv(i,3,1)*fft(1)
530 . + dirprv(i,3,2)*dirprv(i,3,2)*fft(2)
532 c1(i,4) = dirprv(i,1,1)*dirprv(i,2,1)*fft(1)
533 . + dirprv(i,1,2)*dirprv(i,2,2)*fft(2)
534 . + dirprv(i,1,3)*dirprv(i,2,3)*fft(3)
536 c1(i,5) = dirprv(i,2,2)*dirprv(i,3,2)*fft(2)
537 . + dirprv(i,2,3)*dirprv(i,3,3)*fft(3)
538 . + dirprv(i,2,1)*dirprv(i,3,1)*fft(1)
540 c1(i,6) = dirprv(i,3,3)*dirprv(i,1,3)*fft(3)
541 . + dirprv(i,3,1)*dirprv(i,1,1)*fft(1)
542 . + dirprv(i,3,2)*dirprv(i,1,2)*fft(2)
554 svisc(1:nel,j) = zero
556 fac= -timestep/taux(ii)
558 h0(i,j,ii) = uvar(i, 12 + (ii - 1)*6 + j)
559 h(i,j,ii) = exp(fac)*h0(i,j,ii) +
560 . exp(half*fac)*(c1(i,j) - c0(i,j))
561 uvar(i, 12 + (ii - 1)*6 + j)= h(i,j,ii)
567 svisc(i,j) = svisc(i,j) + gi(ii)*h(i,j,ii)
575 svisc(i,1) = svisc(i,1)*inve
576 svisc(i,2) = svisc(i,2)*inve
577 svisc(i,3) = svisc(i,3)*inve
578 svisc(i,4) = svisc(i,4)*inve
579 svisc(i,5) = svisc(i,5)*inve
580 svisc(i,6) = svisc(i,6)*inve
582 signxx(i) = signxx(i) + svisc(i,1)
583 signyy(i) = signyy(i) + svisc(i,2)
584 signzz(i) = signzz(i) + svisc(i,3)
585 signxy(i) = signxy(i) + svisc(i,4)
586 signyz(i) = signyz(i) + svisc(i,5)
587 signzx(i) = signzx(i) + svisc(i,6)