31 1 NEL ,NUPARAM ,NUVAR ,NVARTMP ,TIME ,
32 2 NFUNC ,IFUNC ,NPF ,TF ,UPARAM ,
33 3 THKLY ,THK ,GS ,ETSE ,SIGY ,
34 4 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
35 5 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
36 6 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
37 7 SOUNDSP ,UVAR ,SIGA ,SIGB ,SIGC ,
38 8 RHO ,OFF ,PLA ,DEP ,VARTMP ,
39 9 INLOC ,DPLANL ,ETIMP ,SEQ ,LOFF )
43#include "implicit_f.inc"
51 INTEGER ,
INTENT(IN) :: NEL,,NUVAR,
53 my_real ,
INTENT(IN) ::
55 my_real ,
DIMENSION(NUPARAM) ,
INTENT(IN) ::
57 my_real ,
DIMENSION(NEL) ,
INTENT(IN) ::
58 . RHO,THKLY,OFF,GS,DPLANL,
59 . DEPSXX,DEPSYY,DEPSXY,DEPSYZ,DEPSZX,
60 . sigoxx,sigoyy,sigoxy,sigoyz,sigozx
61 INTEGER ,
INTENT(INOUT) :: VARTMP(NEL,NVARTMP)
62 my_real,
DIMENSION(NEL),
INTENT(IN) :: loff
66 my_real ,
DIMENSION(NEL,3) ,
INTENT(INOUT) ::
68 my_real ,
DIMENSION(NEL,4) ,
INTENT(INOUT) ::
70 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) ::
72 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) ::
74 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) ::
75 . soundsp,dep,etse,sigy,seq,
76 . signxx,signyy,signxy,signyz,signzx,etimp
80 INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
86 INTEGER :: I,J,K,OPTE,OPTR,NITER,NINDX,IPLAS,ITER
87 INTEGER ,
DIMENSION(NEL) :: INDEX,IPOS,ILEN,IAD2
89 . nu,bsat,einf,coe,fct,gsigma,dgsigma,rdot,
90 . eini,yield,byu,myu,hyu,rsat,p1,p2,p3,p4,n3,cst,
91 . cstt,df_dk1,df_dk2,dk1_dsigxx,dk1_dsigyy,dk2_dsigxx,
92 . dk2_dsigyy,dk2_dsigxy,normxx,normyy,normxy,dfdsig_c_2,
93 . dfdsig_a,dfdsig_alpha,dfdsig_beta,dphi_dlam,dpla_dlam,
94 . drnih,dmu,c1_kh,c2_kh,norm_sp,t1,dvxx_dlam,dvyy_dlam,dvxy_dlam,
95 . daxx_dlam,dayy_dlam,daxy_dlam,du_dlam
96 REAL(KIND=8) :: dlam,dep_dp(nel)
97 my_real ,
DIMENSION(NEL) ::
98 . young,shear,ayu,scalee,h,a1,a2,axx,ayy,axy,k1,k2,cyu,asta,camb,
99 . seff,r,rnih,depszz,deelzz,devboxx,devboyy,devbozz,devboxy,dydxe,
100 . deplxx,deplyy,deplxy,deplzz,devbxx,devbyy,devbzz,devbxy,phi,
101 . dbxx,dbyy,dbzz,dbxy,bqxx,bqyy,bqzz,bqxy,yld,max_asta,canbnxx,canbnyy,canbnxy,
102 . cannxx,cannyy,cannxy,ddep,u,vxx,vyy,vxy,ka1,ka2
103 my_real ,
DIMENSION(NEL,3) :: sigbo
114 norm_sp = -huge(norm_sp)
115 normxx = -huge(normxx)
116 normyy = -huge(normyy)
117 normxy = -huge(normxy)
142 iplas = nint(uparam(21))
147 ELSEIF(iplas == 2)
THEN
151 IF (isigi == 0 .and. time == zero)
THEN
154 uvar(i,3) = bsat - yield
162 IF (coe == zero .and. ifunc(1) == 0)
THEN
165 ELSE IF (opte == 1)
THEN
166 ipos(1:nel) = vartmp(1:nel,1)
167 iad2(1:nel) = npf(ifunc(1)) / 2 + 1
168 ilen(1:nel) = npf(ifunc(1)+1) / 2 - iad2(1:nel) - ipos(1:nel)
169 CALL vinter(tf,iad2,ipos,ilen,nel,pla,dydxe,scalee)
170 young(1:nel) = eini * scalee(1:nel)
171 vartmp(1:nel,1) = ipos(1:nel)
175 IF (pla(i) > zero)
THEN
176 young(i) = eini-(eini-einf)*(one-exp(-coe*pla(i)))
185 a1(i) = young(i)/(one-nu*nu)
186 a2(i) = nu*young(i)/(one-nu*nu)
187 shear(i) = young(i)*half/(one+nu)
191 max_asta(i) = uvar(i,6)
198 etimp(i) = young(i)/eini
199 sigbo(i,1) = sigb(i,1)
200 sigbo(i,2) = sigb(i,2)
201 sigbo(i,3) = sigb(i,3)
211 signxx(i) = sigoxx(i) + a1(i)*depsxx(i)+a2(i)*depsyy(i)
212 signyy(i) = sigoyy(i) + a2(i)*depsxx(i)+a1(i)*depsyy(i)
213 signxy(i) = sigoxy(i) + shear(i) * depsxy(i)
214 signyz(i) = sigoyz(i) + gs(i) * depsyz(i)
215 signzx(i) = sigozx(i) + gs(i) * depszx(i)
217 axx(i) = signxx(i) - siga(i,1) - sigb(i,1)
218 ayy(i) = signyy(i) - siga(i,2) - sigb(i,2)
219 axy(i) = signxy(i) - siga(i,3) - sigb(i,3)
223 seff(i) = sqrt(axx(i)**2 - two*p2*axx(i)*ayy(i) + p1*ayy(i)**2 + p3*axy(i)**2)
225 asta(i) = sqrt(siga(i,1)**2 - two*p2*siga(i,1)*siga(i,2) + p1*siga(i,2)**2 + p3*siga(i,3)**2)
227 ELSEIF (iplas == 2)
THEN
228 k1(i) = (axx(i) + p3*ayy(i))/two
229 k2(i) = (sqrt(((axx(i) - p3*ayy(i))/two)**two + (p4*axy(i))**two))
230 seff(i) = p1*(abs(k1(i)+k2(i))*norm_sp)**n3 + p1*(abs(k1(i)-k2(i))*norm_sp)**n3 + p2*(abs(two*k2(i))*norm_sp)**n3
231 seff(i) = (half*
max(seff(i),em20))**(one/n3)
233 ka1(i) = (siga(i,1) + p3*siga(i,2))/two
234 ka2(i) = sqrt(((siga(i,1) - p3*siga(i,2))/two)**two + (p4*siga(i,3))**two)
235 asta(i) = p1*abs(ka1(i)+ka2(i))**n3 + p1*abs(ka1(i)-ka2(i))**n3 + p2*abs(two*ka2(i))**n3
236 asta(i) = (half*
max(em20,asta(i)))**(one/n3)
239 asta(i) =
max(asta(i),em20)
240 max_asta(i) =
max(max_asta(i),asta(i))
241 IF (max_asta(i) < bsat - yield)
THEN
246 camb(i) = (cyu(i)*ayu(i) + myu*byu)/yield
248 t1 = cyu(i)*sqrt(ayu(i)/asta(i))
249 canbnxx(i) = t1 * siga(i,1) + myu*sigb(i,1)
250 canbnyy(i) = t1 * siga(i,2) + myu*sigb(i,2)
251 canbnxy(i) = t1 * siga(i,3) + myu*sigb(i,3)
253 cannxx(i) = t1 * siga(i,1)
254 cannyy(i) = t1 * siga(i,2)
255 cannxy(i) = t1 * siga(i,3)
257 ! yield
function value
258 phi(i) = seff(i) /norm_sp - yield
267 IF (phi(i) >= zero .AND. off(i) == one)
THEN
272#include "vectorize.inc"
289#include "vectorize.inc"
309 normxx = (axx(i)-p2*ayy(i))/(
max(seff(i),em20))
310 normyy = (p1*ayy(i)-p2*axx(i))/(
max(seff(i),em20))
311 normxy = (p3*axy(i))/(
max(seff(i),em20))
313 ELSEIF (iplas == 2)
THEN
315 df_dk1 = ((seff(i)/norm_sp)**(1-n3))*(p1/two)* (
316 . + sign(one,k1(i)+k2(i))*(abs(k1(i)+k2(i))**(n3-1))
317 . + sign(one,k1(i)-k2(i))*(abs(k1(i)-k2(i))**(n3-1)))
318 df_dk2 = ((seff(i)/norm_sp)**(1-n3))*((p1/two)*(
319 . + sign(one,k1(i)+k2(i))*(abs(k1(i)+k2(i))**(n3-1))
320 . - sign(one,k1(i)-k2(i))*(abs(k1(i)-k2(i))**(n3-1)))
321 . + p2*(abs(two*k2(i))**(n3-1)))
324 dk2_dsigxx = (axx(i)-p3*ayy(i)) /(
max(four*k2(i),em20))
325 dk2_dsigyy = -p3*(axx(i)-p3*ayy(i)) /(
max(four*k2(i),em20))
326 dk2_dsigxy = (p4**two)*axy(i) /
max(k2(i),em20)
328 normxx = df_dk1*dk1_dsigxx+ df_dk2*dk2_dsigxx
329 normyy = df_dk1*dk1_dsigyy+ df_dk2*dk2_dsigyy
330 normxy = df_dk2*dk2_dsigxy
339 dfdsig_a = normxx * axx(i)
343 dpla_dlam = dfdsig_a/yield
345 du_dlam = -u(i)**2 * camb(i) * dpla_dlam
346 dvxx_dlam = -(a1(i)*normxx + a2(i)*normyy) + canbnxx(i) * dpla_dlam
347 dvyy_dlam = -(a1(i)*normyy + a2(i)*normxx) + canbnyy(i) * dpla_dlam
348 dvxy_dlam = -shear(i) *normxy + canbnxy(i) * dpla_dlam
350 daxx_dlam = du_dlam * vxx(i) + dvxx_dlam
351 dayy_dlam = du_dlam * vyy(i) + dvyy_dlam * u(i)
352 daxy_dlam = du_dlam * vxy(i) + dvxy_dlam * u(i)
356 dphi_dlam = normxx * daxx_dlam + normyy * dayy_dlam + normxy * daxy_dlam
357 dphi_dlam = sign(
max(abs(dphi_dlam),em20) ,dphi_dlam)
363 dlam = - phi(i)/dphi_dlam
366 deplxx(i) = dlam*normxx
367 deplyy(i) = dlam*normyy
368 deplxy(i) = dlam*normxy
371 pla(i) = pla(i) + dlam*dpla_dlam
373 ddep(i) = dlam * dpla_dlam
375 dep_dp(i) = dep_dp(i) + dlam*dpla_dlam
376 dep_dp(i) =
max(dep_dp(i),zero)
379 signxx(i) = signxx(i) - a1(i)*deplxx(i) - a2(i)*deplyy(i)
380 signyy(i) = signyy(i) - a2(i)*deplxx(i) - a1(i)*deplyy(i)
381 signxy(i) = signxy(i) - shear(i)*deplxy(i)
384 u(i) = one /(one + camb(i) * ddep(i) )
385 vxx(i) = signxx(i) - siga(i,1) - sigb(i,1) + canbnxx(i) * ddep(i
386 vyy(i) = signyy(i) - siga(i,2) - sigb(i,2) + canbnyy(i) * ddep(i)
387 vxy(i) = signxy(i) - siga(i,3) - sigb(i,3) + canbnxy(i) * ddep(i)
388 axx(i) = u(i) * vxx(i)
389 ayy(i) = u(i) * vyy(i)
390 axy(i) = u(i) * vxy(i)
394 siga(i,1) = siga(i,1) + ((cyu(i)*ayu(i)*axx(i)/yield) - cannxx(i) ) * ddep(i)
395 siga(i,2) = siga(i,2) + ((cyu(i)*ayu(i)*ayy
396 siga(i,3) = siga(i,3) + ((cyu(i)*ayu(i)*axy(i)/yield) - cannxy(i) ) * ddep
399 sigb(i,1) = sigb(i,1) + ((myu *byu *axx(i)/yield) - myu
400 sigb(i,2) = sigb(i,2) + ((myu *byu *ayy(i)/yield) - myu*sigbo(i,2))* ddep(i)
401 sigb(i,3) = sigb(i,3) + ((myu *byu *axy(i)/yield) - myu*sigbo(i,3))* ddep(i)
406 seff(i) = sqrt(axx(i)**2 - two*p2*axx(i)*ayy(i) + p1*ayy(i)**2 + p3*axy(i)**2)
408 ELSEIF (iplas == 2)
THEN
409 k1(i) = (axx(i) + p3*ayy(i))/two
410 k2(i) = sqrt(((axx(i) - p3*ayy(i))/two)**two + (p4*axy(i))**two)
411 seff(i) = p1*(abs(k1(i)+k2(i))*norm_sp)**n3 + p1*(abs(k1(i)-k2(i))*norm_sp)**n3 + p2*(abs(two*k2(i))*norm_sp)**n3
412 seff(i) = (half*seff(i))**(one/n3)
416 phi(i) = seff(i)/norm_sp - yield
419 IF (inloc == 0) deplzz(i) = deplzz(i) - (deplxx(i)+deplyy(i))
425#include "vectorize.inc"
432 asta(i) = sqrt(siga(i,1)**2 - two*p2*siga(i,1)*siga(i,2) + p1*siga(i,2)**2 + p3*siga(i,3)**2)
434 ELSEIF (iplas == 2)
THEN
435 ka1(i) = (siga(i,1) + p3*siga(i,2))/two
436 ka2(i) = sqrt(((siga(i,1) - p3*siga(i,2))/two)**two + (p4*siga(i,3))**two)
437 asta(i) = p1*abs(ka1(i)+ka2(i))**n3 + p1*abs(ka1(i)-ka2(i))**n3 + p2*abs(two*ka2(i))**n3
438 asta(i) = (half*
max(em20,asta(i)))**(one/n3)
441 asta(i) =
max(asta(i),em20)
442 max_asta(i) =
max(max_asta(i),asta(i))
443 IF (max_asta(i) < bsat - yield)
THEN
450 devboxx(i) = two_third*sigbo(i,1) - third*sigbo(i,2)
451 devboyy(i) = two_third*sigbo(i,2) - third*sigbo(i,1)
452 devbozz(i) = -third*sigbo(i,1) - third*sigbo(i,2)
453 devboxy(i) = sigbo(i,3)
456 devbxx(i) = two_third*sigb(i,1) - third*sigb(i,2)
457 devbyy(i) = two_third*sigb(i,2) - third*sigb(i,1)
458 devbzz(i) = -third*sigb(i,1) - third*sigb(i,2)
459 devbxy(i) = sigb(i,3)
465 bqxx(i) = devbxx(i) - sigc(i,1)
466 bqyy(i) = devbyy(i) - sigc(i,2)
467 bqzz(i) = devbzz(i) - sigc(i,3)
468 bqxy(i) = devbxy(i) - sigc(i,4)
470 dbxx(i) = devbxx(i) - devboxx(i)
471 dbyy(i) = devbyy(i) - devboyy(i)
472 dbzz(i) = devbzz(i) - devbozz(i)
473 dbxy(i) = devbxy(i) - devboxy(i)
475 gsigma = three_half*(bqxx(i)*bqxx(i) + bqyy(i)*bqyy
478 dgsigma = bqxx(i)*dbxx(i) + bqyy(i)*dbyy(i) + bqzz(i)*dbzz(i) + two*bqxy
480 IF ((gsigma >= zero).AND.(dgsigma > zero))
THEN
482 IF (optr == one)
THEN
483 rdot = rsat*((pla(i)+cst)**cstt-cst**cstt) - r(i)
484 r(i) = rsat*((pla(i)+cst)**cstt-cst**cstt)
486 rdot = myu*(rsat - r(i))*dep_dp(i)
489 ayu(i) = bsat + r(i) - yield
493 IF (rnih(i) == zero)
THEN
494 dmu = (gsigma/(three*hyu*dgsigma)) - one
496 dmu = (one-hyu)*three_half*dgsigma/(rnih(i)**2)
499 sigc(i,1) = devbxx(i) - bqxx(i)/(one+dmu)
500 sigc(i,2) = devbyy(i) - bqyy(i)/(one+dmu)
501 sigc(i,3) = devbzz(i) - bqzz(i)/(one+dmu)
502 sigc(i,4) = devbxy(i) - bqxy(i)/(one+dmu)
504 bqxx(i) = devbxx(i) - sigc(i,1)
505 bqyy(i) = devbyy(i) - sigc(i,2)
506 bqzz(i) = devbzz(i) - sigc(i,3)
507 bqxy(i) = devbxy(i) - sigc
509 dgsigma = bqxx(i)*dbxx(i) + bqyy(i)*dbyy(i) + bqzz(i)*dbzz(i) + two*bqxy(i)*dbxy(i)
511 IF (rdot > zero)
THEN
512 IF (rnih(i) == zero)
THEN
514 rnih(i) = three*hyu*dgsigma
517 drnih = hyu*three_half*dgsigma/rnih(i)
519 rnih(i) = rnih(i) + drnih
530#include "vectorize.inc"
537 yld(i) = sqrt(signxx(i)**2 - two*p2*signxx(i)*signyy(i) + p1*signyy(i)**2 + p3*signxy(i)**2)
539 ELSEIF (iplas == 2)
THEN
540 k1(i) = (signxx(i) + p3*signyy(i))/two
541 k2(i) = sqrt(((signxx(i) - p3*signyy(i))/two)**two + (p4*signxy(i))**two)
542 yld(i) = p1*abs(k1(i)+k2(i))**n3 + p1*abs(k1(i)-k2(i))**n3 + p2*abs(two*k2(i))**n3
543 yld(i) = (half*
max(yld(i),em20))**(one/n3)
547 IF (dep_dp(i) > zero)
THEN
548 h(i) = abs(yld(i)-uvar(i,4))/dep_dp(i)
550 etse(i) = h(i) / (h(i)+young(i))
557 uvar(i,6) = max_asta(i)
562 axx(i) = signxx(i) - siga(i,1) - sigb(i,1)
563 ayy(i) = signyy(i) - siga(i,2) - sigb(i,2)
564 axy(i) = signxy(i) - siga(i,3) - sigb(i,3)
567 seff(i) = sqrt(axx(i)**2 - two*p2*axx(i)*ayy(i) + p1*ayy(i)**2 + p3*axy(i)**2)
569 ELSEIF (iplas == 2)
THEN
570 k1(i) = (axx(i) + p3*ayy(i))/two
571 k2(i) = sqrt(((axx(i) - p3*ayy(i))/two)**two + (p4*axy(i))**two)
572 seff(i) = p1*abs(k1(i)+k2(i))**n3 + p1*abs(k1(i)-k2(i))**n3 + p2*abs(two*k2(i))**n3
573 seff(i) = (half*seff(i))**(one/n3)
576 deelzz(i) = -nu*(signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/young(i)
581 IF ((inloc > 0).AND.(loff(i) == one))
THEN
584 seff(i) = sqrt(axx(i)**2 - two*p2*axx(i)*ayy(i) + p1*ayy(i)**2 + p3*axy(i)**2)
585 normxx = (axx(i)-p2*ayy(i))/(
max(seff(i),em20))
586 normyy = (p1*ayy(i)-p2*axx(i))/(
max(seff(i),em20))
587 normxy = (p3*axy(i))/(
max(seff(i),em20))
589 ELSEIF (iplas == 2)
THEN
590 k1(i) = (axx(i) + p3*ayy(i))/two
591 k2(i) = (sqrt(((axx(i) - p3*ayy(i))/two)**two + (p4*axy(i))**two))
592 seff(i) = p1*abs(k1(i)+k2(i))**n3 + p1*abs(k1(i)-k2(i))**n3 + p2*abs(two*k2(i))**n3
593 seff(i) = (half*
max(seff(i),em20))**(one/n3)
594 df_dk1 = (seff(i)**(1-n3))*(p1/two)*(
595 . + sign(one,k1(i)+k2(i))*(abs(k1(i)+k2(i))**(n3-1))
596 . + sign(one,k1(i)-k2(i))*(abs(k1(i)-k2(i))**(n3-1)))
597 df_dk2 = (seff(i)**(1-n3))*((p1/two)*(
598 . + sign(one,k1(i)+k2(i))*(abs(k1(i)+k2(i))**(n3-1))
599 . - sign(one,k1(i)-k2(i))*(abs(k1(i)-k2(i))**(n3-1)))
600 . + p2*(abs(two*k2(i))**(n3-1)))
603 dk2_dsigxx = (axx(i)-p3*ayy(i))/(
max(four*k2(i),em20))
604 dk2_dsigyy = -p3*(axx(i)-p3*ayy(i))/(
max(four*k2(i),em20))
605 dk2_dsigxy = (p4**two)*axy(i)/
max(k2(i),em20)
606 normxx = df_dk1*dk1_dsigxx + df_dk2*dk2_dsigxx
607 normyy = df_dk1*dk1_dsigyy + df_dk2*dk2_dsigyy
608 normxy = df_dk2*dk2_dsigxy
610 dfdsig_a = normxx * axx(i)
613 IF (dfdsig_a /= zero)
THEN
614 deplzz(i) = -
max(dplanl(i),zero)*(yield/dfdsig_a)*(normxx + normyy)
620 depszz(i) = deelzz(i) + deplzz(i)
621 thk(i) = thk(i) + depszz(i)*thkly(i)*off(i)
622 soundsp(i) = sqrt(a1(i)/rho(i))