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),IPM(NPROPMI,*)
115 my_real TIME,TIMESTEP
116(NEL),RHO0(NEL),EINT(NEL,2),
117 . THKLY(NEL),PLA(NEL),
118 . EPSPXX(NEL),EPSPYY(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) , TEMP(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 I,JJ,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,sqdt,a,b,c,fct,fctp, dftr,unmxn,db,
163 .
alpha,epsl,aa1,fm,dfmsa,dfmas,beta,gm,km,h,
164 . dgt,dkt,cp,tini,sspsh ,sspsol,
165 . k,p11(nel),sxx(nel),cas,csa,tsas,tfas, tssa,tfsa,inve,
166 . syy(nel),szz(nel),fass,fsas,fasf,fsaf,rsas,rfas,
167 . sv(nel),fs(nel),fs0,yld_ass,yld_asf,yld_sas,yld_saf,rssa,rfsa,
171 . nxx(nel),nyy(nel),nzz(nel),
174 . ee1(nel),ee2(nel),ee3(nel),det(nel),
175 . sigxx(nel), sigyy(nel), sigzz(nel),dfs(nel)
178 . sigzim1(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)
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*nyy(i))
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*temp(i)
335 beta = epsl*(two*gt(i)+nine*kt(i)*
alpha*
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 )
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)
467 IF((fs(i) - fs0) > zero .AND. fass > zero.AND. fasf < zero.AND. fm < one ) then
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)
subroutine sigeps71c(nel, nuparam, nuvar, mfunc, kfunc, npf, npt0, ipt, iflag, tf, time, timestep, uparam, rho0, area, eint, thkly, epspxx, epspyy, epspxy, epspyz, epspzx, depsxx, depsyy, depsxy, depsyz, depszx, epsxx, epsyy, epsxy, epsyz, epszx, sigoxx, sigoyy, sigoxy, sigoyz, sigozx, signxx, signyy, signxy, signyz, signzx, sigvxx, sigvyy, sigvxy, sigvyz, sigvzx, soundsp, viscmax, thk, pla, uvar, off, ngl, ipm, mat, etse, gs, yld, vol, temp, ismstr, jthe)