34 1 NEL ,NUPARAM,NUVAR ,MFUNC ,KFUNC ,NPF ,
35 2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,RHO ,
36 3 VOLUME ,EINT ,NVARTMP ,VARTMP ,
37 4 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
38 5 EPSXX ,EPSYY ,EPSZZ ,EPSXY ,EPSYZ ,EPSZX ,
39 6 SIG0XX ,SIG0YY ,SIG0ZZ ,SIG0XY ,SIG0YZ ,SIG0ZX ,
40 7 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
41 8 SIGVXX ,SIGVYY ,SIGVZZ ,SIGVXY ,SIGVYZ ,SIGVZX ,
42 9 SOUNDSP,VISCMAX,UVAR ,OFF ,NGL ,
43 A PM ,IPM ,IMAT ,MATPARAM)
52#include "implicit_f.inc"
101 INTEGER ,
INTENT(IN) :: NVARTMP,IMAT
102 INTEGER ,
INTENT(INOUT) :: VARTMP(,NVARTMP)
103 INTEGER NEL, NUPARAM, NUVAR,IPT,
104 . NGL(NEL),MAT(NEL),IPLA,IPM(NPROPMI,*)
106 . TIME,TIMESTEP,UPARAM(*),
107 . RHO(NEL),RHO0(NEL),VOLUME(NEL),EINT(NEL),
108 . DEPSXX(NEL),DEPSYY(NEL),DEPSZZ(NEL),
109 . DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
110 . EPSXX(NEL) ,EPSYY(NEL) ,EPSZZ(NEL) ,
111 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,
112 . sig0xx(nel),sig0yy(nel),sig0zz(nel),
113 . sig0xy(nel),sig0yz(nel),sig0zx(nel),
115 TYPE(matparam_struct_) ,
INTENT(INOUT) :: MATPARAM
120 . SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
121 . SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
122 . SIGVXX(NEL),SIGVYY(NEL),SIGVZZ(NEL),
123 . SIGVXY(NEL),SIGVYZ(NEL),SIGVZX(NEL),
124 . SOUNDSP(NEL),VISCMAX(NEL)
129 . uvar(nel,nuvar), off(nel), pla(nel)
133 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
148 INTEGER I,J,J1,,I1,I2,II,IADBUF,NC,NFUNC,ILOAD(MVSIZ)
151INTEGER :: NINDEX_EPSSM,NINDEX_EPST
152 INTEGER,
DIMENSION(MVSIZ) :: INDEX_EPSSM,INDEX_EPST
153 my_real R,FAC,E,DELTA,ALPHA,SVM2,P,YFACC,
154 . SVM,INTER_0,EMAX,EPSSMAX,EPS_MAX,DSIG,EXPO,HYS,DE,DF,MU
155 my_real YLDELAS(MVSIZ),YLDMIN(MVSIZ),YLDMAX(MVSIZ),EPSS(MVSIZ),
156 . E0(MVSIZ),G(MVSIZ),NU(MVSIZ),AA1(MVSIZ),AA2(MVSIZ),
157 . EPST(MVSIZ),AA(MVSIZ),RATE(MVSIZ,2),
159 INTEGER,
DIMENSION(NEL) :: IPOS1
160 my_real,
DIMENSION(NEL) :: XVEC1
161 INTEGER,
DIMENSION(NEL,2) :: IPOS
162 my_real,
DIMENSION(NEL,2) :: xvec
163 my_real,
DIMENSION(MVSIZ) :: yld,dfc
171 ifunc(i,j)=ipm(10+j,imat)
175 iadbuf = ipm(7,imat)-1
176 nload = uparam(iadbuf+7)
177 nunload = uparam(iadbuf+8)
178 inter_0 = uparam(2*nfunc + 15)
179 epssmax = uparam(iadbuf+4)
181 e0(i) = uparam(iadbuf+2)
182 aa(i) = uparam(iadbuf+3)
183 g(i) = uparam(iadbuf+5)
184 nu(i) = uparam(iadbuf+6)
185 idamage = uparam(iadbuf+ 2*nfunc + 9)
186 expo = uparam(iadbuf+ 2*nfunc + 10)
187 hys = uparam(iadbuf+ 2*nfunc + 11)
188 emax = uparam(iadbuf+ 2*nfunc + 12)
189 iflag = uparam(iadbuf+ 2*nfunc + 13)
190 yfacc = uparam(iadbuf+ 8 + 2*nfunc )
192 numtabl = matparam%NTABLE
198 epst(i) = epsxx(i)**2+epsyy(i)**2 + epszz(i)**2 +
199 . half*(epsxy(i)**2+epsyz(i)**2+epszx(i)**2)
200 epst(i) = sqrt(epst(i))
201 epst(i) =
min(one, epst(i))
215 IF (epst(i) >= epssmax)
THEN
217 yldelas(i)= yldelas(i) + emax*(epst(i) - epssmax)
218 nindex_epssm = nindex_epssm + 1
219 index_epssm(nindex_epssm) = i
221 nindex_epst = nindex_epst + 1
222 index_epst(nindex_epst) = i
226 IF (nindex_epst > 0)
THEN
227 IF (matparam%TABLE(1)%NDIM == 1)
THEN
230 ipos1(i) = vartmp(i,1)
239 vartmp(i,1) = ipos1(ii)
245 ipos(ii,1) = vartmp(i,1)
248 xvec(ii,2) = uparam(iadbuf + 9)
256 vartmp(i,1) = ipos(ii,1)
265 IF (matparam%TABLE(1)%NDIM == 1)
THEN
267 ipos1(i) = vartmp(i,1)
275 ipos(i,1) = vartmp(i,1)
278 xvec(i,2) = uparam(iadbuf + 9)
287 IF (nunload > 0)
THEN
288 IF (matparam%TABLE(2)%NDIM == 1)
THEN
301 xvec(i,2) = uparam(iadbuf + 9 + nload)
308 yldmin(1:nel) = yldmax(1:nel)
313 alpha = one/
max(em20,uvar(i,10))
314 sig0xx(i) = alpha*sig0xx(i)
315 sig0yy(i) = alpha*sig0yy(i)
316 sig0zz(i) = alpha*sig0zz(i)
317 sig0xy(i) = alpha*sig0xy(i)
318 sig0zx(i) = alpha*sig0zx(i)
319 sig0yz(i) = alpha*sig0yz(i)
327 delta = epst(i) - uvar(i,4)
329 uvar(i,9) = uvar(i,4)
330 IF(delta >= zero)
THEN
333 ELSEIF(delta < zero)
THEN
336 IF(idamage /= 0 )
THEN
341 epss(i) = epst(i) - yld(i)/ e
342 epss(i) =
max(zero, epss(i))
343 de = aa(i)*(epss(i) - uvar(i,1))
345 IF(iload(i) == 1)
THEN
346 e = e +
max(de, zero)
347 IF(iload0 == -1) e= uvar(i,3)
348 uvar(i,1) =
max(uvar(i,1), epss(i))
350 e = e +
min(de ,zero)
351 IF(iload0 == 1) e= uvar(i,3)
352 uvar(i,1) =
min(epss(i),uvar(i,1))
358 aa1(i) = e*(one-nu(i))/(one + nu(i))/(one - two*nu(i))
359 aa2(i) = aa1(i)*nu(i)/(one - nu(i))
360 g(i) =half*e/(one + nu(i))
362 signxx(i)= aa1(i)*depsxx(i) + aa2(i)*(depsyy(i) + depszz(i
363 signyy(i)= aa1(i)*depsyy(i) + aa2(i)*(depsxx(i) + depszz(i))
364 signzz(i)= aa1(i)*depszz(i) + aa2(i)*(depsxx(i) + depsyy(i))
365 signxy(i)= g(i) *depsxy(i)
366 signyz(i)= g(i) *depsyz(i)
367 signzx(i)= g(i) *depszx(i)
368 dsig = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
369 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
372 signxx(i)=sig0xx(i) + aa1(i)*depsxx(i)
373 . + aa2(i)*(depsyy(i) + depszz(i))
374 signyy(i)=sig0yy(i) + aa1(i)*depsyy(i)
375 . + aa2(i)*(depsxx(i) + depszz(i))
376 signzz(i)=sig0zz(i) + aa1(i)*depszz(i)
377 . + aa2(i)*(depsxx(i) + depsyy(i))
378 signxy(i)=sig0xy(i) + g(i) *depsxy(i)
379 signyz(i)=sig0yz(i) + g(i) *depsyz(i)
380 signzx(i)=sig0zx(i) + g(i) *depszx(i)
382 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
383 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
386 soundsp(i) = sqrt(aa1(i)/rho0(i))
389 IF(idamage == 0 )
THEN
390 IF(delta >= zero )
THEN
391 yld(i) =
min(yldmax(i),svm)
392 ELSEIF(delta < zero)
THEN
393 yld(i) =
max(yldmin(i),svm)
394 yld(i) =
min(yld(i),uvar(i,6))
396 IF( dsig > yldmin(i) .AND. dsig > svm)
THEN
403 IF(delta > zero .AND. svm
404 uvar(i,8) = uvar(i,8) +
406 uvar(i,8) =
max(zero, uvar(i,8))
407 uvar(i,2) =
max(uvar(i,2
416 IF(idamage == 0 )
THEN
418 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
419 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
420 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
421 signxy(i)= g(i) *epsxy(i)
422 signyz(i)= g(i) *epsyz(i)
423 signzx(i)= g(i) *epszx(i)
425 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
426 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
428 r = yld(i)/
max(em20,svm)
429 signxx(i)=signxx(i)*r
430 signyy(i)=signyy(i)*r
431 signzz(i)=signzz(i)*r
432 signxy(i)=signxy(i)*r
433 signyz(i)=signyz(i)*r
434 signzx(i)=signzx(i)*r
436 IF(ie_cst(i) == 1)
THEN
437 iload0 = int(uvar(i,5))
438 IF(iload0 /= iload(i))
THEN
448 ELSEIF(idamage == 1)
THEN
452 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
453 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
454 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
455 signxy(i)= g(i) *epsxy(i)
456 signyz(i)= g(i) *epsyz(i)
457 signzx(i)= g(i) *epszx(i)
459 svm2 = (signxx(i)**2 + signyy(i)**2 +
460 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
462 r = (yld(i)/
max(em20,svm))
463 signxx(i)=signxx(i)*r
464 signyy(i)=signyy(i)*r
465 signzz(i)=signzz(i)*r
466 signxy(i)=signxy(i)*r
467 signyz(i)=signyz(i)*r
468 signzx(i)=signzx(i)*r
470 IF(iload(i) == -1)
THEN
471 r = (yldmin(i)/
max(em20,yldelas(i)))
472 p = third*(signxx(i) + signyy(i) + signzz(i))
473 signxx(i)=(signxx(i) - p)*r + p
474 signyy(i)=(signyy(i) - p)*r + p
475 signzz(i)=(signzz(i) - p)*r + p
476 signxy(i)=signxy(i)*r
477 signyz(i)=signyz(i)*r
478 signzx(i)=signzx(i)*r
481 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
482 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
488 ELSEIF(idamage == 2 )
THEN
491 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
492 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
493 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
494 signxy(i)= g(i) *epsxy(i)
495 signyz(i)= g(i) *epsyz(i)
496 signzx(i)= g(i) *epszx(i)
498 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
499 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
501 r = yld(i)/
max(em20,svm)
502 signxx(i)=signxx(i)*r
503 signyy(i)=signyy(i)*r
504 signzz(i)=signzz(i)*r
505 signxy(i)=signxy(i)*r
506 signyz(i)=signyz(i)*r
507 signzx(i)=signzx(i)*r
509 IF(iload(i) == -1)
THEN
510 r = yldmin(i)/
max(em20,yldelas(i))
511 signxx(i)=signxx(i)*r
512 signyy(i)=signyy(i)*r
513 signzz(i)=signzz(i)*r
514 signxy(i)=signxy(i)*r
515 signyz(i)=signyz(i)*r
516 signzx(i)=signzx(i)*r
519 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
520 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
527 ELSEIF(idamage == 3)
THEN
530 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
531 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
532 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
533 signxy(i)= g(i) *epsxy(i)
534 signyz(i)= g(i) *epsyz(i)
535 signzx(i)= g(i) *epszx(i)
537 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
538 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
540 r = (yld(i)/
max(em20,svm))
541 signxx(i)=signxx(i)*r
542 signyy(i)=signyy(i)*r
543 signzz(i)=signzz(i)*r
544 signxy(i)=signxy(i)*r
545 signyz(i)=signyz(i)*r
546 signzx(i)=signzx(i)*r
548 IF(iload(i) == -1)
THEN
549 r = one - (uvar(i,8)/
max(em20,uvar(i,2)))**expo
550 r = one - (one - hys)*r
551 p = third*(signxx(i) + signyy(i) + signzz(i))
552 signxx(i)=(signxx(i) - p)*r + p
553 signyy(i)=(signyy(i) - p)*r + p
554 signzz(i)=(signzz(i) - p)*r + p
555 signxy(i)=signxy(i)*r
556 signyz(i)=signyz(i)*r
557 signzx(i)=signzx(i)*r
564 ELSEIF(idamage == 4)
THEN
567 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
568 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
569 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
570 signxy(i)= g(i) *epsxy(i)
571 signyz(i)= g(i) *epsyz(i)
572 signzx(i)= g(i) *epszx(i)
574 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
575 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
577 r = (yld(i)/
max(em20,svm))
578 signxx(i)=signxx(i)*r
579 signyy(i)=signyy(i)*r
580 signzz(i)=signzz(i)*r
581 signxy(i)=signxy(i)*r
582 signyz(i)=signyz(i)*r
583 signzx(i)=signzx(i)*r
585 IF(iload(i) == -1)
THEN
586 r = one - (uvar(i,8)/
max(em20,uvar(i,2)))**expo
587 r = one - (one - hys)*r
588 signxx(i)=signxx(i)*r
589 signyy(i)=signyy(i)*r
590 signzz(i)=signzz(i)*r
591 signxy(i)=signxy(i)*r
592 signyz(i)=signyz(i)*r
593 signzx(i)=signzx(i)*r
602 ipfunc = ifunc(1,nfunc)
604 mu = 1 - rho(i)/rho0(i)
607 alpha = yfacc*finter(ipfunc,mu,npf,tf,df)
608 alpha =
max(zero, alpha)
610 signxx(i) = alpha*signxx(i)
611 signyy(i) = alpha*signyy(i)
612 signzz(i) = alpha*signzz(i)
613 signxy(i) = alpha*signxy(i)
614 signzx(i) = alpha*signzx(i)
615 signyz(i) = alpha*signyz(i)
subroutine sigeps70(nel, nuparam, nuvar, mfunc, kfunc, npf, tf, time, timestep, uparam, rho0, rho, volume, eint, nvartmp, vartmp, depsxx, depsyy, depszz, depsxy, depsyz, depszx, epsxx, epsyy, epszz, epsxy, epsyz, epszx, sig0xx, sig0yy, sig0zz, sig0xy, sig0yz, sig0zx, signxx, signyy, signzz, signxy, signyz, signzx, sigvxx, sigvyy, sigvzz, sigvxy, sigvyz, sigvzx, soundsp, viscmax, uvar, off, ngl, pm, ipm, imat, matparam)