32 1 NEL, NUPARAM, NUVAR, MFUNC,
33 2 KFUNC, NPF, NPT0, IPT,
34 3 IFLAG, TF, TIME, TIMESTEP,
35 4 UPARAM, RHO0, AREA, EINT,
36 5 THKLY, EPSPXX, EPSPYY, EPSPXY,
37 6 EPSPYZ, EPSPZX, DEPSXX, DEPSYY,
38 7 DEPSXY, DEPSYZ, DEPSZX, EPSXX,
39 8 EPSYY, EPSXY, EPSYZ, EPSZX,
40 9 SIGOXX, SIGOYY, SIGOXY, SIGOYZ,
41 A SIGOZX, SIGNXX, SIGNYY, SIGNXY,
42 B SIGNYZ, SIGNZX, SIGVXX, SIGVYY,
43 C SIGVXY, SIGVYZ, SIGVZX, SOUNDSP,
44 D VISCMAX, THK, PLA, UVAR,
51#include "implicit_f.inc"
107#include "param_c.inc"
112 INTEGER,
INTENT(IN) :: ISMSTR, JTHE
113 INTEGER NEL, NUPARAM, NUVAR, NPT0, IPT,IFLAG(*),
114 . NGL(NEL),MAT(NEL),ISRATE(NEL),NSG,IPM(NPROPMI,*)
115 my_real TIME,TIMESTEP,UPARAM(*),
116 . AREA(NEL),RHO0(NEL),EINT(NEL,2),
117 . THKLY(NEL),PLA(NEL),
119 . EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
120 . DEPSXX(NEL),DEPSYY(NEL),
121 . DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
122 . EPSXX(NEL) ,EPSYY(NEL) ,
123 . EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
124 . SIGOXX(NEL),SIGOYY(NEL),
125 . SIGOXY(NEL),SIGOYZ(NEL),SIGOZX(NEL),
126 . GS(*) ,VOL(NEL) , (NEL)
131 . signxx(nel),signyy(nel),
132 . signxy(nel),signyz(nel),signzx(nel),
133 . sigvxx(nel),sigvyy(nel),
134 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
135 . soundsp(nel),viscmax(nel),etse(nel)
139 my_real uvar(nel,nuvar), off(nel),thk(nel),yld(nel)
143 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
144 my_real FINTER ,TF(*)
156 INTEGER ,I1,I2,J,JJ,J1,J2,KK,ITERK,EFLAG
157 INTEGER CRIT_LOOP(NEL)
158 INTEGER INDX_LOOP(NEL),NINDX_LOOP,NINDX_LOOP_LOC,II
159 INTEGER,
DIMENSION(NEL) :: INDX_LOOP_LOC
162 . e,emart,nu,g,g2,wave,sqdt,a,b,c,fct,fctp, dftr,unmxn,db,
163 .
alpha,epsl,aa1,fm,dfmsa,dfmas,uxx,nn,beta,gm,km,h,
164 . cb,cc,caas,cbas,pold,dgt,dkt,cp,tini,sspsh ,sspsol,
165 . k,p11(nel),sxx(nel),cas,csa,tsas,tfas, tssa,tfsa,inve,
166 . syy(nel),szz(nel),sxy,syz,szx,fass,fsas,fasf,fsaf,rsas,rfas,
167 . sv(nel),fs(nel),fs0,yld_ass,yld_asf,yld_sas,yld_saf,rssa,rfsa,
168 . dfm(nel), fss,dsxx,dsyy,dsxy,dsyz,dszx,dszz,var,rv_pui,
169 . pm,delta,x1,x2,test,test2,ftest,gnew,knew,betan,
170 . nx2,ny2 ,nz2,nxy2,nyz2,nzx2,ne,dnx,dny,dnz,dnxy,dnyz,dnzx,
171 . nxx(nel),nyy(nel),nzz(nel),nxy(nel),nyz(nel),nzx(nel),
172 . e1(nel),e2(nel),e3(nel),e4(nel),e5(nel),e6(nel),trde(nel),
173 . de1(nel),de2(nel),de3(nel),gt(nel),kt(nel),
174 . ee1(nel),ee2(nel),ee3(nel),pp(nel),nne(nel),det(nel),
175 . sigxx(nel), sigyy(nel), sigzz(nel),dfs(nel)
177 . depszztr(nel),depszz(nel),epszz(nel),signzz(nel),epszztr(nel),
178 . depsim1(nel),sigzim1(nel),depsi(nel),epsim1(nel),epsi(nel)
182 . eigv(nel,3,2),trav(nel),rootv(nel),evv(nel,3)
196 epsl = uparam(11)/(sqrt(two_third)+
alpha)
198 eflag = int(uparam(15))
203 sqdt = sqrt(two/three)
214 trav(1:nel) = epsxx(1:nel)+epsyy(1:nel)
215 rootv(1:nel) = sqrt((epsxx(1:nel)-epsyy(1:nel))*(epsxx(1:nel)-epsyy(1:nel))
216 . + epsxy(1:nel)*epsxy(1:nel))
217 evv(1:nel,1) = half*(trav(1:nel)+rootv(1:nel))
218 evv(1:nel,2) = half*(trav(1:nel)-rootv(1:nel))
222 IF(abs(evv(i,2)-evv(i,1)) < em10)
THEN
230 eigv(i,1,1) = (epsxx(i)-evv(i,2)) /rootv(i)
231 eigv(i,2,1) = (epsyy(i)-evv(i,2)) /rootv(i)
232 eigv(i,1,2) = (evv(i,1)-epsxx(i)) /rootv(i)
233 eigv(i,2,2) = (evv(i,1)-epsyy(i)) /rootv(i)
234 eigv(i,3,1) = (half*epsxy(i)) /rootv(i)
235 eigv(i,3,2) =-(half*epsxy(i)) /rootv(i)
238 IF (ismstr == 1 .OR. ismstr == 3 .OR. ismstr == 11)
THEN
240 ev(i,1)=evv(i,1)+ one
241 ev(i,2)=evv(i,2)+ one
242 ev(i,3)=one/ev(i,1)/ev(i,2)
244 ELSEIF(ismstr == 10)
THEN
246 ev(i,1)=sqrt(evv(i,1)+ one)
247 ev(i,2)=sqrt(evv(i,2)+ one)
248 ev(i,3)=one/ev(i,1)/ev(i,2)
252 ev(i,1)=exp(evv(i,1))
253 ev(i,2)=exp(evv(i,2))
254 ev(i,3)=one/ev(i,1)/ev(i,2)
262 temp(i) = tini + (eint(i,1)+ eint(i,2))/vol(i)/ rho0(i)/cp
266 rsas = yld_ass *(sqdt+
alpha)-cas*tsas
267 rfas = yld_asf *(sqdt+
alpha)-cas*tfas
268 rssa = yld_sas *(sqdt+
alpha)-csa*tssa
269 rfsa = yld_saf *(sqdt+
alpha)-csa*tfsa
283#include "vectorize.inc"
287 det(i) =ev(i,1)*ev(i,2)*ev(i,3)
288 IF(det(i)/=zero)
THEN
289 trde(i) = log(det(i))
290 rv_pui = exp((-third)*trde(i))
295 ee1(i) = log(ev(i,1)*rv_pui) !deviator of deformation
296 ee2(i) = log(ev(i,2)*rv_pui)
297 ee3(i) = log(ev(i,3)*rv_pui)
300 IF (eflag > zero)
THEN
302#include "vectorize.inc"
306 gt(i) = g + fm * (gm - g)
307 kt(i) = k + fm * (km - k)
309 p11(i) = kt(i) * (trde(i) - three*
alpha*epsl*fm)
311 ne = sqrt( ee1(i)**2 + ee2(i)**2 + ee3(i)**2 )
312 nxx(i) =ee1(i)/
max(ne,em20)
313 nyy(i) =ee2(i)/
max(ne,em20)
314 nzz(i) =ee3(i)/
max(ne,em20)
317 sxx(i)= two*gt(i)*(ee1(i) -epsl*fm*nxx(i))
318 syy(i)= two*gt(i)*(ee2(i) -epsl*fm
319 szz(i)= two*gt(i)*(ee3(i) -epsl*fm*nzz(i))
321 sv(i) = sqrt( sxx(i)*sxx(i) + syy(i)*syy(i) + szz(i)*szz(i) )
329 fs(i) = sv(i) + three*
alpha*p11(i) - cas
335 beta = epsl*(two*gt(i)+nine*kt(i)*
alpha
336 IF((fs(i) - fs0) > zero .AND. fass > zero.AND. fasf < zero .AND. fm < one )
THEN
338 db = (two * (gm-g) +nine*
alpha*
alpha*(km-k)) *epsl
340 dftr = two*ne*(gm-g) + three*
alpha*trde(i)*(km-k)
341 dfmas =
min(one, -(fs(i)-fs0)*(one-fm)/(fasf-beta*(one-fm) ) )
343 b = (rfas-fs(i)+unmxn*(beta-dftr))
344 c = unmxn*(fs0 - fs(i))
346 fct = dfmas*dfmas *a+ dfmas* b +c
347 fctp = two*dfmas *a+ b
348 dfmas = dfmas - fct / fctp
350 dfmas =
min(one,dfmas )
355 ! dfmas =
min(one, -(fs(i)-fs0)*(one-fm)/(fasf-beta*(one-fm) ) )
360 fs(i) = sv(i) + three*
alpha*p11(i) - csa*temp(i)
364 IF((fs(i) - fs0) < zero .AND. fsas < zero.AND. fsaf > zero )
THEN
366 db = (two * (gm-g) +nine*
alpha*
alpha*(km-k))*epsl
367 dftr = two * (gm-g)*ne+ three*
alpha*(km-k)*trde(i)
370 b = -(rfsa-fs(i)+fm*(dftr-beta))
371 c = -fm*(fs(i) - fs0)
373 fct = dfmsa*dfmsa *a+ dfmsa* b +c
374 fctp = two*dfmsa *a+ b
375 dfmsa = dfmsa - fct / fctp
377 dfmsa =
max(-one , dfmsa )
384 dfm(i) = dfmas + dfmsa
385 IF(dfm(i) < zero .AND. fm == zero) dfm(i) = zero
389 dgt = dfm(i) * (gm - g)
390 dkt = dfm(i) * (km - k)
391 sxx(i) = sxx(i) -two*gt(i)* epsl*dfm(i)*nxx(i)
392 . + two*dgt* (ee1(i)-epsl*nxx(i)*dfm(i))
393 syy(i) = syy(i) -two*gt(i)* epsl*dfm(i)*nyy(i)
394 . + two*dgt* (ee2(i)-epsl*nyy(i)*dfm(i))
395 szz(i) = szz(i) -two*gt(i)* epsl*dfm(i)*nzz(i)
396 . + two*dgt* (ee3(i)-epsl*nzz(i)*dfm(i))
398 p11(i) = p11(i) - kt(i)*epsl*three*
alpha*dfm(i)
399 . + dkt *(trde(i) -epsl*three*
alpha*dfm(i))
402 sigxx(i)= sxx(i) + p11(i)
403 sigyy(i)= syy(i) + p11(i)
404 sigzz(i)= szz(i) + p11(i)
406 sv(i) = sqrt( sxx(i)*sxx(i) + syy(i)*syy(i) + szz(i)*szz(i) )
407 fs(i) = sv(i) + three*
alpha*p11(i)
409 IF (dfmas /= zero) dfs(i) = abs(fs(i)-cas*temp(i) - fs0)
410 IF (dfmsa /= zero) dfs(i) = abs(fs(i)-csa*temp(i) - fs0)
411 IF (dfs(i) /= zero .AND. epsl /= zero .AND. dfm(i)/= zero)
THEN
412 h = dfs(i)/epsl/dfm(i)
414 etse(i) = h /( (e + uvar(i,1)*(emart-e)) + h)
420#include "vectorize.inc"
429 sigxx(i)= sigxx(i) *inve
430 sigyy(i)= sigyy(i) *inve
431 sigzz(i)= sigzz(i) *inve
436#include "vectorize.inc"
441 p11(i) = k * (trde(i) - three*
alpha*epsl*fm)
443 ne = sqrt( ee1(i)**2 + ee2(i)**2 + ee3(i)**2 )
444 nxx(i) =ee1(i)/(ne+em20)
445 nyy(i) =ee2(i)/(ne+em20)
446 nzz(i) =ee3(i)/(ne+em20)
449 sxx(i)= g2*(ee1(i) -epsl*fm*nxx(i))
450 syy(i)= g2*(ee2(i) -epsl*fm*nyy(i))
451 szz(i)= g2*(ee3(i) -epsl*fm*nzz(i))
452 sv(i) = sqrt( sxx(i)*sxx(i) + syy(i)*syy(i) + szz(i)*szz(i) )
461 fs(i) = sv(i) + three*
alpha*p11(i) - cas*temp(i)
468 dfmas =
min(one, -(fs(i)-fs0)*(one-fm)/(fasf-beta*(one-fm) ) )
472 fs(i) = sv(i) + three*
alpha*p11(i) - csa*temp(i)
476 IF((fs(i) - fs0) < zero .AND. fsas < zero .AND. fsaf > zero )
THEN
477 dfmsa =
max(-one , fm * (fs(i) - fs0)/ (fsaf+beta*fm) )
480 dfm(i) = dfmas + dfmsa
481 IF(dfm(i) < zero .AND. fm == zero) dfm(i) = zero
484 sxx(i) = sxx(i) -g2* epsl*dfm(i)*nxx(i)
485 syy(i) = syy(i) -g2* epsl*dfm(i)*nyy(i)
486 szz(i) = szz(i) -g2* epsl*dfm(i)*nzz(i)
487 p11(i) = p11(i) - k*epsl*three*
alpha*dfm(i)
488 sigxx(i)= sxx(i) + p11(i)
489 sigyy(i)= syy(i) + p11(i)
490 sigzz(i)= szz(i) + p11(i)
491 sv(i) = sqrt( sxx(i)*sxx(i) + syy(i)*syy(i) + szz(i)*szz(i) )
492 fs(i) = sv(i) + three*
alpha*p11(i)
494 IF (dfmas /= zero) dfs(i) = abs(fs(i)-cas*temp(i) - fs0)
495 IF (dfmsa /= zero) dfs(i) = abs(fs(i)-csa*temp(i) - fs0)
496 IF (dfs(i) /= zero .AND. epsl /= zero.AND.dfm(i)/= zero)
THEN
497 h = dfs(i)/epsl/dfm(i)
504#include "vectorize.inc"
513 sigxx(i)= sigxx(i) *inve
514 sigyy(i)= sigyy(i) *inve
515 sigzz(i)= sigzz(i) *inve
528 IF(abs(sigzz(i))>em20.OR.kk< 3)
THEN
531 ev(i,3) = ev(i,3) /two
532 sigzim1(i) = sigzz(i)
534 test = sigzz(i)-sigzim1(i)
537 ev(i,3) = ev(i,3)-sigzz(i) *(ev(i,3)-epsim1(i))/
538 . (sigzz(i)-sigzim1(i))
540 ev(i,3) = ev(i,3)-sigzz(i) *(ev(i,3)-epsim1(i))/
544 sigzim1(i) = sigzz(i)
547 nindx_loop_loc = nindx_loop_loc + 1
548 indx_loop_loc(nindx_loop_loc) = i
552 nindx_loop = nindx_loop_loc
553 indx_loop(1:nindx_loop) = indx_loop_loc(1:nindx_loop_loc)
561 uvar(1:nel,1) = uvar(1:nel,1) + dfm(1:nel)
562 uvar(1:nel,1) =
max(zero, uvar(1:nel,1))
563 uvar(1:nel,2) = fs(1:nel)- cas*temp(1:nel)
564 uvar(1:nel,3) = fs(1:nel)- csa*temp(1:nel)
567 epszz(i) =ev(i,3) - one
570 signxx(1:nel) = eigv(1:nel,1,1)*sigxx(1:nel)+eigv(1:nel,1,2)*sigyy(1:nel)
571 signyy(1:nel) = eigv(1:nel,2,1)*sigxx(1:nel)+eigv(1:nel,2,2)*sigyy(1:nel)
572 signxy(1:nel) = eigv(1:nel,3,1)*sigxx(1:nel)+eigv(1:nel,3,2)*sigyy(1:nel)
573 signyz(1:nel) = sigoyz(1:nel) + gs(1:nel)*depsyz(1:nel)
574 signzx(1:nel) = sigozx(1:nel) + gs(1:nel)*depszx(1:nel)
575 thk(1:nel) = thk(1:nel) + (epszz(1:nel)-uvar(1:nel,4))*thkly(1:nel)*off(1:nel)
578 uvar(1:nel,1) =
min(one, uvar(1:nel,1))
579 uvar(1:nel,10) = epsxx(1:nel)
580 uvar(1:nel,4) = epszz(1:nel)
581 uvar(1:nel,8) = sigzz(1:nel)
583 viscmax(1:nel) = zero
585 sspsh = sqrt( e /(one - nu*nu)/rho0(i) )
586 sspsol = sqrt( aa1/rho0(i) )
587 soundsp(i) =
max(sspsh ,sspsol)