35 . NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC ,
36 . NPF ,TF ,NUMTABL ,TABLE ,
37 . TIME ,TIMESTEP,UPARAM ,UVAR ,RHO ,
38 . DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
39 . SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
40 . SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
41 . PLA ,DPLA ,EPSD ,OFF ,GS ,
42 . YLD ,SOUNDSP ,DEZZ ,INLOC ,DPLANL ,
43 . NVARTMP, VARTMP ,LOFF )
52#include "implicit_f.inc"
56#include "tabsiz_c.inc"
60 INTEGER,
INTENT(IN) :: NEL,NUPARAM,NUVAR,NFUNC,NUMTABL,INLOC
61 INTEGER,
INTENT(IN) :: NVARTMP
62 INTEGER,
DIMENSION(NFUNC),
INTENT(IN) :: IFUNC
63 my_real,
INTENT(IN) :: TIME,TIMESTEP
64 my_real,
DIMENSION(NUPARAM),
INTENT(IN) :: UPARAM
65 my_real,
DIMENSION(NEL),
INTENT(IN) :: GS,RHO,DPLANL,
66 . DEPSXX,DEPSYY,DEPSXY,DEPSYZ,DEPSZX,
67 . SIGOXX,SIGOYY,SIGOXY,SIGOYZ,SIGOZX
68 TYPE(TABLE_4D_),
DIMENSION(NUMTABL) ,
INTENT(IN) :: TABLE
69 my_real,
DIMENSION(NEL),
INTENT(IN) :: loff
73 my_real,
DIMENSION(NEL),
INTENT(OUT) ::
74 . signxx,signyy,signxy,signyz,signzx,dezz,dpla
78 INTEGER,
DIMENSION(NEL,NVARTMP),
INTENT(INOUT) :: VARTMP
79 my_real,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: UVAR
80 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: OFF,,PLA,EPSD,SOUNDSP
89 INTEGER I,II,ITER,NITER,,ICAS,NINDX
90 INTEGER ,
PARAMETER :: FUNC_TRAC = 1
92 INTEGER ,
PARAMETER :: FUNC_SHEAR = 3
93 INTEGER,
DIMENSION(NEL) :: INDX,IAD,ILEN
94 my_real :: lam,dlam,epsdot,da0,da1,da2,
95 . ca,cb,aa,bb,cc,a1s,a1c,a1t,a2s,a2c,a2t,e,nu,nu1,nupc,xfac,
96 . yy,dx2,dfdsigdlam,yld_norm,epd_min,epd_max,
97 . normxx,normyy,normxy,normzz,normyz,normzx,alfa,alfi,dtinv,
98 . normgxx,normgyy,normgxy,normgzz,sig_dfdsig,
99 . epdt_min,epdt_max,epdc_min,epdc_max,epds_min,epds_max
100 my_real,
DIMENSION(NEL) :: ff,p,svm,svm2,ylds,sxx,syy,sxy,szz,
101 . dpxx,dpyy,dpxy,dpzz,sigt,sigc,sigs,dft,dfc,dfs,a11_2d,a12_2d,g,
102 . a0,a1,a2,nup,epspt,epspc,epsps,epdt,epdc,epds,dydx,
103 . epdt_f,epdc_f,epds_f,dplat,dplac,dplas,gf,
alpha,dlam_nl
104 my_real,
DIMENSION(NEL,2) :: xvec
105 my_real,
DIMENSION(NUMTABL) :: tfac
106 my_real,
DIMENSION(NFUNC) :: yfac
108 my_real,
PARAMETER :: SFAC = 1.05d0
137 iconv = nint(uparam(15))
140 alfa =
min(one, uparam(16)*timestep)
141 epdt_min = uparam(19)
142 epdt_max = uparam(20)
143 epdc_min = uparam(21)
144 epdc_max = uparam(22)
145 epds_min = uparam(23)
146 epds_max = uparam(24)
152 a11_2d(1:nel) = uparam(2)
153 a12_2d(1:nel) = uparam(3)
157 dtinv = one /
max(em20, timestep)
160 IF (time == zero)
THEN
164 nup(1:nel) = uvar(1:nel,7)
168 epspt(1:nel) = uvar(1:nel,1)
169 epspc(1:nel) = uvar(1:nel,2)
170 epsps(1:nel) = uvar(1:nel,3)
171 epdt_f(1:nel) = uvar(1:nel,4)
172 epdc_f(1:nel) = uvar(1:nel,5)
173 epds_f(1:nel) = uvar(1:nel,6)
178 epdt(i) =
min(epdt_max,
max(epdt_f(i),epdt_min)) * xfac
179 epdc(i) =
min(epdc_max,
max(epdc_f(i),epdc_min)) * xfac
180 epds(i) =
min(epds_max,
max(epds_f(i),epds_min
184 xvec(1:nel,1) = epspt(1:nel)
185 xvec(1:nel,2) = epdt(1:nel)
187 sigt(1:nel) = sigt(1:nel) * tfac(1)
188 dft(1:nel) = dft(1:nel) * tfac(1)
190 xvec(1:nel,1) = epspc(1:nel)
191 xvec(1:nel,2) = epdc(1:nel)
193 sigc(1:nel) = sigc(1:nel) * tfac(2)
194 dfc(1:nel) = dfc(1:nel) * tfac(2)
196 IF (table(func_shear)%NOTABLE > 0)
THEN
197 xvec(1:nel,1) = epsps(1:nel)
198 xvec(1:nel,2) = epds(1:nel)
200 sigs(1:nel) = sigs(1:nel) * tfac(3)
201 dfs(1:nel) = dfs(1:nel) * tfac(3)
204 sigc(1:nel) = sigt(1:nel)
205 sigs(1:nel) = sigt(1:nel)/sqr3
206 ELSEIF (icas == 1)
THEN
208 sigs(i) = sqrt(sigt(i)*sigc(i)/three)
215 IF (sigs(i) < sfac*sqrt(sigc(i)*sigt(i)/three))
THEN
216 sigs(i) = sfac*sqrt(sigc(i)*sigt(i)/three)
222 aa = one/sigc(i)/sigt(i)
223 a0(i) = three*sigs(i)**2
224 a1(i) = nine*sigs(i)**2*(sigc(i) - sigt(i))*aa
225 a2(i) = nine*(sigc(i)*sigt(i) - three
233 signxx(i) = sigoxx(i) + a11_2d(i)*depsxx(i) + a12_2d(i)*depsyy(i)
234 signyy(i) = sigoyy(i) + a11_2d(i)*depsyy(i) + a12_2d(i)*depsxx(i)
235 signxy(i) = sigoxy(i) + depsxy(i)*g(i)
236 signyz(i) = sigoyz(i) + depsyz
237 signzx(i) = sigozx(i) + depszx(i)*gs(i)
238 p(i) = -(signxx(i) + signyy(i)) * third
240 sxx(i) = signxx(i) + p(i)
241 syy(i) = signyy(i) + p(i)
243 dezz(i)= -nu1 * (depsxx(i) + depsyy(i))
244 soundsp(i) = sqrt(a11_2d(i)/rho(i))
252 alpha(i) = (nine/two)*((one-two*nup(i))/(one+nup(i)))
257 svm2(i) = three_half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + three*signxy(i)**2
258 svm(i) = sqrt(svm2(i))
259 ylds(i) = svm2(i) - a0(i) - a1(i)*p(i) - a2(i)*p(i)*p(i)
260 IF (ylds(i) > 0 .AND. off(i) == one)
THEN
288 gf(i) = sqrt(
max(em20,(svm(i)**2)+
alpha(i)*p(i)**2))
291 normgxx = (three_half*sxx(i) - third*
alpha(i)*p(i) ) /gf(i)
292 normgyy = (three_half*syy(i) - third*
alpha(i)*p(i) ) /gf(i)
293 normgzz = (three_half*szz(i) - third*
alpha(i)*p(i) ) /gf(i)
294 normgxy = three*signxy(i)/gf(i)
297 cb = a1(i) + two*a2(i)*p(i)
298 normxx = three * sxx(i) + cb /three
299 normyy = three * syy(i) + cb /three
300 normzz = three * szz(i) + cb /three
301 normxy = two *three * signxy(i)
304 dfdsigdlam = normxx * (a11_2d(i)*normgxx + a12_2d(i)*normgyy)
305 . + normyy * (a11_2d(i)*normgyy + a12_2d(i)*normgxx)
306 . + normxy * normgxy * g(i)
308 yld_norm = svm(i)/gf(i)
309 bb = three_half/(one + nup(i))
310 dft(i) = dft(i) * yld_norm * bb
311 IF (table(
func_comp)%NOTABLE > 0) dfc(i) = dfc(i) * yld_norm * bb
312 IF (table(func_shear)%NOTABLE > 0) dfs(i) = dfs(i) * yld_norm * sqr3/two
315 dfs(i) = (one/sqr3)*dft(i)
316 ELSEIF (icas == 1)
THEN
317 dfs(i) = (one/sqr3)*(one/(two*sqrt(sigt(i)*sigc(i))))*
318 . (dfc(i)*sigt(i) + sigc(i)*dft(i))
322 dfs(i) = sfac*(one/sqr3)*(one/(two*sqrt(sigt(i)*sigc(i))))*
323 . (dfc(i)*sigt(i) + sigc(i)*dft(i
328 cc = sigs(i)/sigc(i)/sigt(i)
330 a1s = eighteen*(sigc(i) - sigt(i))*cc
331 a1c = nine*(sigs(i)/sigc(i))**2
332 a1t = -nine*(sigs(i)/sigt(i))**2
335 a2c = twenty7*cc*sigs(i)/sigc(i)
336 a2t = twenty7*cc*sigs(i)/sigt(i)
338 da0 = six*sigs(i)*dfs(i)
339 da1 = a1s*dfs(i) + a1t*dft(i) + a1c*dfc(i)
340 da2 = a2s*dfs(i) + a2t*dft(i) + a2c*dfc(i)
342 ff(i) = dfdsigdlam + da0 + p(i)*da1 + p(i)**2 * da2
343 ff(i) = sign(
max(abs(ff(i)),em20) ,ff(i))
347 dpxx(i) = dlam * normgxx
348 dpyy(i) = dlam * normgyy
349 dpzz(i) = dlam * normgzz
350 dpxy(i) = dlam * normgxy
353 signxx(i) = signxx(i) - (a11_2d(i)*dpxx(i) + a12_2d(i)*dpyy(i))
354 signyy(i) = signyy(i) - (a11_2d(i)*dpyy(i) + a12_2d(i)*dpxx(i))
355 signxy(i) = signxy(i) - dpxy(i)*g(i)
358 epspt(i) = epspt(i) + dlam* yld_norm * bb
360 epsps(i) = epsps(i) + dlam* yld_norm*sqr3/two
362 pla(i) = pla(i) + dlam*yld_norm*off(i)
363 dpla(i) = dpla(i) + dlam *yld_norm
364 dplat(i) = dplat(i) + dlam* yld_norm*bb
366 dplas(i) = dplas(i) + dlam* yld_norm*sqr3/two
371 xvec(1:nel,1) = epspt(1:nel)
372 xvec(1:nel,2) = epdt(1:nel)
374 sigt(1:nel) = sigt(1:nel) * tfac(1)
375 dft(1:nel) = dft(1:nel) * tfac(1)
377 xvec(1:nel,1) = epspc(1:nel)
378 xvec(1:nel,2) = epdc(1:nel)
380 sigc(1:nel) = sigc(1:nel) * tfac(2)
381 dfc(1:nel) = dfc(1:nel) * tfac(2)
383 IF (table(func_shear)%NOTABLE > 0)
THEN
384 xvec(1:nel,1) = epsps(1:nel)
385 xvec(1:nel,2) = epds(1:nel)
387 sigs(1:nel) = sigs(1:nel) * tfac(3)
388 dfs(1:nel) = dfs(1:nel) * tfac(3)
394 sigs(i) = sigt(i)/sqr3
396 ELSEIF (icas == 1)
THEN
399 sigs(i) = sqrt(sigt(i)*sigc(i)/three)
407 sigs(i) = sfac*sqrt(sigc(i)*sigt(i)/three)
414 aa = one/sigc(i)/sigt(i)
415 a0(i) = three*sigs(i)**2
416 a1(i) = nine*sigs(i)**2*(sigc(i) - sigt(i))*aa
417 a2(i) = nine*(sigc(i)*sigt(i) - three*sigs(i)**2)*aa
423 p(i) = -third*(signxx(i) + signyy(i) )
424 sxx(i) = signxx(i) + p(i)
425 syy(i) = signyy(i) + p(i)
427 svm2(i)= three_half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + three*signxy(i)**2
428 svm(i) = sqrt(svm2(i))
429 ylds(i) = svm2(i) - a0(i) - a1(i)*p(i) - a2(i)*p(i)*p(i)
431 dezz(i) = dezz(i) + nu1*(dpxx(i) + dpyy(i)) + dpzz(i)
441 iad(1:nel) = npf(ifunc(1)) / 2 + 1
442 ilen(1:nel) = npf(ifunc(1)+1) / 2 - iad(1:nel) - vartmp(1:nel,8)
444 CALL vinter(tf,iad,vartmp(1:nel,8),ilen,nel,pla,dydx,nup)
446 uvar(1:nel,7) = yfac(1) * nup(1:nel)
447 uvar(1:nel,7) =
max(zero,
min(nup(1:nel), half))
455 IF (loff(i) == one)
THEN
456 alpha(i)= (nine/two)*((one-two*nup(i))/(one+nup(i)))
457 gf(i) = sqrt(
max(em20,(svm(i)**2)+
alpha(i)*p(i)**2))
458 normgxx = (three_half*sxx(i) - third*
alpha(i)*p(i))/gf(i)
459 normgyy = (three_half*syy(i) - third*
alpha(i)*p(i))/gf(i)
460 normgzz = (three_half*szz(i) - third*
alpha(i)*p(i))/gf(i)
461 yld_norm = svm(i)/gf(i)
462 IF (yld_norm /= zero)
THEN
463 dlam_nl(i) = (one/yld_norm)*
max(dplanl(i),zero)
464 dezz(i) = dezz(i) + nu1*(dlam_nl(i)*normgxx)
465 . + nu1*(dlam_nl(i)*normgyy)
466 . + dlam_nl(i)*normgzz
475 uvar(1:nel,1) = epspt(1:nel)
476 uvar(1:nel,2) = epspc(1:nel)
477 uvar(1:nel,3) = epsps(1:nel)
478 uvar(1:nel,4) = alfa*dplat(1:nel)*dtinv + alfi*epdt_f(1:nel)
479 uvar(1:nel,5) = alfa*dplac(1:nel)*dtinv + alfi*epdc_f(1:nel)
480 uvar(1:nel,6) = alfa*dplas(1:nel)*dtinv + alfi*epds_f(1:nel)
481 epsd(1:nel) = alfa*dpla(1:nel)*dtinv + alfi*epsd(1:nel)