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,YLD,PLA,EPSD,SOUNDSP
89 INTEGER I,II,ITER,NITER,ICONV,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,df1,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
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
129 !=======================================================================
137 iconv = nint(uparam(15))
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)) * xfac
184 xvec(1:nel,1) = epspt(1:nel)
185 xvec(1:nel,2) = epdt(1:nel)
187 sigt(1:nel) = sigt(1:nel) * tfac(
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) = one /(sigt(i) + sigc(i))/sqr3
209 sigs(i) = two*sigt(i)*sigc(i)*sigs(i)
216 aa = one /(sigt(i) + sigc(i))/sqr3
217 IF (sigs(i) < sfac*two*sigt(i)*sigc(i)*aa)
THEN
218 sigs(i) = sfac*two*sigt(i)*sigc(i)*aa
225 a1(i) = three*(((sigt(i)-sigc(i))/(sigt(i)+sigc(i))) -
226 . a0(i)*((sigt(i)-sigc(i))/(sigt(i)*sigc(i))))
227 a2(i) = eighteen*((one/(sigt(i)+sigc(i)))-a0(i)/(two*sigt(i)*sigc(i)))
235 signxx(i) = sigoxx(i) + a11_2d(i)*depsxx(i) + a12_2d(i)*depsyy(i)
236 signyy(i) = sigoyy(i) + a11_2d(i)*depsyy(i) + a12_2d(i)*depsxx(i)
237 signxy(i) = sigoxy(i) + depsxy(i)*g(i)
238 signyz(i) = sigoyz(i) + depsyz(i)*gs(i)
239 signzx(i) = sigozx(i) + depszx(i)*gs(i)
240 p(i) = -(signxx(i) + signyy(i)) * third
242 sxx(i) = signxx(i) + p(i)
243 syy(i) = signyy(i) + p(i)
245 dezz(i)= -nu1 * (depsxx(i) + depsyy(i))
246 soundsp(i) = sqrt(a11_2d(i)/rho(i))
254 alpha(i) = (nine/two)*((one-two*nup(i))/(one+nup(i)))
259 svm2(i) = three_half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + three*signxy(i)**2
260 svm(i) = sqrt(
max(em20,svm2(i)))
261 ylds(i) = svm(i) - a0(i) - a1(i)*p(i) - a2(i)*p(i)*p(i)
262 IF (ylds(i) > 0 .AND. off(i) == one)
THEN
290 gf(i) = sqrt(
max(em20,(svm(i)**2)+
alpha(i)*p(i)**2))
293 normgxx = (three_half*sxx(i) - third*
alpha(i)*p(i) ) /gf(i)
294 normgyy = (three_half*syy(i) - third*
alpha(i)*p(i) ) /gf(i)
295 normgzz = (three_half*szz(i) - third*
alpha(i)*p(i) ) /gf(i)
296 normgxy = three*signxy(i)/gf(i)
299 cb = a1(i) + two*a2(i)*p(i)
300 normxx = three_half * sxx(i)/svm(i) + cb /three ! df/dsig
301 normyy = three_half * syy(i)/svm(i) + cb /three
302 normzz = three_half * szz(i)/svm(i) + cb /three
303 normxy = three * signxy(i)/svm(i)
306 dfdsigdlam = normxx * (a11_2d(i)*normgxx + a12_2d(i)*normgyy)
307 . + normyy * (a11_2d(i)*normgyy + a12_2d(i)*normgxx)
308 . + normxy * normgxy * g(i)
310 yld_norm = svm(i)/gf(i)
311 bb = three_half/(one + nup(i))
312 dft(i) = dft(i) * yld_norm * bb
313 IF (table(
func_comp)%NOTABLE > 0) dfc(i) = dfc(i) * yld_norm * bb
314 IF (table(func_shear)%NOTABLE > 0) dfs(i) = dfs(i) * yld_norm * sqr3/two
317 dfs(i) = (one/sqr3)*dft(i)
318 ELSEIF (icas == 1)
THEN
319 aa = one /(sigt(i) + sigc(i))/sqr3
320 dfs(i) = two*(dft(i)*sigc(i) + dfc(i)*sigt(i))*aa
321 . - two*sqr3*sigc(i)*sigt(i)*(dft(i) + dfc(i))*aa*aa
325 aa = one /(sigt(i) + sigc(i))/sqr3
326 dfs(i) = sfac*(two*(dft(i)*sigc(i) + dfc(i)*sigt(i))*aa
327 . - two*sqr3*sigc(i)*sigt(i)*(dft(i) + dfc(i))*aa*aa)
332 cc = sigs(i)/sigc(i)/sigt(i)
334 a1s = -three*sqr3*(sigt(i)-sigc(i))/(sigt(i)*sigc(i))
335 a1c = three*( (sigs(i)*sqr3/( sigc(i)**2)) -
336 . (two*sigt(i)/( (sigt(i) + sigc(i))**2)) )
337 a1t = three*(two*sigc(i)/((sigt(i) + sigc(i))**2) -
338 . (sigs(i)*sqr3/(sigt(i)**2)))
340 a2s = -nine*sqr3/(sigt(i)*sigc(i))
341 a2c = eighteen*((sigs(i)*sqr3/(two*sigt(i)*(sigc(i)**2))) -
342 . one/((sigt(i)+sigc(i))**2))
343 a2t = eighteen*((sigs(i)*sqr3/(two*sigc(i)*(sigt(i)**2))) -
344 . one/((sigt(i)+sigc(i))**2))
347 da1 = a1s*dfs(i) + a1t*dft(i) + a1c*dfc(i)
348 da2 = a2s*dfs(i) + a2t*dft(i) + a2c*dfc(i)
350 ff(i) = dfdsigdlam + da0 + p(i)*da1 + p(i)**2 * da2
351 ff(i) = sign(
max(abs(ff(i)),em20) ,ff(i))
355 dpxx(i) = dlam * normgxx
356 dpyy(i) = dlam * normgyy
357 dpzz(i) = dlam * normgzz
358 dpxy(i) = dlam * normgxy
361 signxx(i) = signxx(i) - (a11_2d(i)*dpxx(i) + a12_2d(i)*dpyy(i))
362 signyy(i) = signyy(i) - (a11_2d(i)*dpyy(i) + a12_2d(i)*dpxx(i))
363 signxy(i) = signxy(i) - dpxy(i)*g(i)
366 epspt(i) = epspt(i) + dlam* yld_norm * bb
368 epsps(i) = epsps(i) + dlam* yld_norm*sqr3/two
370 pla(i) = pla(i) + dlam*yld_norm*off(i)
371 dpla(i) = dpla(i) + dlam *yld_norm
372 dplat(i) = dplat(i) + dlam* yld_norm*bb
379 xvec(1:nel,1) = epspt(1:nel)
380 xvec(1:nel,2) = epdt(1:nel)
382 sigt(1:nel) = sigt(1:nel) * tfac(1)
383 dft(1:nel) = dft(1:nel) * tfac(1)
385 xvec(1:nel,1) = epspc(1:nel)
386 xvec(1:nel,2) = epdc(1:nel)
388 sigc(1:nel) = sigc(1:nel) * tfac(2)
389 dfc(1:nel) = dfc(1:nel) * tfac(2)
391 IF (table(func_shear)%NOTABLE > 0)
THEN
392 xvec(1:nel,1) = epsps(1:nel)
393 xvec(1:nel,2) = epds(1:nel)
395 sigs(1:nel) = sigs(1:nel) * tfac(3)
396 dfs(1:nel) = dfs(1:nel) * tfac(3)
402 sigs(i) = sigt(i)/sqr3
404 ELSEIF (icas == 1)
THEN
407 sigs(i) = one /(sigt(i) + sigc(i))/sqr3
408 sigs(i) = two*sigt(i)*sigc(i)*sigs(i)
415 aa = one /(sigt(i) + sigc(i))/sqr3
416 IF (sigs(i) < sfac*two*sigt(i)*sigc(i)*aa)
THEN
417 sigs(i) = sfac*two*sigt(i)*sigc(i)*aa
425 a1(i) = three*(((sigt(i)-sigc(i))/(sigt(i)+sigc(i))) -
426 . a0(i)*((sigt(i)-sigc(i))/(sigt(i)*sigc(i))))
427 a2(i) = eighteen*((one/(sigt(i)+sigc(i)))-a0(i)/(two*sigt(i)*sigc(i)))
433 p(i) = -third*(signxx(i) + signyy(i) )
434 sxx(i) = signxx(i) + p(i)
435 syy(i) = signyy(i) + p(i)
437 svm2(i)= three_half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + three*signxy(i)**2
438 svm(i) = sqrt(svm2(i))
439 ylds(i) = svm(i) - a0(i) - a1(i)*p(i) - a2(i)*p(i)*p(i)
441 dezz(i) = dezz(i) + nu1*(dpxx(i) + dpyy(i)) + dpzz(i)
450 IF (ifunc(1) > 0)
THEN
451 iad(1:nel) = npf(ifunc(1)) / 2 + 1
452 ilen(1:nel) = npf(ifunc(1)+1) / 2 - iad(1:nel) - vartmp(1:nel,8)
454 CALL vinter(tf,iad,vartmp(1:nel,8),ilen,nel,pla,dydx,nup)
456 uvar(1:nel,7) = yfac(1) * nup(1:nel)
457 uvar(1:nel,7) =
max(zero,
min(nup(1:nel), half))
465 IF (loff(i) == one)
THEN
466 alpha(i)= (nine/two)*((one-two*nup(i))/(one+nup(i)))
467 gf(i) = sqrt(
max(em20,(svm(i)**2)+
alpha(i)*p(i)**2))
468 normgxx = (three_half*sxx(i) - third*
alpha(i)*p(i))/gf(i)
469 normgyy = (three_half*syy(i) - third*
alpha(i)*p(i))/gf(i)
470 normgzz = (three_half*szz(i) - third*
alpha(i)*p(i))/gf(i)
471 yld_norm = svm(i)/gf(i)
473 dlam_nl(i) = (one/yld_norm)*
max(dplanl(i),zero)
474 dezz(i) = dezz(i) + nu1*(dlam_nl(i)*normgxx)
475 . + nu1*(dlam_nl(i)*normgyy)
476 . + dlam_nl(i)*normgzz
485 uvar(1:nel,1) = epspt(1:nel)
486 uvar(1:nel,2) = epspc(1:nel)
487 uvar(1:nel,3) = epsps(1:nel)
488 uvar(1:nel,4) = alfa*dplat(1:nel)*dtinv + alfi*epdt_f(1:nel)
489 uvar(1:nel,5) = alfa*dplac(1:nel)*dtinv + alfi*epdc_f(1:nel)
490 uvar(1:nel,6) = alfa*dplas(1:nel)*dtinv + alfi*epds_f(1:nel)
491 epsd(1:nel) = alfa*dpla(1:nel)*dtinv + alfi*epsd(1:nel)