31 1 NEL ,NUPARAM ,NUVAR ,UPARAM ,UVAR ,
32 2 EPSXX ,EPSYY ,RHO ,PLA ,DPLA ,
33 3 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
34 4 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
35 5 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
36 6 THK ,THKLY ,OFF ,SIGY ,ETSE ,
37 7 DMG ,SEQ ,EPSPL ,SHF ,SOUNDSP ,
38 8 NFUNC ,IFUNC ,NPF ,TF ,NVARTMP ,
43#include "implicit_f.inc"
47#include "tabsiz_c.inc"
52 INTEGER,
INTENT(IN) :: NEL,NUPARAM,NUVAR,
53 . NFUNC,IFUNC(),NPF(SNPC),NVARTMP
55 . UPARAM(NUPARAM),TF(STF)
56 my_real,
DIMENSION(NEL),
INTENT(IN) ::
58 . DEPSXX,DEPSYY,DEPSXY,DEPSYZ,DEPSZX,
59 . SIGOXX,SIGOYY,SIGOXY,,SIGOZX,
61 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
62 . soundsp,signxx,signyy,signxy,signyz,signzx,
64 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
65 . pla,thk,off,seq,dpla
66 my_real,
DIMENSION(NEL,6),
INTENT(INOUT) ::
68 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
70 INTEGER,
DIMENSION(NEL,NVARTMP),
INTENT(INOUT) :: VARTMP
75 . i,ii,j,niter,iter,nindx,index(nel),
76 . ish,itr,ires,ibuck,icomp,ltype11,ltype12,
77 . ltyper0,ipos(nel),ilen(nel),iad(nel)
79 . e10,e20,e30,nu12,nu21,nu23,nu32,nu13,nu31,
80 . g120,g23,g31,e1c,gamma,sigy0,beta,m,a,efti0,
81 . eftu0,dftu,efci0,efcu0,dfcu,dsat1,y00,yc0,b,
82 . dmax,yr,ysp,dsat2,y0p0,ycp0,dsat2c,y0pc0,ycpc0,
83 . epsd11,d11,n11,d11u,n11u,epsd12,d22,n22,d12,
86 . ddep,dfdsig2,dlam,normyy,normxy,sig_dfdsig,
87 . h(nel),dpyy(nel),dpzz(nel),dpxy(nel),
88 . phi(nel),dezz(nel),dpla_dlam(nel),dphi_dlam(nel),
89 . deelzz(nel),dydx(nel),a11(nel),a22(nel),a12(nel),
90 . dft(nel),dfc(nel),e1(nel),e2(nel),epsf_eq,zd(nel),
91 . zdp(nel),y(nel),yp(nel),d(nel),dp(nel),df(nel),
92 . g12(nel),efti(nel),eftu(nel),efci(nel),efcu(nel),
93 . f11(nel),f22(nel),f12(nel),f11r(nel),fr0(nel),
94 . y0(nel),yc(nel),y0p(nel),ycp(nel),y0pc(nel),ycpc(nel),
95 . var(nel),dpt(nel),dptc(nel),epspyy(nel)
115 ish = nint(uparam(15))
116 itr = nint(uparam(16))
117 ires = nint(uparam(17))
128 ibuck = nint(uparam(28))
155 ltype11 = nint(uparam(55))
156 ltype12 = nint(uparam(56))
157 ltyper0 = nint(uparam(57))
161 IF (y0pc0 > zero) icomp = 1
166 IF (off(i) < one) off(i) = four_over_5*off(i)
167 IF (off(i) < em01) off(i) = zero
184 epspyy(i) = uvar(i,16)
190 IF (ltype11 == 1)
THEN
191 f11(i) = d11*(abs(epspl(i))/epsd11)**n11
192 ELSEIF (ltype11 == 2)
THEN
193 f11(i) = d11*(abs(epspl(i))/epsd11) + n11
194 ELSEIF (ltype11 == 3)
THEN
195 f11(i) = d11*log(
max(abs(epspl(i))/epsd11,one)) + log(n11)
196 ELSEIF (ltype11 == 4)
THEN
197 f11(i) = d11*tanh(n11*(
max(abs(epspl(i))-epsd11,zero)))
200 IF (ltype12 == 1)
THEN
201 f22(i) = d22*(abs(epspl(i))/epsd12)**n22
202 ELSEIF (ltype12 == 2)
THEN
203 f22(i) = d22*(abs(epspl(i))/epsd12) + n22
204 ELSEIF (ltype12 == 3)
THEN
205 f22(i) = d22*log(
max(abs(epspl(i))/epsd12,one)) + log(n22)
206 ELSEIF (ltype12 == 4)
THEN
207 f22(i) = d22*tanh(n22*(
max(abs(epspl(i))-epsd12,zero)))
210 IF (ltype12 == 1)
THEN
211 f12(i) = d12*(abs(epspl(i))/epsd12)**n12
212 ELSEIF (ltype12 == 2)
THEN
213 f12(i) = d12*(abs(epspl(i))/epsd12) + n12
214 ELSEIF (ltype12 == 3)
THEN
215 f12(i) = d12*log(
max(abs(epspl(i))/epsd12,one)) + log(n12)
216 ELSEIF (ltype12 == 4)
THEN
217 f12(i) = d12*tanh(n12*(
max(abs(epspl(i))-epsd12,zero)))
220 IF (ltype11 == 1)
THEN
221 f11r(i) = d11u*(abs(epspl(i))/epsd11)**n11u
222 ELSEIF (ltype11 == 2)
THEN
223 f11r(i) = d11u*(abs(epspl(i))/epsd11) + n11u
224 ELSEIF (ltype11 == 3)
THEN
225 f11r(i) = d11u*log(
max(abs(epspl(i))/epsd11,one)) + log(n11u)
226 ELSEIF (ltype11 == 4)
THEN
227 f11r(i) = d11u*tanh(n11u*(
max(abs(epspl(i))-epsd11,zero)))
230 IF (ltyper0 == 1)
THEN
231 fr0(i) = dr0*(abs(epspl(i))/epsdr0)**nr0
232 ELSEIF (ltyper0 == 2)
THEN
234 ELSEIF (ltyper0 == 3)
THEN
235 fr0(i) = dr0*log(
max(abs(epspl(i))/epsdr0,one)) + log(nr0)
236 ELSEIF (ltyper0 == 4)
THEN
237 fr0(i) = dr0*tanh(nr0*(
max(abs(epspl(i))-epsdr0,zero)))
245 IF (epsxx(i) >= zero)
THEN
249 e1(i) = e1c/(one + (gamma*e1c*abs(epsxx(i))))
251 e1(i) = e1(i)*(one + f11(i))
253 e2(i) = e20*(one + f22(i))
255 g12(i) = g120*(one + f12(i))
256 ! plane stress stiffness matrix terms
257 a11(i) = e1(i)/(one - nu12*nu21)
259 a22(i) = e2(i)/(one - nu12*nu21)
261 sigy(i) = sigy0*(one + fr0(i)) + beta*exp(m*log(pla(i)+em20))
264 IF (uvar(i,3) == zero) efti(i) = efti0*(one + f11r(i))
266 IF (uvar(i,4) == zero) eftu(i) = eftu0*(one + f11r(i))
268 IF (uvar(i,5) == zero) efci(i) = efci0*(one + f11r(i))
270 IF (uvar(i,6) == zero) efcu(i) = efcu0*(one + f11r(i))
273 IF (uvar(i,7) == zero) y0(i) = y00*sqrt(one + f12(i))
275 IF (uvar(i,8) == zero) yc(i) = yc0*sqrt(one + f12(i))
277 IF (uvar(i,9) == zero) y0p(i) = y0p0*sqrt(one + f22(i))
279 IF (uvar(i,10) == zero) ycp(i) = ycp0*sqrt(one + f22(i))
281 IF (uvar(i,11) == zero) y0pc(i) = y0pc0*sqrt(one + f22(i))
283 IF (uvar(i,12) == zero) ycpc(i) = ycpc0*sqrt(one + f22(i))
292 signyy(i) = sigoyy(i)/
max((one-dp(i)),em20) + a12(i)*depsxx(i) + a22(i)*depsyy(i)
293 signxy(i) = sigoxy(i)/
max((one- d(i)),em20) + g12(i)*depsxy(i)
294 signyz(i) = sigoyz(i)/
max(
min(one-d(i),one-dp(i)),em20) + g23*depsyz
295 signzx(i) = sigozx(i)/
max(
min(one-d(i),one-dp(i)),em20) + g31*depszx(i)*shf(i)
298 seq(i) = sqrt((signxy(i))**2 + a*(signyy(i))**2)
305 phi(1:nel) = seq(1:nel) - sigy(1:nel)
310 IF ((phi(i)>zero).AND.(off(i) == one))
THEN
325#include "vectorize.inc"
340 normyy = a*signyy(i)/
max(seq(i),em20)
341 normxy = signxy(i)/
max(seq(i),em20)
348 dfdsig2 = normyy*normyy*a22(i) + normxy*normxy*g12(i)
355 h(i) = beta*m*exp((m-1)*log(pla(i)+em20))
356 h(i) =
min(h(i),
max(two*g120,e20))
360 sig_dfdsig = signyy(i)*normyy + signxy(i)*normxy
361 dpla_dlam(i) = sig_dfdsig/
max(sigy(i),em20)
363 ! 3 - computation of plastic multiplier and variables update
367 dphi_dlam(i) = - dfdsig2 - h(i)*dpla_dlam(i)
368 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20),dphi_dlam(i))
371 dlam = -phi(i)/dphi_dlam(i)
374 dpyy(i) = dlam*normyy
375 dpxy(i) = dlam*normxy
378 epspyy(i) = epspyy(i) + dpyy(i)
381 signyy(i) = signyy(i) - a22(i)*dpyy(i)
382 signxy(i) = signxy(i) - dpxy(i)*g12(i)
385 ddep = dlam*dpla_dlam(i)
386 dpla(i) =
max(zero, dpla(i) + ddep)
387 pla(i) = pla(i) + ddep
390 seq(i) = sqrt((signxy(i
393 dpzz(i) = dpzz(i) - dpyy(i)
396 sigy(i) = sigy(i) + h(i)*dlam*dpla_dlam(i)
399 phi(i) = seq(i) - sigy(i)
418 epsf_eq = epsxx(i) + nu21*(epsyy(i)-epspyy(i))
420 IF (epsf_eq >= zero)
THEN
421 IF (epsf_eq < efti(i))
THEN
422 dft(i) =
max(zero,dft(i))
423 ELSEIF ((epsf_eq >= efti(i)).AND.(epsf_eq < eftu(i)))
THEN
424 dft(i) =
max(dftu*((epsf_eq-efti(i))/(eftu(i)-efti(i))),dft(i))
426 IF (uvar(i,3) == zero) uvar(i,3) = efti(i)
427 IF (uvar(i,4) == zero) uvar(i,4) = eftu(i)
428 ELSEIF (epsf_eq >= eftu(i))
THEN
429 dft(i) =
max(one - (one - dftu)*(eftu(i)/epsf_eq),dft(i))
431 dft(i) =
max(dft(i),zero)
432 dft(i) =
min(dft(i),one)
435 ELSEIF ((epsf_eq < zero).AND.(ibuck > 1))
THEN
436 IF (abs(epsf_eq) < efci(i))
THEN
437 dfc(i) =
max(zero,dfc(i))
438 ELSEIF ((abs(epsf_eq) >= efci(i)).AND.(abs(epsf_eq) < efcu(i)))
THEN
439 dfc(i) =
max(dfcu*((abs(epsf_eq)-efci(i))/(efcu(i)-efci(i))),dfc(i))
441 IF (uvar(i,5) == zero) uvar(i,5) = efci(i)
442 IF (uvar(i,6) == zero) uvar(i,6) = efcu(i)
443 ELSEIF (abs(epsf_eq) >= efcu(i))
THEN
444 dfc(i) =
max(one - (one - dfcu)*(efcu(i)/abs(epsf_eq)),dfc(i))
446 dfc(i) =
max(dfc(i),zero)
447 dfc(i) =
min(dfc(i),one)
454 zd(i) = half*((signxy(i)**2/g120) + (signzx(i)**2/g31))
457 zdp(i) = half*((signyy(i)**2)/e20)
460 zdp(i) = half*(((
max(signyy(i),zero))**2)/e20)
463 y(i) =
max(y(i) ,sqrt(zd(i)+b*zdp(i)))
464 yp(i) =
max(yp(i),sqrt(zdp(i)))
473 ELSEIF ((d(i)<dmax).AND.(y(i)<ysp).AND.(y(i)<yr))
THEN
474 d(i) =
max(y(i)-y0(i),zero)/
max(yc(i),em20)
475 d(i) =
min(d(i),dmax)
477 IF (uvar(i,7) == zero) uvar(i,7) = y0(i)
478 IF (uvar(i,8) == zero) uvar(i,8) = yc(i)
480 d(i) = one - (one - dmax)*uvar(i,1)/
max(y(i),em20)
482 d(i) =
max(d(i),zero)
483 d(i) =
min(d(i), one)
486 ELSEIF (ish == 2)
THEN
489 d(i) = dsat1*(one - exp((y0(i)-y(i))/
max(yc(i),em20)))
491 IF (uvar(i,7) == zero) uvar(i,7) = y0(i)
492 IF (uvar(i,8) == zero) uvar(i,8) = yc(i)
496 d(i) =
max(d(i),zero)
497 d(i) =
min(d(i), one)
500 ELSEIF (ish == 3)
THEN
501 ipos(1:nel) = vartmp(1:nel,1)
502 iad(1:nel) = npf(ifunc(1)) / 2 + 1
503 ilen(1:nel) = npf(ifunc(1)+1) / 2 - iad(1:nel) - ipos(1:nel)
507 CALL vinter(tf,iad,ipos,ilen,nel,var,dydx,d)
508 vartmp(1:nel,1) = ipos(1:nel)
511 IF (uvar(i,7) == zero .AND. d(i) /= zero) uvar(i,7) = y0(i)
513 d(i) =
min(d(i), one)
522 IF ((icomp > 0).AND.(epsyy(i)<zero))
THEN
523 IF (yp(i)<y0pc(i))
THEN
525 ELSEIF ((dp(i)<dmax).AND.(yp(i)<ysp).AND.(yp(i)<yr))
THEN
527 dp(i) =
min(dp(i),dmax)
529 IF (uvar(i,11) == zero) uvar(i,11) = y0pc(i)
530 IF (uvar(i,12) == zero) uvar(i,12) = ycpc(i)
532 dp(i) = one - (one - dmax)*uvar(i,2)/
max(yp(i),em20)
536 IF (yp(i)<y0p(i))
THEN
538 ELSEIF ((dp(i)<dmax).AND.(yp(i)<ysp).AND.(yp(i)<yr))
THEN
539 dp(i) =
max(yp(i)-y0p(i),zero)/
max(ycp(i),em20)
540 dp(i) =
min(dp(i),dmax)
542 IF (uvar(i,9) == zero) uvar(i,9) = y0p(i)
543 IF (uvar(i,10) == zero) uvar(i,10) = ycp(i)
545 dp(i) = one - (one - dmax)*uvar(i,2)/
max(yp(i),em20)
548 dp(i) =
max(dp(i),zero)
549 dp(i) =
min(dp(i), one)
552 ELSEIF (itr == 2)
THEN
555 IF ((icomp > 0).AND.(epsyy(i)<zero))
THEN
556 IF (yp(i)>y0pc(i))
THEN
557 dp(i) = dsat2c*(one - exp((y0pc(i)-yp(i))/
max(ycpc(i),em20)))
559 IF (uvar(i,11) == zero) uvar(i,11) = y0pc(i)
560 IF (uvar(i,12) == zero) uvar(i,12) = ycpc(i)
566 IF (yp(i)>y0p(i))
THEN
567 dp(i) = dsat2*(one - exp((y0p(i)-yp(i))/
max(ycp(i),em20)))
568 !
Save damage threshold in
case of strain rate dependency
569 IF (uvar(i,9) == zero) uvar(i,9) = y0p(i)
570 IF (uvar(i,10) == zero) uvar(i,10) = ycp(i)
575 dp(i) =
max(dp(i),zero)
576 dp(i) =
min(dp(i), one)
579 ELSEIF (itr == 3)
THEN
582 ipos(1:nel) = vartmp(1:nel,3)
583 iad(1:nel) = npf(ifunc(3)) / 2 + 1
584 ilen(1:nel) = npf(ifunc(3)+1) / 2 - iad(1:nel) - ipos(1:nel)
586 var(i) = yp(i)/y0pc(i)
588 CALL vinter(tf,iad,ipos,ilen,nel,var,dydx,dptc)
589 vartmp(1:nel,3) = ipos(1:nel)
592 ipos(1:nel) = vartmp(1:nel,2)
593 iad(1:nel) = npf(ifunc(2)) / 2 + 1
594 ilen(1:nel) = npf(ifunc(2)+1) / 2 - iad(1:nel) - ipos(1:nel)
596 var(i) = yp(i)/y0p(i)
598 CALL vinter(tf,iad,ipos,ilen,nel,var,dydx,dpt)
599 vartmp(1:nel,2) = ipos(1:nel)
602 IF ((icomp > 0).AND.(epsyy(i)<zero))
THEN
604 !
Save damage threshold in
case of strain rate dependency
605 IF ((uvar(i,11) == zero) .AND. (dp(i) /= zero)) uvar(i,11) = y0pc(i)
610 IF ((uvar(i,9) == zero) .AND. (dp(i) /= zero)) uvar(i,9) = y0p(i)
612 dp(i) =
max(dp(i),zero
613 dp(i) =
min(dp(i), one)
620 soundsp(i) = sqrt(
max(a11(i),a22(i))/rho(i))
623 a11(i) = a11(i)*(one - df(i))
624 a12(i) = nu21*a11(i)*(one - dp(i))
625 a22(i) = a22(i)*(one - dp(i))
630 IF (gamma > zero .AND. epsxx(i) < zero)
THEN
631 signxx(i) = -(one/gamma)*log(one + gamma*e1c*abs(epsxx(i)))*(one - df(i))*(one + f11(i))
634 signxx(i) = a11(i)*epsxx(i)
636 signxx(i) = signxx(i) + a12(i)*(epsyy(i) - epspyy(i))
637 signyy(i) = a12(i)*epsxx(i) + a22(i)*(epsyy(i) - epspyy(i))
638 signxy(i) = signxy(i)*(one - d(i))
639 signyz(i) = signyz(i)*
min(one - d(i),one - dp(i))
640 signzx(i) = signzx(i)*
min(one - d(i),one - dp(i))
644 dmg(i,1) =
max(df(i),d(i),dp(i))
652 uvar(i,16) = epspyy(i)
660 IF (dpla(i)>zero)
THEN
661 etse(i) = h(i) / (h(i) +
max(e1(i),e2(i)))
666 deelzz(i) = -(nu13/e1(i))*(signxx(i)-sigoxx(i))-(nu23/e2(i))*(signyy(i
667 dezz(i) = deelzz(i) + dpzz(i)
668 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)