33 1 NEL , NUPARAM, NUVAR , NFUNC , IFUNC , NPF ,
34 2 TF , TIME , TIMESTEP, UPARAM, RHO0 , RHO ,
35 3 VOLUME , EINT , NGL ,
36 4 EPSPXX , EPSPYY , EPSPZZ , EPSPXY, EPSPYZ, EPSPZX,
37 5 DEPSXX , DEPSYY , DEPSZZ , DEPSXY, DEPSYZ, DEPSZX,
38 6 EPSXX , EPSYY , EPSZZ , EPSXY , EPSYZ , EPSZX ,
39 7 SIGOXX , SIGOYY , SIGOZZ , SIGOXY, SIGOYZ, SIGOZX,
40 8 SIGNXX , SIGNYY , SIGNZZ , SIGNXY, SIGNYZ, SIGNZX,
41 9 SIGVXX , SIGVYY , SIGVZZ , SIGVXY, SIGVYZ, SIGVZX,
42 A SOUNDSP, VISCMAX, UVAR , OFF , ISMSTR, ET ,
43 B IHET , OFFG , EPSTH3 , IEXPAN ,MFXX ,MFXY ,
44 C MFXZ , MFYX , MFYY , MFYZ ,MFZX ,MFZY ,
49#include "implicit_f.inc"
53 INTEGER :: NEL, NUPARAM, NUVAR,ISMSTR,NGL(*),IHET,IEXPAN
54 my_real :: TIME , TIMESTEP , UPARAM(NUPARAM)
55 my_real ,
DIMENSION(NEL) :: RHO , RHO0 , VOLUME, EINT,
56 . EPSPXX, EPSPYY, EPSPZZ, EPSPXY,
57 . EPSPYZ, EPSPZX, DEPSXX, DEPSYY,
58 . DEPSZZ, DEPSXY, DEPSYZ, DEPSZX,
59 . EPSXX , EPSYY , EPSZZ , EPSXY ,
60 . EPSYZ , , SIGOXX, SIGOYY,
61 . SIGOZZ, SIGOXY, SIGOYZ, SIGOZX,
63 . MFXX , MFXY , MFXZ , MFYX ,
64 . MFYY , MFYZ , MFZX , MFZY ,
69 my_real ,
DIMENSION(NEL) :: signxx , signyy , signzz,
70 . signxy , signyz , signzx,
71 . sigvxx , sigvyy , sigvzz,
72 . sigvxy , sigvyz , sigvzx,
73 . soundsp, viscmax, et
77 my_real ,
DIMENSION(NEL) :: off
78 my_real ,
DIMENSION(NEL,NUVAR) :: uvar
82 INTEGER :: NPF(*), NFUNC, IFUNC(NFUNC)
83 my_real :: FINTER,FINTTE,TF(*),FINT2V
84 EXTERNAL FINTER,FINTTE
88 INTEGER :: I,J,ITEST,ONLY_TENSION_DATA
89 INTEGER ,
DIMENSION(NEL) :: ICOMP
90 my_real :: dw_di,l2,l3,l5,delta,
91 . g,rbulk,scale,t,epst,df,du,
92 . trace,p,fac,invjdetf,nu,gini,rbulkini,diff
93 my_real :: b(nel,6),lam2(nel,3),
94 . lambda(nel,3),evd(3),bd(nel,6)
95 my_real ,
DIMENSION(NEL) :: jdetf,i1,i1b,lamt,j2third,
97 my_real,
DIMENSION(NEL,3,3) :: f,fft
104 itest = nint(uparam(2))
109 only_tension_data = nint(uparam(7))
112 f(i,1,1) = one + mfxx(i)
113 f(i,2,2) = one + mfyy(i)
114 f(i,3,3) = one + mfzz(i)
136 jdetf(i) = f(i,1,1)*f(i,2,2)*f(i,3,3) - f(i,1,1)*f(i,2,3)*f(i,3,2)
137 . - f(i,3,3)*f(i,1,2)*f(i,2,1) + f(i,1,2)*f(i,2,3)*f(i,3,1)
138 . + f(i,2,1)*f(i,3,2)*f(i,1,3) - f(i,2,2)*f(i,3,1)*f(i,1,3)
140 i1b(i) = fft(i,1,1) + fft(i,2,2) + fft(i,3,3)
142 IF (jdetf(i) > zero)
THEN
143 j2third(i) = exp((-two_third )*log(jdetf(i)))
148 trace = (b(i,1)+b(i,2)+ b(i,3))*third
149 bd(i,1) = j2third(i)*(b(i,1) - trace)
150 bd(i,2) = j2third(i)*(b(i,2) - trace)
151 bd(i,3) = j2third(i)*(b(i,3) - trace)
152 bd(i,4:6) = j2third(i)*b(i,4:6)
153 i1(i) = j2third(i)*i1b(i)
156 IF(only_tension_data == 0)
THEN
158 diff = jdetf(i) - one
159 IF(diff < zero) icomp(i) = 1
173 invjdetf = one/
max(em20, jdetf(i))
175 t = scale*finter(ifunc(1),epst,npf,tf,df)
178 IF (i1b(i) == three .OR. lamt(i) == one)
THEN
180 ELSEIF((lamt(i)*l2 - one) /= zero)
THEN
181 dw_di = t*l2 / (lamt(i)*l2 - one)
183 gs(i)=
max(gini,df*scale)
184 k(i) = two*gs(i)*(one+nu) /
max(em20,three*(one-two*nu))
185 p = rbulk*(jdetf(i) - one)
186 signxx(i) = invjdetf*dw_di * bd(i,1) + p
187 signyy(i) = invjdetf*dw_di * bd(i,2) + p
188 signzz(i) = invjdetf*dw_di * bd(i,3) + p
189 signxy(i) = invjdetf*dw_di * bd(i,4)
190 signyz(i) = invjdetf*dw_di * bd(i,5)
191 signzx(i) = invjdetf*dw_di * bd(i,6)
192 uvar(i,1) = lamt(i) - one
193 uvar(i,2) = jdetf(i)*signzz(i) / lamt(i)
205 invjdetf = one/
max(em20, jdetf(i))
206 lamt(i) = one/
max(em20,lamt(i))
207 lamt(i) = sqrt(lamt(i))
209 t = scale*finter(ifunc(1),epst,npf,tf,df)
212 IF (i1b(i) == three .OR. lamt(i) == one)
THEN
214 ELSEIF((lamt(i) - l5) /= zero)
THEN
215 dw_di = t / (lamt(i) - l5)
217 gs(i)=
max(gini,df*scale)
218 k(i) = two*gs(i)*(one+nu) /
max(em20,three*(one-two*nu))
219 p = rbulk*(jdetf(i) - one)
220 signxx(i) = invjdetf*dw_di * bd(i,1) + p
221 signyy(i) = invjdetf*dw_di * bd(i,2) + p
222 signzz(i) = invjdetf*dw_di * bd(i,3) + p
223 signxy(i) = invjdetf*dw_di * bd(i,4)
224 signyz(i) = invjdetf*dw_di * bd(i,5)
225 signzx(i) = invjdetf*dw_di * bd(i,6)
226 uvar(i,1) = lamt(i) - one
227 uvar(i,2) = jdetf(i)*signzz(i) / lamt(i)
237 delta = (one - i1(i)) ** 2 - four
240 lamt(i) = half*
max(i1(i)+ sqrt(delta) - one ,i1(i) - sqrt(delta) - one)
241 ELSEIF(delta == zero)
THEN
242 lamt(i) = half*(i1(i) - one)
247 invjdetf= one/
max(em20, jdetf(i))
248 lamt(i) = sqrt(
max(zero,lamt(i)))
250 t = scale*finter(ifunc(1),epst,npf,tf,df)
253 IF (i1b(i) == three .OR. lamt(i) == one)
THEN
255 ELSEIF((lamt(i) - l3) /= zero)
THEN
256 dw_di = t / (lamt(i) - l3)
258 gs(i)=
max(gini,df*scale)
259 k(i) = two*gs(i)*(one+nu) /
max(em20,three*(one-two*nu))
260 p = rbulk*(jdetf(i) - one)
261 signxx(i) = invjdetf*dw_di * bd(i,1) + p
262 signyy(i) = invjdetf*dw_di * bd(i,2) + p
263 signzz(i) = invjdetf*dw_di * bd(i,3) + p
264 signxy(i) = invjdetf*dw_di * bd(i,4)
265 signyz(i) = invjdetf*dw_di * bd(i,5)
266 signzx(i) = invjdetf*dw_di * bd(i,6)
267 uvar(i,1) = lamt(i) - one
268 uvar(i,2) = -jdetf(i)*signzx(i) / lamt(i)
274 et(i) =
max(one, gs(i)/gini)
279 soundsp(i) = sqrt((four_over_3*g + rbulk)/rho(i))
subroutine sigeps111(nel, nuparam, nuvar, nfunc, ifunc, npf, tf, time, timestep, uparam, rho0, rho, volume, eint, ngl, epspxx, epspyy, epspzz, epspxy, epspyz, epspzx, depsxx, depsyy, depszz, depsxy, depsyz, depszx, epsxx, epsyy, epszz, epsxy, epsyz, epszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, sigvxx, sigvyy, sigvzz, sigvxy, sigvyz, sigvzx, soundsp, viscmax, uvar, off, ismstr, et, ihet, offg, epsth3, iexpan, mfxx, mfxy, mfxz, mfyx, mfyy, mfyz, mfzx, mfzy, mfzz)