31 1 NEL ,NUPARAM,NUVAR ,MFUNC ,KFUNC ,NPF ,
32 2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,RHO ,
34 4 EPSPXX ,EPSPYY ,EPSPZZ ,EPSPXY ,EPSPYZ ,EPSPZX ,
35 5 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
36 6 EPSXX ,EPSYY ,EPSZZ ,EPSXY ,EPSYZ ,EPSZX ,
37 7 SIG0XX ,SIG0YY ,SIG0ZZ ,SIG0XY ,SIG0YZ ,SIG0ZX ,
38 8 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
39 9 SIGVXX ,SIGVYY ,SIGVZZ ,SIGVXY ,SIGVYZ ,SIGVZX ,
40 A SOUNDSP,FSSP ,VISCMAX,UVAR ,OFF ,NGL ,
41 B PM ,IPM , MAT ,EPSP ,P_AIR )
45#include "implicit_f.inc"
109#include "param_c.inc"
111 INTEGER NEL, NUPARAM, NUVAR,IPT,
112 . NGL(NEL),MAT(NEL),IPLA,IPM(NPROPMI,*)
114 . TIME,TIMESTEP,UPARAM(*),
115 . RHO(NEL),RHO0(NEL),VOLUME(NEL),EINT(NEL),
116 . EPSPXX(NEL),EPSPYY(NEL),EPSPZZ(NEL),
117 . EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
118 . DEPSXX(NEL),DEPSYY(NEL),DEPSZZ(NEL),
119 . DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
120 . EPSXX(NEL) ,EPSYY(NEL) ,EPSZZ(NEL) ,
121 . EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
122 . sig0xx(nel),sig0yy(nel),sig0zz(nel),
123 . sig0xy(nel),sig0yz(nel),sig0zx(nel),
124 . pm(npropm,*),epsp(nel),fssp(nel)
129 . signxx(nel),signyy(nel),signzz(nel),
130 . signxy(nel),signyz(nel),signzx(nel),
131 . sigvxx(nel),sigvyy(nel),sigvzz(nel),
132 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
133 . soundsp(nel),viscmax(nel)
138 . uvar(nel,nuvar), off(nel), pla(nel)
142 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
157 INTEGER I,J,J1,J2,I1,I2,IADBUF,NC,NFUNC,ILOAD(MVSIZ),
158 . IFUNC(MVSIZ,100),NLOAD,NUNLOAD,
159 . IE_CST(MVSIZ),ILOAD0,IDAMAGE,NPAR_FOAM,IFUNCR,
162 . R,FAC,YP1,YP2,YN1,YN2,COEFF,RMIN,RMAX,
163 . E,E1,E2,E3,E4,E5,E6,DF,BB,CC,DELTA,ALPHA,X1,X2,SVM2,
164 . SVM,RHO_AIR,E_AIR,V0,DVOL,MU ,GAMA,RHO_AIR0,P0,
165 . E0,G(MVSIZ),NU,(MVSIZ),AA2(MVSIZ),PFOAM,
167 . EPST(MVSIZ),AA,YLDMIN(),YLDMAX(MVSIZ),
168 . yld(mvsiz),rate(mvsiz,2),ef(mvsiz),
169 . yfac(mvsiz,2),eps0(mvsiz),epss(mvsiz),
170 . epssmax,df1,df2,dav,emax,pext,p_air(mvsiz),
171 . eps_max,dsig ,yldelas(mvsiz),p,svm1(mvsiz),expo,hys,
172 . de,pgaz,vnew,el(mvsiz),den,pgaz0,e_air0,espe,pair0,
179 nfunc = ipm(10,mat(i))
181 ifunc(i,j)=ipm(10+j,mat(i))
192 idamage = uparam(9 + 2*nfunc )
193 expo = uparam(10 + 2*nfunc )
194 hys = uparam(11 + 2*nfunc)
195 emax = uparam(12 + 2*nfunc )
197 rho_air0 = uparam(14 + 2*nfunc)
198 p0 = uparam(15 + 2*nfunc)
199 gama = uparam(16 + 2*nfunc)
200 alpha0 = uparam(17 + 2*nfunc)
201 pext = uparam(18 + 2*nfunc)
203 pfoam = uparam(19 + 2*nfunc)
204 kk = uparam(21 + 2*nfunc)
214 sig0xx(i) = sig0xx(i) + alpha * pair0
215 sig0yy(i) = sig0yy(i) + alpha * pair0
216 sig0zz(i) = sig0zz(i) + alpha * pair0
222 mu = rho_air/rho_air0
225 espe = e_air0/
max(em15,v0)
226 pgaz0= (gama - one)*mu*espe
227 e_air = e_air0 - half*pgaz0*dvol
228 bb = one + half*(gama - one)*mu*dvol/
max(em15,v0)
229 e_air = e_air/
max(em20,bb)
230 espe = e_air/
max(em15,v0)
231 pgaz =(gama - one)*mu*espe
233 p_air(i) = pgaz - pext
234 p_air(i)=
max(p_air(i),-pext)
237 uvar(i,5) = -p_air(i)
238 uvar(i,6) = -p_air(i)
239 uvar(i,7) = -p_air(i)
244 uvar(i,2) = e_air/
max(em15,vnew)
245 ef(i) = p0*gama*mu**(gama - 1)
246 fssp(i) = sqrt(ef(i)/rho_air0)
250 ifuncr = ifunc(i,nfunc )
253 . uvar(i,21) = alpha0*finter(ifuncr,var,npf,tf,df)
255 ifunck = ifunc(i,nfunc - 1)
257 . uvar(i,22) = kk*finter(ifunck,var,npf,tf,df)
266 epst(i) = epsxx(i)**2+epsyy(i)**2 + epszz(i)**2 +
267 . half*(epsxy(i)**2+epsyz(i)**2+epszx(i)**2)
268 epst(i) = sqrt(epst(i))
281 yfac(i,1)=uparam(9 + nfunc )
282 IF(epst(i) >= epssmax)
THEN
283 yldelas(i)=yfac(i,1)*finter(ifunc(i,1),epssmax,npf,tf,df)
284 yldelas(i)=emax*(epst(i) - epssmax) + yldelas(i)
286 yldelas(i) = yfac(i,1)*finter(ifunc(i
292 IF(abs(epsp(i)) >= abs(uparam(8 + j )))
THEN
296 rate(i,1)=uparam( 8 + j1)
297 yfac(i,1)=uparam( 8 + nfunc + j1)
298 IF(epst(i) >= epssmax)
THEN
301 rate(i,2)=uparam(8 + j2 )
302 yfac(i,2)=uparam(8 + nfunc + j2 )
304 yp1 = yfac(i,1)*finter(ifunc(i,j1),epssmax,npf,tf,df1)
305 yp2 = yfac(i,2)*finter(ifunc(i,j2),epssmax,npf,tf,df2)
307 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
308 yldmax(i) =
max(yp1 + fac*(yp2 - yp1), em20)
309 yldmax(i) = emax*(epst(i) - epssmax) + yldmax(i)
313 . yfac(i,1)*finter(ifunc(i,j1),epssmax,npf,tf,df)
314 yldmax(i) = emax*(epst(i) - epssmax) + yldmax(i)
319 rate(i,2)=uparam( 8 + j2 )
320 yfac(i,2)=uparam( 8 + nfunc + j2 )
322 yp1 = yfac(i,1)*finter(ifunc(i,j1),epst(i),npf,tf,df1)
323 yp2 = yfac(i,2)*finter(ifunc(i,j2),epst(i),npf,tf,df2)
325 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
326 yldmax(i) =
max(yp1 + fac*(yp2 - yp1), em20)
328 yldmax(i) = yfac(i,1)*finter(ifunc(i,j1),epst(i),npf,tf,df)
338 . abs(uparam(nload + 8 + j )))
THEN
343 rate(i,1)=uparam(8 + j1)
344 yfac(i,1)=uparam(8 + nfunc + j1)
346 IF(epst(i) >= epssmax)
THEN
349 rate(i,2)=uparam(8 + j2 )
350 yfac(i,2)=uparam(8 + nfunc + j2 )
352 yp1 =yfac(i,1)*finter(ifunc(i,j1),epssmax,npf,tf,df1)
353 yp2 =yfac(i,2)*finter(ifunc(i,j2),epssmax,npf,tf,df2)
356 fac = (rate(i,2) - epsp(i))/(rate(i,2) - rate(i,1))
357 yldmin(i) =
max(yp2 + fac*(yp1-yp2), em20)
359 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
360 yldmin(i) =
max(yp1 + fac*(yp2 - yp1), em20)
362 yldmin(i) = emax*(epst(i) - epssmax) + yldmin(i)
365 . yfac(i,1)*finter(ifunc(i,j1),epssmax,npf,tf,df)
366 yldmin(i) = emax*(epst(i) - epssmax) + yldmin(i)
371 rate(i,2)=uparam( 8 + j2 )
372 yfac(i,2)=uparam( 8 + nfunc + j2 )
374 yp1 = yfac(i,1)*finter(ifunc(i,j1),epst(i),npf,tf,df1)
375 yp2 = yfac(i,2)*finter(ifunc(i,j2),epst(i),npf,tf,df2)
378 fac = (rate(i,2) - epsp(i))/(rate(i,2) - rate(i,1))
379 yldmin(i) =
max(yp2 + fac*(yp1-yp2), em20)
381 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
382 yldmin(i) =
max(yp1 + fac*(yp2 - yp1), em20)
386 . yfac(i,1)*finter(ifunc(i,j1),epst(i),npf,tf,df)
394 delta = epst(i) - uvar(i,13)
395 IF(delta >= zero)
THEN
398 ELSEIF(delta < zero)
THEN
401 IF(idamage /= 1 )yld(i) = yldmax(i)
405 iload0 = int(uvar(i,14))
406 epss(i) = epst(i) - yld(i)/ e
407 epss(i) =
max(zero, epss(i))
408 de = aa*(epss(i) - uvar(i,11))
409 IF(iload(i) == 1)
THEN
410 e = e +
max(de, zero)
411 IF(iload0 == -1) e= uvar(i,12)
412 uvar(i,11) =
max(uvar(i,11), epss(i))
414 e = e +
min(de ,zero)
415 IF(iload0 == 1) e= uvar(i,12)
416 uvar(i,11) =
min(epss(i),uvar(i,11))
422 aa1(i) = e*(one-nu)/(one + nu)/(one - two*nu)
423 aa2(i) = aa1(i)*nu/(one - nu)
424 g(i) =half*e/(one + nu)
426 signxx(i)= aa1(i)*depsxx(i) + aa2(i)*(depsyy(i) + depszz(i))
427 signyy(i)= aa1(i)*depsyy(i) + aa2(i)*(depsxx(i) + depszz(i))
428 signzz(i)= aa1(i)*depszz(i) + aa2(i)*(depsxx(i) + depsyy(i))
429 signxy(i)= g(i) *depsxy(i)
430 signyz(i)= g(i) *depsyz(i)
431 signzx(i)= g(i) *depszx(i)
432 dsig = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
433 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
436 signxx(i)=sig0xx(i) + aa1(i)*depsxx(i)
437 . + aa2(i)*(depsyy(i) + depszz
438 signyy(i)=sig0yy(i) + aa1(i)*depsyy(i)
439 . + aa2(i)*(depsxx(i) + depszz(i))
440 signzz(i)=sig0zz(i) + aa1(i)*depszz(i)
441 . + aa2(i)*(depsxx(i) + depsyy(i))
442 signxy(i)=sig0xy(i) + g(i) *depsxy(i)
443 signyz(i)=sig0yz(i) + g(i) *depsyz(i)
444 signzx(i)=sig0zx(i) + g(i) *depszx(i)
447 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
448 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
452 soundsp(i) = sqrt((et + ef(i))/rho0(i))
455 IF(idamage == 1 )
THEN
456 IF(svm >= yldmax(i) )
THEN
460 IF(delta < zero ) yld(i) = yldmin(i)
461 ELSEIF(svm <= yldmin(i))
THEN
467 IF(delta < zero .AND. dsig > yldmin(i) .AND. dsig > svm)
THEN
474 IF(delta > zero .AND. svm < yldmax(i))yld(i)=svm
477 uvar(i,17) = uvar(i,17) +
478 . half*(yld(i ) + uvar(i,15))*delta
479 uvar(i,17) =
max(zero, uvar(i,1
480 uvar(i,18) =
max(uvar(i,18), uvar(i,17))
487 IF(idamage == 1 )
THEN
489 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
490 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
491 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy
492 signxy(i)= g(i) *epsxy(i)
493 signyz(i)= g(i) *epsyz(i)
494 signzx(i)= g(i) *epszx(i)
496 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
497 . + two*(signxy(i)**2 + signzx(i)**2
499 r = yld(i)/
max(em20,svm)
500 signxx(i)=signxx(i)*r
501 signyy(i)=signyy(i)*r
502 signzz(i)=signzz(i)*r
503 signxy(i)=signxy(i)*r
504 signyz(i)=signyz(i)*r
505 signzx(i)=signzx(i)*r
507 IF(ie_cst(i) == 1)
THEN
508 iload0 = int(uvar(i,14))
509 IF(iload0 /= iload(i))
THEN
515 uvar(i,14) = iload(i)
519 ELSEIF(idamage == 2 )
THEN
522 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
523 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
524 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
525 signxy(i)= g(i) *epsxy(i)
526 signyz(i)= g(i) *epsyz(i)
527 signzx(i)= g(i) *epszx(i)
529 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
530 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
532 r = yld(i)/
max(em20,svm)
533 signxx(i)=signxx(i)*r
534 signyy(i)=signyy(i)*r
535 signzz(i)=signzz(i)*r
536 signxy(i)=signxy(i)*r
537 signyz(i)=signyz(i)*r
538 signzx(i)=signzx(i)*r
540 IF(iload(i) == -1)
THEN
541 r = yldmin(i)/
max(em20,yldelas(i))
542 signxx(i)=signxx(i)*r
543 signyy(i)=signyy(i)*r
544 signzz(i)=signzz(i)*r
545 signxy(i)=signxy(i)*r
546 signyz(i)=signyz(i)*r
547 signzx(i)=signzx(i)*r
550 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
551 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
554 uvar(i,14) = iload(i)
558 ELSEIF(idamage == 3)
THEN
561 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
562 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
563 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
564 signxy(i)= g(i) *epsxy(i)
565 signyz(i)= g(i) *epsyz(i)
566 signzx(i)= g(i) *epszx(i)
569 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
570 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
572 r = (yld(i)/
max(em20,svm))
573 signxx(i)=signxx(i)*r
574 signyy(i)=signyy(i)*r
575 signzz(i)=signzz(i)*r
576 signxy(i)=signxy(i)*r
577 signyz(i)=signyz(i)*r
578 signzx(i)=signzx(i)*r
580 IF(iload(i) == -1)
THEN
581 r = one - (uvar(i,17)/
max(em20,uvar(i,18)))**expo
582 r = one - (one - hys)*r
583 signxx(i)=signxx(i)*r
584 signyy(i)=signyy(i)*r
585 signzz(i)=signzz(i)*r
586 signxy(i)=signxy(i)*r
587 signyz(i)=signyz(i)*r
588 signzx(i)=signzx(i)*r
591 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
592 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
595 uvar(i,14) = iload(i)
601 IF(time == 0 .AND. pfoam /= zero)
THEN
609 IF(pfoam /= zero)
THEN
611 IF( epst(i) == zero )
THEN
622 signxx(i) = signxx(i) - alpha * p_air(i)
623 signyy(i) = signyy(i) - alpha * p_air(i)
624 signzz(i) = signzz(i) - alpha * p_air(i)
625 uvar(i,19) = p_air(i)