28 SUBROUTINE plas24b(NEL ,NINDX ,INDX ,NGL ,PM ,
29 . SIG ,DAM ,CRAK ,EPSVP ,CDAM ,
30 . RHO ,EINT ,VK0 ,VK ,ROB ,PLA ,
31 . DEPS1 ,DEPS2 ,DEPS3 ,DEPS4 ,DEPS5 ,DEPS6 ,
32 . S1 ,S2 ,S3 ,S4 ,S5 ,S6 ,
33 . SCAL1 ,SCAL2 ,SCAL3 ,SCLE2 )
37#include "implicit_f.inc"
46 INTEGER NEL,NINDX,NGL(NEL),INDX(NINDX)
48 my_real,
DIMENSION(NEL) :: S1,S2,S3,S4,S5,S6,EPSVP,RHO,EINT,VK0,VK,ROB,
49 . SCAL1,SCAL2,SCAL3,SCLE2,DEPS1,DEPS2,DEPS3,DEPS4,DEPS5,DEPS6
50 my_real,
DIMENSION(NEL,7) :: PLA
51 my_real,
DIMENSION(NEL,3,3) :: cdam
52 my_real,
DIMENSION(NEL,6) :: sig
53 my_real,
DIMENSION(NEL,3) :: dam,crak
57 INTEGER I,J,NITER,ITER
58 my_real,
DIMENSION(NEL) :: sm,de1,de2,de3,de4,de5,de6,c44,c55,c66
59 my_real fc, rt, rc, rct1, rct2, aa, bc,
60 . bt, ac, hbp, ali0, alf0, vky, tol, rok0, ro0, hv0, vmax, expo,
61 . young, nu, g, den, rate, fac, fac1,rok, r2, aj3, cs3t,
62 . bb, df, rf, rf2, aj2, ajj, dkdsm, drfdsm, b0, drf3, b1,
63 . b2,
alpha, phi, to, dfdto, hpv, hp, ecr,sigm,
64 . ts1, ts2, ts3, ts4, ts5, ts6,
65 . dfs1,dfs2,dfs3,dfs4,dfs5,dfs6,dgs1,dgs2,dgs3,dgs4,dgs5,dgs6,
66 . h1a, h2a, h3a, h4a,h5a, h6a, h1n, h2n, h3n, h4n, h5n, h6n, hh,
67 . lambda,depsp1,depsp2,depsp3,depsp4,depsp5,depsp6,
68 . depsel1,depsel2,depsel3,depsel4,depsel5,depsel6,
69 . depsvp, rr,vkmax, ro, div, vkk, numer, denom,
70 . bulk,dp,rho0,hvfac,d1,d2,d3,depsv,seuil,dfdj,norms,
71 . cp11,cp12,cp13,cp14,cp15,cp16,cp21,cp22,cp23,cp24,cp25,cp26,cp31,
72 . cp32,cp33,cp34,cp35,cp36,cp41,cp42,cp43,cp44,cp45,cp46,cp51,cp52,
73 . cp53,cp54,cp55,cp56,cp61,cp62,cp63,cp64,cp65,cp66,
74 . c11,c12,c13,c22,c23,c33
108 crak(i,1)=crak(i,1)-scle2(i)*deps1(i)
109 crak(i,2)=crak(i,2)-scle2(i)*deps2(i)
110 crak(i,3)=crak(i,3)-scle2(i)*deps3(i)
111 de1(i)=one -
max( zero , sign(dam(i,1),crak(i,1)) )
112 de2(i)=one -
max( zero , sign(dam(i,2),crak(i,2)) )
113 de3(i)=one -
max( zero , sign(dam(i,3),crak(i,3)) )
114 scal1(i)=half+sign(half,de1(i)-one)
115 scal2(i)=half+sign(half,de2(i)-one)
116 scal3(i)=half+sign(half,de3(i)-one)
117 de4(i)=scal1(i)*scal2(i)
118 de5(i)=scal2(i)*scal3(i)
119 de6(i)=scal3(i)*scal1(i)
121 den = one - nu**2 *(de4(i) + de5(i) + de6(i)
122 . + two*nu*scal1(i)*scal2(i)*scal3(i))
124 cdam(i,1,1) = young*de1(i)*(one -nu**2*scal2(i)*scal3(i))*den
125 cdam(i,2,2) = young*de2(i)*(one -nu**2*scal1(i)*scal3(i))*den
126 cdam(i,3,3) = young*de3(i)*(one -nu**2*scal2(i)*scal1(i))*den
127 cdam(i,1,2) = nu*young*scal1(i)*scal2(i) *(one+nu*scal3(i))*den
128 cdam(i,2,3) = nu*young*scal2(i)*scal3(i) *(one+nu*scal1(i))*den
129 cdam(i,1,3) = nu*young*scal1(i)*scal3(i) *(one+nu*scal2(i))*den
130 cdam(i,2,1) = cdam(i,1,2)
131 cdam(i,3,1) = cdam(i,1,3)
132 cdam(i,3,2) = cdam(i,2,3)
137 sig(i,1)=cdam(i,1,1)*crak(i,1)+cdam(i,1,2)*crak(i,2)+cdam(i,1,3)*crak(i,3)
138 sig(i,2)=cdam(i,2,1)*crak(i,1)+cdam(i,2,2)*crak(i,2)+cdam(i,2,3)*crak(i,3)
139 sig(i,3)=cdam(i,3,1)*crak(i,1)+cdam(i,3,2)*crak(i,2)+cdam(i,3,3)*crak(i,3)
140 sig(i,4)=de4(i)*sig(i,4)-c44(i)*deps4(i)*(one-scle2(i))
141 sig(i,5)=de5(i)*sig(i,5)-c55(i)*deps5(i)*(one-scle2(i))
142 sig(i,6)=de6(i)*sig(i,6)-c66(i)*deps6(i)*(one-scle2(i))
143 s1(i) = scal1(i)*sig(i,1)
144 s2(i) = scal2(i)*sig(i,2)
145 s3(i) = scal3(i)*sig(i,3)
146 s4(i) = sig(i,4)*scal1(i)*scal2(i)
147 s5(i) = sig(i,5)*scal2(i)*scal3(i)
148 s6(i) = sig(i,6)*scal3(i)*scal1(i)
149 sm(i) = (s1(i)+s2(i)+s3(i)) * third
150 s1(i) = s1(i) - sm(i)
151 s2(i) = s2(i) - sm(i)
152 s3(i) = s3(i) - sm(i)
154 denom = abs(crak(i,1))+abs(crak(i,2))+abs(crak(i,3))
155 . +(abs(sig(i,4)) +abs(sig(i,5)) +abs(sig(i,6)))/g
157 IF (denom == zero) cycle
159 numer = abs(deps1(i))+abs(deps2(i))+abs(deps3(i))
160 . + abs(deps4(i))+abs(deps5(i))+abs(deps6(i))
163 niter = nint(three*rate) + 1
164 niter = min0(niter,10)
167 deps1(i) = fac * deps1(i)
168 deps2(i) = fac * deps2(i)
169 deps3(i) = fac * deps3(i)
170 deps4(i) = fac * deps4(i)
171 deps5(i) = fac * deps5(i)
172 deps6(i) = fac * deps6(i)
178 rok = rok0+rob(i)-ro0
179 r2 = s1(i)**2 + s2(i)**2 + s3(i)**2
180 . +(s4(i)**2 + s5(i)**2 + s6(i)**2)*two
181 IF (sm(i) >= rt-tol)
THEN
183 ELSEIF (sm(i) > rc)
THEN
184 vk(i) = one +(one-vk0(i))*(rct1-two*rc*sm(i)+sm(i)**2)/rct2
185 ELSEIF (sm(i) > rok)
THEN
188 ELSEIF (sm(i) > rob(i))
THEN
189 vk(i) = vk0(i)*(one - ((sm(i)-rok)/(rob(i)-rok))**2)
195 aj3 = s1(i)*s2(i)*s3(i)
196 . - s1(i)*s5(i)*s5(i)-s2(i)*s6(i)*s6(i)-s3(i)*s4(i)*s4(i)
197 . + two*s4(i)*s5(i)*s6(i)
198 cs3t= half * aj3*(three/half*
max(r2,em20))**three_half
201 bb = half*((one - cs3t)*bc+(one +cs3t)*bt)
202 df = sqrt(bb*bb +
max(-aa*sm(i) + ac,em9))
209 IF (r2/rf2 > em04)
THEN
217 sm(i) =
max(rob(i),sm(i))
218 IF (sm(i) >= rt-tol)
THEN
221 dkdsm = two*(one -vk0(i))*(sm(i)-rc)/rct2
222 ELSEIF(sm(i)>rok)
THEN
225 dkdsm = -two*vk0(i)*(sm(i)-rok)/(rob(i)-rok)**2
228 b0 = -third * vk(i) *drfdsm - third * rf * dkdsm
229 drf3 = half* (-one + bb/df) * (bt-bc)/aa
231 . + vk(i)*drf3*fourth*aj3*(three/aj2)**twop5
232 b2 = -vk(i)*drf3*half*(three/aj2)**three_half
234 ts1 = s1(i)**2 + s4(i)**2 + s6(i)**2 - two*third*aj2
235 ts2 = s2(i)**2 + s4(i)**2 + s5(i)**2 - two*third*aj2
236 ts3 = s3(i)**2 + s5(i)**2 + s6(i)**2 - two*third*aj2
237 ts4 = two* (s5(i)*s6(i)-s4(i)*s3(i))
238 ts5 = two* (s6(i)*s4(i)-s5(i)*s1(i))
239 ts6 = two* (s4(i)*s5(i)-s6(i)*s2(i))
240 dfs1= b0 + b1*s1(i) + b2*ts1
241 dfs2= b0 + b1*s2(i) + b2*ts2
242 dfs3= b0 + b1*s3(i) + b2*ts3
243 dfs4= two*b1*s4(i) + b2*ts4
244 dfs5= two*b1*s5(i) + b2*ts5
245 dfs6= two*b1*s6(i) + b2*ts6
247 IF (sm(i) > rok .and. vk(i) > vky)
THEN
248 alpha = (one-vk(i))*ali0 + (vk(i)-vky)*alf0
250 ELSEIF (vk0(i) > vky)
THEN
251 alpha = (one-vk0(i))*ali0 + (vk0(i)-vky)*alf0
260 seuil =
min(-em01,ali0)
263 IF (sm(i) < rok .AND. b0 < zero)
THEN
264 fac = (seuil-b0) / seuil
286 IF (rho(i) < rho0 .OR. eint(i)<0)
alpha=zero
288 dgs1=fac*
alpha+s1(i)/(two*ajj)
289 dgs2=fac*
alpha+s2(i)/(two*ajj)
290 dgs3=fac*
alpha+s3(i)/(two*ajj)
295 dgs1=fac*dgs1+fac1*dfs1
296 dgs2=fac*dgs2+fac1*dfs2
297 dgs3=fac*dgs3+fac1*dfs3
298 dgs4=fac*dgs4+fac1*dfs4
299 dgs5=fac*dgs5+fac1*dfs5
300 dgs6=fac*dgs6+fac1*dfs6
303 alpha = third*(dgs1+dgs2+dgs3)
306 IF (sm(i) < rok)
THEN
307 to = sqr3_2*vk0(i)*rf
311 phi =
max(zero,
alpha*three*sm(i)+ajj)/to
312 dfdto=-sqrt(two_third)+b0
313 ecr = phi*dfdto*hbp*fac
317 hpv =hv0*(one-hvfac*vk(i))*
max(one,exp(expo*epsvp(i)))
318 IF (sm(i) >= rok)
THEN
319 IF(
alpha>=zero) hpv=zero
321 IF (
alpha>=zero)
THEN
324 ecr = ecr + rf * dkdsm*hpv*
alpha
331 IF(r2>=rf2 .OR.vk(i)>=one )
THEN
351 h1a = cdam(i,1,1)*dfs1 + cdam(i,2,1)*dfs2 + cdam(i,3,1)*dfs3
352 h2a = cdam(i,1,2)*dfs1 + cdam(i,2,2)*dfs2 + cdam(i,3,2)*dfs3
353 h3a = cdam(i,1,3)*dfs1 + cdam(i,2,3)*dfs2 + cdam(i,3,3)*dfs3
358 h1n = cdam(i,1,1)*dgs1 + cdam(i,1,2)*dgs2 + cdam(i,1,3)*dgs3
359 h2n = cdam(i,2,1)*dgs1 + cdam(i,2,2)*dgs2 + cdam(i,2,3)*dgs3
360 h3n = cdam(i,3,1)*dgs1 + cdam(i,3,2)*dgs2 + cdam(i,3,3)*dgs3
365 hh= dfs1*h1n+dfs2*h2n+dfs3*h3n+dfs4*h4n+dfs5*h5n+dfs6*h6n
368 lambda= h1a*deps1(i)+h2a*deps2(i)+h3a*deps3(i)
369 . +h4a*deps4(i)+h5a*deps5(i)+h6a*deps6(i)
373 lambda=
max(lambda,zero)
382 depsvp=depsp1+depsp2+depsp3
383 epsvp(i)=epsvp(i)+
min(zero,depsvp)
386 depsel1=deps1(i)-depsp1
387 depsel2=deps2(i)-depsp2
388 depsel3=deps3(i)-depsp3
389 depsel4=deps4(i)-depsp4
390 depsel5=deps5(i)-depsp5
391 depsel6=deps6(i)-depsp6
416 crak(i,1) =crak(i,1)+depsel1
417 crak(i,2) =crak(i,2)+depsel2
418 crak(i,3) =crak(i,3)+depsel3
420 de1(i)=one -
max( zero , sign(dam(i,1),crak(i,1)) )
421 de2(i)=one -
max( zero , sign(dam(i,2),crak(i,2)) )
422 de3(i)=one -
max( zero , sign(dam(i,3),crak(i,3)) )
423 scal1(i)=half+sign(half,de1(i)-one)
424 scal2(i)=half+sign(half,de2(i)-one)
425 scal3(i)=half+sign(half,de3(i)-one)
426 de4(i)=scal1(i)*scal2(i)
427 de5(i)=scal2(i)*scal3(i)
428 de6(i)=scal3(i)*scal1(i)
430 den = one - nu**2 *(de4(i) + de5(i) + de6(i)
431 . + two*nu*scal1(i)*scal2(i)*scal3(i))
433 cdam(i,1,1) = young*de1(i)*(one-nu**2*scal2(i)*scal3(i))/den
434 cdam(i,2,2) = young*de2(i)*(one -nu**2*scal1(i)*scal3(i))/den
435 cdam(i,3,3) = young*de3(i)*(one -nu**2*scal2(i)*scal1(i))/den
436 cdam(i,1,2) = nu*young*scal1(i)*scal2(i) *(one+nu*scal3(i))/den
437 cdam(i,2,3) = nu*young*scal2(i)*scal3(i) *(one+nu*scal1(i))/den
438 cdam(i,1,3) = nu*young*scal1(i)*scal3(i) *(one+nu*scal2(i))/den
439 cdam(i,2,1) = cdam(i,1,2)
440 cdam(i,3,1) = cdam(i,1,3)
441 cdam(i,3,2) = cdam(i,2,3)
442 sig(i,1) = cdam(i,1,1)*crak(i,1)+cdam(i,1,2)*crak(i,2)+cdam(i,1,3)*crak(i,3)
443 sig(i,2) = cdam(i,2,1)*crak(i,1)+cdam(i,2,2)*crak(i,2)+cdam(i,2,3)*crak(i,3)
444 sig(i,3) = cdam(i,3,1)*crak(i,1)+cdam(i,3,2)*crak(i,2)+cdam(i,3,3)*crak(i,3)
445 sig(i,4) = (sig(i,4)+c44(i)*depsel4)*de4(i)
446 sig(i,5) = (sig(i,5)+c55(i)*depsel5)*de5(i)
447 sig(i,6) = (sig(i,6)+c66(i)*depsel6)*de6(i)
452 s1(i) = scal1(i)*sig(i,1)
453 s2(i) = scal2(i)*sig(i,2)
454 s3(i) = scal3(i)*sig(i,3)
455 s4(i) = sig(i,4)*scal1(i)*scal2(i)
456 s5(i) = sig(i,5)*scal2(i)*scal3(i)
457 s6(i) = sig(i,6)*scal3(i)*scal1(i)
458 sm(i) = third * (s1(i)+s2(i)+s3(i))
468 . sm(i)=sm(i)-three*(sm(i)-ac/aa)/(scal1(i)+scal2(i)+scal3(i))
470 r2 = s1(i)**2 + s2(i)**2 + s3(i)**2
471 . +(s4(i)**2 + s5(i)**2 + s6(i)**2)*two
474 . - s1(i)*s5(i)*s5(i) - s2(i)*s6(i)*s6(i) - s3(i)*s4(i)*s4(i)
475 . + two*s4(i)*s5(i)*s6(i)
476 cs3t= half * aj3*(three/half*
max(r2,em20))**three_half
479 bb = half*((one-cs3t)*bc + (one+cs3t)*bt)
480 df = sqrt(bb*bb +
max(-aa*sm(i)+ac, zero))
490 IF (vk(i) > one)
THEN
492 IF (scal1(i) > zep9) sig(i,1) = s1(i)*fac+sm(i)
493 IF (scal2(i) > zep9) sig(i,2) = s2(i)*fac+sm(i)
494 IF (scal3(i) > zep9) sig(i,3) = s3(i)*fac+sm(i)
495 IF (scal1(i)*scal2(i) > zep9) sig(i,4) = s4(i)*fac
496 IF (scal2(i)*scal3(i) > zep9) sig(i,5) = s5(i)*fac
497 IF (scal3(i)*scal1(i) > zep9) sig(i,6) = s6(i)*fac
499 c11 = one/de1(i)/young
500 c12 = -nu*scal1(i)*scal2(i)/young
501 c13 = -nu*scal1(i)*scal3(i)/young
502 crak(i,1) = c11*sig(i,1)+c12*sig(i,2)+c13*sig(i,3)
503 c22 = one/de2(i)/young
504 c23 = -nu*scal2(i)*scal3(i)/young
505 crak(i,2) = c12*sig(i,1)+c22*sig(i,2)+c23*sig(i,3)
506 c33 = one/de3(i)/young
507 crak(i,3) = c13*sig(i,1)+c23*sig(i,2)+c33*sig(i,3)
509 de1(i)=one -
max( zero , sign(dam(i,1),crak(i,1)) )
510 de2(i)=one -
max( zero , sign(dam(i,2),crak(i,2)) )
511 de3(i)=one -
max( zero , sign(dam(i,3),crak(i,3)) )
512 scal1(i)=half + sign(half,de1(i)-one)
513 scal2(i)=half + sign(half,de2(i)-one)
514 scal3(i)=half + sign(half,de3(i)-one)
515 de4(i)=scal1(i)*scal2(i)
516 de5(i)=scal2(i)*scal3(i)
517 de6(i)=scal3(i)*scal1(i)
519 den = one - nu**2 *(de4(i) + de5(i) + de6(i)
520 . + two*nu*scal1(i)*scal2(i)*scal3(i))
522 cdam(i,1,1) = young*de1(i)*(one -nu**2*scal2(i)*scal3(i))/den
523 cdam(i,2,2) = young*de2(i)*(one -nu**2*scal1(i)*scal3(i))/den
525 cdam(i,1,2) = nu*young*scal1(i)*scal2(i) *(one +nu*scal3(i))/den
526 cdam(i,2,3) = nu*young*scal2(i)*scal3(i) *(one +nu*scal1(i))/den
527 cdam(i,1,3) = nu*young*scal1(i)*scal3(i) *(one +nu*scal2(i))/den
528 cdam(i,2,1) = cdam(i,1,2)
529 cdam(i,3,1) = cdam(i,1,3)
531 sig(i,1)=cdam(i,1,1)*crak(i,1)+cdam(i,1,2)*crak(i,2)+cdam(i,1,3)*crak(i,3)
532 sig(i,2)=cdam(i,2,1)*crak(i,1)+cdam(i,2,2)*crak(i,2)+cdam(i,2,3)*crak(i,3)
533 sig(i,3)=cdam(i,3,1)*crak(i,1)+cdam(i,3,2)*crak(i,2)+cdam(i,3,3)*crak(i,3)
534 sig(i,4)=de4(i)*sig(i,4)
535 sig(i,5)=de5(i)*sig(i,5)
536 sig(i,6)=de6(i)*sig(i,6)
539 rob(i) =
min(rob(i), rob(i)+hpv*depsvp, sm(i))
540 rok = rob(i) - ro0 + rok0
542 IF (sm(i) >= rt-tol
THEN
544 ELSEIF(sm(i) > rc)
THEN
545 div=
min(-em10,rct1- two*rc*sm(i)+sm(i)*sm(i) )
546 vkk=one +(one - vk(i))*rct2/div
547 ELSEIF(sm(i)>=rok)
THEN
551 vkmax=one- ((sm(i)-rok)/(rob(i)-rok))**2
552 IF (vk(i)>vkmax)
THEN
553 rok = sm(i) - sqrt(one-vk(i))*(ro0-rok0)
554 rob(i) = rok+ro0-rok0
558 vkk = vk(i)/
max(vkmax,em03)
562 vk0(i)=
max(vkk,vk0(i))
567 depsv = (deps1(i) + deps2(i) + deps3(i))
568 d1 = deps1(i) - depsv*third
569 d2 = deps2(i) - depsv*third
570 d3 = deps3(i) - depsv*third
571 hpv = hv0*
max(one, exp(expo*epsvp(i)))
572 depsvp = bulk/(bulk+hpv)*depsv
573 epsvp(i)= epsvp(i) + depsvp
574 ro =
min( rob(i),rob(i) + hpv*depsvp )
576 sig(i,1) = sig(i,1) + dp + two*g*d1
577 sig(i,2) = sig(i,2) + dp + two*g*d2
578 sig(i,3) = sig(i,3) + dp + two*g*d3
579 sig(i,4) = sig(i,4) + g*deps4(i)
580 sig(i,5) = sig(i,5) + g*deps5(i)
581 sig(i,6) = sig(i,6) + g*deps6(i)
587 r2 = (s1(i)**2 + s2(i)**2 + s3(i)**2
588 . + (s4(i)**2 + s5(i)**2 + s6(i)**2)*two)*three_half
589 sigm = sig(i,1) + sig(i,2) + sig(i,2)
591 IF (r2 > zero) rr = rr +
alpha*sigm/sqrt(r2)
593 pla(i,1) = pla(i,1) + lambda * rr
597 pla(i,2) = pla(i,2) + lambda*dgs1
598 pla(i,3) = pla(i,3) + lambda*dgs2
599 pla(i,4) = pla(i,4) + lambda*dgs3
600 pla(i,5) = pla(i,5) + lambda*dgs4
601 pla(i,6) = pla(i,6) + lambda*dgs5
602 pla(i,7) = pla(i,7) + lambda*dgs6