34 $ SIGNXY, SIGNYZ, SIGNZX,
39 $ FISOKIN, VARTMP, PLA0,
41 $ IPFLAG, PFUN, IPFUN, IPOSP,
42 $ NRATE, NPF, IADP, ILENP,
43 $ PFAC, PSCALE1, DFDP, FAIL ,
45 B SIGBXX,SIGBYY,SIGBZZ,SIGBXY,SIGBYZ,SIGBZX)
105#include "implicit_f.inc"
109#include "mvsiz_p.inc"
113#include "parit_c.inc"
114#include "scr05_c.inc"
115#include "units_c.inc"
121 INTEGER IAD1(MVSIZ), ILEN1(MVSIZ),
122 . IPFLAG, PFUN, IPFUN, IPOSP(MVSIZ),
123 . IADP(MVSIZ), ILENP(MVSIZ), NRATE, NPF(*)
124 INTEGER :: VARTMP(NEL,NVARTMP)
128 . SIGNXX(*), (*), SIGNZZ(*),
129 . SIGNXY(*), SIGNYZ(*), SIGNZX(*),
130 . PLA(*), G3(*), YLD(*),
132 . tf(*), y1(*), dydx1(*),
134 . pla0(mvsiz), plam(mvsiz),
136 . pfac(mvsiz), pscale1(mvsiz), dfdp(mvsiz),
139 . sigbxx(nel),sigbyy(nel),sigbzz(nel),sigbxy(nel),sigbyz(nel),sigbzx(nel)
144 INTEGER I, II, ITER, NITER, I_BILIN, IPOS
148 . XSI, DXSI, LHS, RHS, ALPHA_RADIAL, VM, HEP, R, DPLA,
149 . YLD_CURR, YLD_PREV, , H_M, P_SCAL, Y_SCAL,
150 . total_scal, yld_m_prev, h_m_prev,
151 . sxx, syy, szz, sxy, syz, szx
180 IF (ipflag == nel.AND.(iparit == 0))
THEN
182 iposp(i) = vartmp(i,2)
183 iadp(i) = npf(ipfun) / 2 + 1
184 ilenp(i) = npf(ipfun + 1) / 2 - iadp(i) - iposp(i)
187 CALL vinter2dp(tf,iadp,iposp,ilenp,nel,pscale1,dfdp,pfac)
189 CALL vinter2(tf,iadp,iposp,ilenp,nel,pscale1,dfdp,pfac)
191 pfac(i) =
max(zero, pfac(i))
192 ELSEIF (ipflag > 0)
THEN
195 iposp(i) = vartmp(i,2)
196 iadp(i) = npf(ipfun) / 2 + 1
197 ilenp(i) = npf(ipfun + 1) / 2 - iadp(i) - iposp(i)
198 pfac(i) = finter2(tf ,iadp(i),iposp(i),ilenp(i),
199 . pscale1(i),dfdp(i))
200 pfac(i) =
max(zero, pfac(i))
212 plam(i) = (one - fisokin) * pla(i)
220 yld(i) = finter2( tf, iad1(i), ipos, ilen1(i),
223 yld(i) =
max(yld(i),em20)
241 pla(i) =
max(zero, pla(i))
244 vm =three*(half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
245 $ +signxy(i)**2+signyz(i)**2+signzx(i)**2)
252 IF( vm > yld(i) )
then
259 p_scal = pfac(i) * fail(i)
262 total_scal = y_scal * p_scal
274 yld_m_prev = finter2( tf, iad1(i), ipos, ilen1(i),
281 yld_m_prev = yld_m_prev * total_scal
282 h_m_prev = h_m_prev * total_scal
283 yld_m_prev =
max(yld_m_prev,em20)
285 if( .not.( h_m_prev >= zero ).or.
286 $ .not.( yld_m_prev > zero ) )
then
287 write(istdo,1000)plam(i),h_m_prev,yld_m_prev
288 write(iout,1000)plam(i),h_m_prev,yld_m_prev
300 yld_prev = finter2( tf, iad1(i), ipos, ilen1(i),
304 yld_prev = yld_prev * total_scal
305 yld_prev =
max(yld_prev,em20)
308 if( .not.( dydx1(i) >= zero ).or.
309 $ .not.( yld_prev > zero ) )
then
310 write(istdo,1000)pla0(i),dydx1(i),yld_prev
311 write(iout,1000)pla0(i),dydx1(i),yld_prev
333 yld_curr = finter2( tf,iad1(i), ipos, ilen1(i),
340 yld_curr = yld_curr * total_scal
341 h(i) = h(i) * total_scal
342 yld_curr =
max(yld_curr,em20)
345 if( .not.( h(i) >= zero ).or.
346 $ .not.( yld_curr > zero ) )
then
347 write(istdo,1000)pla(i),h(i),yld_curr
348 write(iout,1000)pla(i),h(i),yld_curr
357 IF(fisokin == zero)
then
358 rhs = vm - g3(i) * xsi - yld_curr
360 ELSEIF(fisokin == one)
then
361 rhs = vm - g3(i)*xsi + yld_prev - yld_curr - yld_m_prev
364 rhs = vm - g3(i)*xsi + yld_prev - yld_curr - yld_m_prev
376 pla(i) = pla(i) + dxsi
377 pla(i) =
max(zero,pla(i))
381 IF( abs(dxsi)<em10 )
GO TO 90
399 IF(fisokin == zero)
then
400 alpha_radial = one - ( g3(i)/
max(vm,em20) )*dpla
402 signxx(i) = signxx(i) * alpha_radial
403 signyy(i) = signyy(i) * alpha_radial
404 signzz(i) = signzz(i) * alpha_radial
405 signxy(i) = signxy(i) * alpha_radial
406 signyz(i) = signyz(i) * alpha_radial
407 signzx(i) = signzx(i) * alpha_radial
409 ELSEIF(fisokin > zero.and.fisokin<=one)
then
412 plam(i) = (one - fisokin)*pla(i)
425 yld_m = finter2( tf, iad1(i), ipos, ilen1(i),
431 yld_m = yld_m * total_scal
432 h_m = h_m * total_scal
433 yld_m =
max(yld_m,em20)
436 if( .not.( h_m >= zero ).or.
437 $ .not.( yld_m > zero ) )
then
438 write(istdo,1000)plam(i),h_m,yld_m
439 write(iout,1000)plam(i),h_m,yld_m
449 alpha_radial = one - ( g3(i)/
max(vm,em20) )*dpla
450 $ - (yld_curr - yld_prev -yld_m + yld_m_prev )/
max(vm,em20)
452 signxx(i) = signxx(i) * alpha_radial
453 signyy(i) = signyy(i) * alpha_radial
454 signzz(i) = signzz(i) * alpha_radial
455 signxy(i) = signxy(i) * alpha_radial
456 signyz(i) = signyz(i) * alpha_radial
457 signzx(i) = signzx(i) * alpha_radial
460 hep = ( yld_curr - yld_prev
461 $ -yld_m + yld_m_prev )/
max(vm,em20)
463 sigbxx(i) = sigbxx(i) + sxx *hep
464 sigbyy(i) = sigbyy(i) + syy *hep
465 sigbzz(i) = sigbzz(i) + szz *hep
466 sigbxy(i) = sigbxy(i) + sxy *hep
467 sigbyz(i) = sigbyz(i) + syz *hep
468 sigbzx(i) = sigbzx(i) + szx *hep
471 signxx(i) = signxx(i) + sigbxx(i)
472 signyy(i) = signyy(i) + sigbyy(i)
473 signzz(i) = signzz(i) + sigbzz(i)
474 signxy(i) = signxy(i) + sigbxy(i)
475 signyz(i) = signyz(i) + sigbyz(i)
476 signzx(i) = signzx(i) + sigbzx(i)
482 IF(fisokin == zero)
then
484 ELSEIF(fisokin == one)
then
500 IF(fisokin > zero)
then
501 signxx(i) = signxx(i) + sigbxx(i)
502 signyy(i) = signyy(i) + sigbyy(i)
503 signzz(i) = signzz(i) + sigbzz(i)
504 signxy(i) = signxy(i) + sigbxy(i)
505 signyz(i) = signyz(i) + sigbyz(i)
506 signzx(i) = signzx(i) + sigbzx(i)
519 vm =three*(half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
520 $ +signxy(i)**2+signyz(i)**2+signzx(i)**2)
522 IF(vm > yld(i)*yld(i))
THEN
524 r = yld(i)/
max(vm,em20)
526 dpla=(one - r)*vm/
max(g3(i)+h(i),em20)
529 alpha_radial = one - g3(i)*( (one - r)/( g3(i) + h(i) ) )
531 signxx(i) = signxx(i) * alpha_radial
532 signyy(i) = signyy(i) * alpha_radial
533 signzz(i) = signzz(i) * alpha_radial
534 signxy(i) = signxy(i) * alpha_radial
535 signyz(i) = signyz(i) * alpha_radial
536 signzx(i) = signzx(i) * alpha_radial
538 IF(fisokin > zero)
then
541 signxx(i) = signxx(i) + sigbxx(i)
542 signyy(i) = signyy(i) + sigbyy(i)
543 signzz(i) = signzz(i) + sigbzz(i)
544 signxy(i) = signxy(i) + sigbxy(i)
545 signyz(i) = signyz(i) + sigbyz(i)
546 signzx(i) = signzx(i) + sigbzx(i)
549 hep = fisokin*h(i)* dpla/vm
551 sigbxx(i) = sigbxx(i) + sxx *hep
552 sigbyy(i) = sigbyy(i) + syy *hep
553 sigbzz(i) = sigbzz(i) + szz *hep
554 sigbxy(i) = sigbxy(i) + sxy *hep
555 sigbyz(i) = sigbyz(i) + syz *hep
556 sigbzx(i) = sigbzx(i) + szx *hep
561 yld(i) =
max(yld(i)+(one - fisokin)*dpla*h(i),zero)
564 pla(i) = pla(i) + dpla
570 IF(fisokin > zero)
then
572 signxx(i) = signxx(i) + sigbxx(i)
573 signyy(i) = signyy(i) + sigbyy(i)
574 signzz(i) = signzz(i) + sigbzz(i)
575 signxy(i) = signxy(i) + sigbxy(i)
576 signyz(i) = signyz(i) + sigbyz(i)
577 signzx(i) = signzx(i) + sigbzx(i)
587 1000
FORMAT(3x,
'Hardening parameters in law36 is not positive'/,
588 $ 2x,
'Eps_plast =',e11.4,2x,
'H =',e11.4,
subroutine m36iter_imp(signxx, signyy, signzz, signxy, signyz, signzx, pla, yld, g3, yfac, dpla1, h, tf, iad1, ilen1, nel, fisokin, vartmp, pla0, plam, y1, dydx1, ipflag, pfun, ipfun, iposp, nrate, npf, iadp, ilenp, pfac, pscale1, dfdp, fail, nvartmp, sigbxx, sigbyy, sigbzz, sigbxy, sigbyz, sigbzx)