35 1 NEL ,NGL ,NUPARAM ,NUVAR ,NVARTMP ,NUMTABL ,
36 2 UPARAM ,UVAR ,VARTMP ,ITABLE ,TABLE ,JTHE ,
37 3 TIME ,TIMESTEP,OFF ,RHO ,PLA ,DPLA ,
38 4 SOUNDSP ,SIGY ,ET ,TEMP ,EPSD ,GS ,
39 5 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
40 6 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
41 7 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
42 8 THK ,THKLY ,INLOC ,DPLANL ,LOFF ,SEQ ,
43 9 LPLANL ,PLA_NL ,LEPSDNL ,DPDT_NL )
52#include "implicit_f.inc"
60 INTEGER NEL,NUPARAM,NUVAR,NVARTMP,NUMTABL,JTHE,INLOC
61 INTEGER ,
DIMENSION(NUMTABL),
INTENT(IN) :: ITABLE
62 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL
64 my_real :: TIME,TIMESTEP
65 my_real,
DIMENSION(NUPARAM) ,
INTENT(IN) :: UPARAM
66 my_real,
DIMENSION(NEL) ,
INTENT(IN) :: RHO,OFF,GS,THKLY,
67 . DEPSXX,DEPSYY,DEPSXY,DEPSYZ,DEPSZX,
68 . SIGOXX,SIGOYY,SIGOXY,SIGOYZ,SIGOZX,DPLANL
69 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: soundsp,sigy,et,
70 . signxx,signyy,signxy,signyz,signzx
71 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: pla,dpla,epsd,temp,thk,seq
72 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
73 INTEGER ,
DIMENSION(NEL,NVARTMP) ,
INTENT(INOUT) :: VARTMP
75 TYPE(
ttable),
DIMENSION(NTABLE) :: TABLE
76 my_real,
DIMENSION(NEL),
INTENT(IN) :: LOFF
77 INTEGER,
INTENT(IN) :: LPLANL, LEPSDNL
78 my_real,
DIMENSION(NEL*LPLANL) ,
INTENT(IN) :: pla_nl
79 my_real,
DIMENSION(NEL*LEPSDNL),
INTENT(IN) :: dpdt_nl
83 INTEGER I,II,NINDX,ITER,NITER,ISMOOTH,
84 . func_yld,func_temp,func_eta,ndim_yld,ndim_temp,ndim_eta
85 INTEGER ,
DIMENSION(NEL) :: INDEX
87 my_real :: young,g,a11
88 . xrate,xscale,yscale,dtinv,j2,dphi_dlam,
alpha,alphi,
89 . dfdsig2,sig_dfdsig,ddep,asrate
91 my_real,
DIMENSION(NEL) ::svm,yld,yld_tref,yld_temp,
93 . fact_eta,dydx,hardp,hardr,yld_i,hardp_i,hardr_i,dxdyv,dlam,phi,
94 . ftherm,tfac,normxx,normyy,normxy,
95 . szz,dpxx,dpyy,dpxy,dpla_dlam,pla0,dezz
96 my_real,
DIMENSION(NEL,3) :: xvec_eta
97 my_real,
DIMENSION(NEL,4) :: xvec
98 INTEGER,
DIMENSION(NEL,3) :: IPOS_ETA
99 INTEGER,
DIMENSION(NEL,2) :: IPOS
119 ismooth = nint(uparam(6))
128 dtinv = one /
max(em20, timestep)
129 alpha = asrate*timestep
132 IF (jthe /= 0) eta = zero
136 func_temp = itable(2)
138 ndim_yld = table(func_yld)%NDIM
139 IF (func_temp > 0)
THEN
140 ndim_temp = table(func_temp)%NDIM
142 IF (func_eta > 0)
THEN
143 ndim_eta = table(func_eta)%NDIM
146 epsd(1:nel) = uvar(1:nel,1)
160 IF (time == zero) temp(1:nel) = tini
164 IF (func_eta > 0)
THEN
166 xvec_eta(1:nel,1) = epsd(1:nel) * xrate
168 xvec_eta(1:nel,1) = dpdt_nl(1:nel) * xrate
170 ipos_eta(1:nel,1) = 1
171 IF (ndim_eta > 1)
THEN
172 xvec_eta(1:nel,2) = temp(1:nel)
173 ipos_eta(1:nel,2) = vartmp(1:nel,4)
175 IF (ndim_eta > 2)
THEN
177 xvec_eta(1:nel,3) = pla(1:nel)
179 xvec_eta(1:nel,3) = pla_nl(1:nel)
181 ipos_eta(1:nel,3) = vartmp(1:nel,5)
183 CALL table_vinterp(table(func_eta),nel,nel,ipos_eta,xvec_eta,
185 IF (ndim_eta > 1) vartmp(1:nel,4) = ipos_eta(1:nel,
186 IF (ndim_eta > 2) vartmp(1:nel,5) = ipos_eta(1:nel,3)
188 ftherm(i) =
min(eta*fact_eta(i), one)
191 ftherm(1:nel) =
min(eta, one)
201 signxx(i) = sigoxx(i) + a11*depsxx(i) + a12*depsyy(i)
202 signyy(i) = sigoyy(i) + a11*depsyy(i) + a12*depsxx(i)
203 signxy(i) = sigoxy(i) + depsxy(i)*g
204 signyz(i) = sigoyz(i) + depsyz(i)*gs(i)
205 signzx(i) = sigozx(i) + depszx(i)*gs(i)
207 sigm(i) = (signxx(i) + signyy(i)) * third
209 sxx(i) = signxx(i) - sigm(i)
210 syy(i) = signyy(i) - sigm(i)
214 j2 = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 + two*sxy(i)**2)
215 svm(i) = sqrt(three*j2)
219 xvec(1:nel,1) = pla(1:nel)
220 xvec(1:nel,2) = epsd(1:nel) * xscale
221 ipos(1:nel,1) = vartmp(1:nel,1)
224 . xvec,yld,hardp,hardr)
225 yld(1:nel) = yld(1:nel)*yscale
226 hardp(1:nel) = hardp(1:nel)*yscale
227 vartmp(1:nel,1) = ipos(1:nel,1)
229 IF (func_temp > 0)
THEN
231 ipos(1:nel,1) = vartmp(1:nel,2)
232 ipos(1:nel,2) = vartmp(1:nel,3)
233 CALL table_vinterp(table(func_temp),nel,nel,ipos,xvec,yld_tref,dydx)
234 vartmp(1:nel,2) = ipos(1:nel,1)
235 vartmp(1:nel,3) = ipos(1:nel,2)
236 xvec(1:nel,2) = temp(1:nel)
237 CALL table_vinterp(table(func_temp),nel,nel,ipos,xvec,yld_temp,dydx)
238 tfac(1:nel) = yld_temp(1:nel) / yld_tref(1:nel)
239 yld(1:nel) = yld(1:nel) * tfac(1:nel)
240 hardp(1:nel) = hardp(1:nel) * tfac(1:nel)
248 phi(1:nel) = svm(1:nel) - yld(1:nel)
251 IF (phi(i) >= zero .AND. off(i) == one)
THEN
268#include "vectorize.inc"
285 normxx(i) = three_half*sxx(i)/(
max(svm(i),em20))
286 normyy(i) = three_half*syy(i)/(
max(svm(i),em20))
287 normxy(i) = three*sxy(i)/(
max(svm(i),em20))
294 dfdsig2 = normxx(i) * (a11*normxx(i) + a12*normyy(i))
295 . + normyy(i) * (a11*normyy(i) + a12*normxx(i))
296 . + normxy(i) * normxy(i) * g
300 sig_dfdsig = signxx(i) * normxx(i)
301 . + signyy(i) * normyy(i)
302 . + signxy(i) * normxy(i)
303 dpla_dlam(i) = sig_dfdsig / yld(i)
307 dphi_dlam = - dfdsig2 - hardp(i)*dpla_dlam(i)
308 dphi_dlam = sign(
max(abs(dphi_dlam),em20),dphi_dlam)
312 dlam(i) = - phi(i) / dphi_dlam
317 ddep = dpla_dlam(i)*dlam(i)
319 dpla(i) =
max(dpla(i) + ddep,zero)
321 pla(i) = pla0(i) + dpla(i)
323 dpxx(i) = dlam(i)*normxx(i)
324 dpyy(i) = dlam(i)*normyy(i)
325 dpxy(i) = dlam(i)*normxy(i)
331 xvec(1:nel,1:2) = zero
337 ipos(ii,1) = vartmp(i,1)
340 CALL table2d_vinterp_log(table(func_yld),ismooth,nel,nindx,ipos,xvec,yld_i,hardp_i,hardr_i)
343 vartmp(i,1) = ipos(ii,1)
344 hardp(i) = hardp_i(ii)*yscale*tfac(i)
345 yld(i) = yld_i(ii)*yscale*tfac(i)
350#include "vectorize.inc"
355 signxx(i) = signxx(i) - a11*dpxx(i) - a12*dpyy(i)
356 signyy(i) = signyy(i) - a12*dpxx(i) - a11*dpyy(i)
357 signxy(i) = signxy(i) - g*dpxy(i)
360 sigm(i) = (signxx(i) + signyy(i)) * third
363 sxx(i) = signxx(i) - sigm(i)
364 syy(i) = signyy(i) - sigm(i)
369 j2 = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 + two*sxy(i)**2)
370 svm(i) = sqrt(three*j2)
373 phi(i) = svm(i) - yld(i)
376 IF (inloc == 0) dezz(i) = dezz(i) - dpxx(i) - dpyy(i)
389 et(i) = hardp(i) / (hardp(i) + young)
393 IF (jthe == 0 .AND. eta > zero .AND. inloc == 0)
THEN
396 temp(i) = temp(i) + ftherm(i)*yld(i)*dpla(i)
405 IF (loff(i) == one)
THEN
406 dezz(i) = -
max(dplanl(i),zero)*half*(signxx(i)+signyy(i))/
max(yld(i),em20)
407 IF (jthe == 0 .AND. eta > zero)
THEN
408 temp(i) = temp(i) + ftherm(i)*yld(i)*
max(dplanl(i),zero)
420 soundsp(i) = sqrt(a11/rho(i))
424 epsd(i) =
alpha*dpla(i)*dtinv + alphi*epsd(i)
427 dezz(i) = -nu*(signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/young + dezz(i)
428 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)
subroutine sigeps109c(nel, ngl, nuparam, nuvar, nvartmp, numtabl, uparam, uvar, vartmp, itable, table, jthe, time, timestep, off, rho, pla, dpla, soundsp, sigy, et, temp, epsd, gs, depsxx, depsyy, depsxy, depsyz, depszx, sigoxx, sigoyy, sigoxy, sigoyz, sigozx, signxx, signyy, signxy, signyz, signzx, thk, thkly, inloc, dplanl, loff, seq, lplanl, pla_nl, lepsdnl, dpdt_nl)