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 ,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)
77INTEGER,
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,,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,a12,nu,tref,tini,eta,
88 . xrate,xscale,yscale,dtinv,j2
89 . r,dfdsig2,sig_dfdsig,ddep,asrate
91 my_real,
DIMENSION(NEL) ::svm,svmt,yld,yld_tref,yld_temp,
92 . sxx,syy,sxy,syz,szx,sigm,stxx,styy,stxy,styz,stzx,
93 . fact_eta,dydx,hardp,hardr,yld_i,hardp_i,hardr_i,dxdyv,dlam,phi,
94 . ftherm,tfac,depszz,normxx,normyy,normxy,depspxx,depspyy,depspxy,
95 . stzz,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
117 ismooth = nint(uparam(6))
126 dtinv = one /
max(em20, timestep)
127 alpha = asrate*timestep
130 IF (jthe /= 0) eta = zero
134 func_temp = itable(2)
136 ndim_yld = table(func_yld)%NDIM
137 IF (func_temp > 0)
THEN
138 ndim_temp = table(func_temp)%NDIM
140 IF (func_eta > 0)
THEN
141 ndim_eta = table(func_eta)%NDIM
156 IF (time == zero) temp(1:nel) = tini
160 IF (func_eta > 0)
THEN
162 xvec_eta(1:nel,1) = epsd(1:nel) * xrate
164 xvec_eta(1:nel,1) = dpdt_nl(1:nel) * xrate
166 ipos_eta(1:nel,1) = 1
167 IF (ndim_eta > 1)
THEN
168 xvec_eta(1:nel,2) = temp(1:nel)
169 ipos_eta(1:nel,2) = vartmp(1:nel,4)
171 IF (ndim_eta > 2)
THEN
173 xvec_eta(1:nel,3) = pla(1:nel)
175 xvec_eta(1:nel,3) = pla_nl(1:nel)
177 ipos_eta(1:nel,3) = vartmp(1:nel,5)
179 CALL table_vinterp(table(func_eta),nel,nel,ipos_eta,xvec_eta,
181 IF (ndim_eta > 1) vartmp(1:nel,4) = ipos_eta(1:nel,2)
182 IF (ndim_eta > 2) vartmp(1:nel,5) = ipos_eta
184 ftherm(i) =
min(eta*fact_eta(i), one)
187 ftherm(1:nel) =
min(eta, one)
197 signxx(i) = sigoxx(i) + a11*depsxx(i) + a12*depsyy(i)
198 signyy(i) = sigoyy(i) + a11*depsyy(i) + a12*depsxx(i)
199 signxy(i) = sigoxy(i) + depsxy(i)*g
200 signyz(i) = sigoyz(i) + depsyz(i)*gs(i)
201 signzx(i) = sigozx(i) + depszx(i)*gs(i)
203 sigm(i) = (signxx(i) + signyy(i)) * third
205 sxx(i) = signxx(i) - sigm(i)
206 syy(i) = signyy(i) - sigm(i)
210 j2 = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 + two*sxy(i)**2)
211 svm(i) = sqrt(three*j2)
215 xvec(1:nel,1) = pla(1:nel)
216 xvec(1:nel,2) = epsd(1:nel) * xscale
217 ipos(1:nel,1) = vartmp(1:nel,1)
220 . xvec,yld,hardp,hardr)
221 yld(1:nel) = yld(1:nel)*yscale
222 hardp(1:nel) = hardp(1:nel)*yscale
223 vartmp(1:nel,1) = ipos(1:nel,1)
225 IF (func_temp > 0)
THEN
227 ipos(1:nel,1) = vartmp(1:nel,2)
228 ipos(1:nel,2) = vartmp(1:nel,3)
229 CALL table_vinterp(table(func_temp),nel,nel,ipos,xvec,yld_tref,dydx)
230 vartmp(1:nel,2) = ipos(1:nel,1)
231 vartmp(1:nel,3) = ipos(1:nel,2)
232 xvec(1:nel,2) = temp(1:nel)
233 CALL table_vinterp(table(func_temp),nel,nel,ipos,xvec,yld_temp,dydx)
234 tfac(1:nel) = yld_temp(1:nel) / yld_tref(1:nel)
235 yld(1:nel) = yld(1:nel) * tfac(1:nel)
236 hardp(1:nel) = hardp(1:nel) * tfac(1:nel)
244 phi(1:nel) = svm(1:nel) - yld(1:nel)
247 IF (phi(i) >= zero .AND. off(i) == one)
THEN
264#include "vectorize.inc"
281 normxx(i) = three_half*sxx(i)/(
max(svm(i),em20))
282 normyy(i) = three_half*syy(i)/(
max(svm(i),em20))
283 normxy(i) = three*sxy(i)/(
max(svm(i),em20))
290 dfdsig2 = normxx(i) * (a11*normxx(i) + a12*normyy(i))
291 . + normyy(i) * (a11*normyy(i) + a12*normxx(i))
292 . + normxy(i) * normxy(i) * g
296 sig_dfdsig = signxx(i) * normxx(i)
297 . + signyy(i) * normyy(i)
298 . + signxy(i) * normxy(i)
299 dpla_dlam(i) = sig_dfdsig / yld(i)
303 dphi_dlam = - dfdsig2 + hardp(i)*dpla_dlam(i)
304 dphi_dlam = sign(
max(abs(dphi_dlam),em20),dphi_dlam)
308 dlam(i) = - phi(i) / dphi_dlam
313 ddep = dpla_dlam(i)*dlam(i)
315 dpla(i) =
max(dpla(i) + ddep,zero)
317 pla(i) = pla0(i) + dpla(i)
319 dpxx(i) = dlam(i)*normxx(i)
320 dpyy(i) = dlam(i)*normyy(i)
321 dpxy(i) = dlam(i)*normxy(i)
327 xvec(1:nel,1:2) = zero
333 ipos(ii,1) = vartmp(i,1)
336 CALL table2d_vinterp_log(table(func_yld),ismooth,nel,nindx,ipos,xvec,yld_i,hardp_i,hardr_i)
339 vartmp(i,1) = ipos(ii,1)
340 hardp(i) = hardp_i(ii)*yscale*tfac(i)
341 yld(i) = yld_i(ii)*yscale*tfac(i)
346#include "vectorize.inc"
351 signxx(i) = signxx(i) - a11*dpxx(i) - a12*dpyy(i)
352 signyy(i) = signyy(i) - a12*dpxx(i) - a11*dpyy(i)
353 signxy(i) = signxy(i) - g*dpxy(i)
356 sigm(i) = (signxx(i) + signyy(i)) * third
359 sxx(i) = signxx(i) - sigm(i)
360 syy(i) = signyy(i) - sigm(i)
365 j2 = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 + two*sxy(i)**2)
366 svm(i) = sqrt(three*j2)
369 phi(i) = svm(i) - yld(i)
372 IF (inloc == 0) dezz(i) = dezz(i) - dpxx(i) - dpyy(i)
385 et(i) = hardp(i) / (hardp(i) + young)
389 IF (jthe == 0 .AND. eta > zero .AND. inloc == 0)
THEN
392 temp(i) = temp(i) + ftherm(i)*yld(i)*dpla
401 IF (loff(i) == one)
THEN
402 dezz(i) =
max(dplanl(i),zero)*half*(signxx(i)+signyy(i))/
max(yld(i),em20)
403 dezz(i) = - nu*((signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/young) - dezz(i)
404 IF (jthe == 0 .AND. eta > zero)
THEN
405 temp(i) = temp(i) + ftherm(i)*yld(i)*
max(dplanl(i),zero)
421 epsd(i) =
alpha*dpla(i)*dtinv + alphi*epsd(i)
424 IF (loff(i) == one)
THEN
426 dezz(i) = dezz(i) -
max(dplanl(i),zero)*half*(signxx(i)+signyy(i))/
max(yld(i),em20)
429 dezz(i) = -nu*(signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/young + dezz(i)
431 thk(i) = thk(i) + dezz(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)