32 1 NEL0 ,NUPARAM,NUVAR ,MFUNC ,KFUNC ,
33 2 NPF ,NPT0 ,IPT ,IFLAG ,
34 2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,
35 3 AREA ,EINT ,THKLY ,ISRATE ,ASRATE ,
36 4 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,
37 5 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
38 6 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
39 7 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
40 8 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
41 9 SIGVXX ,SIGVYY ,SIGVXY ,SIGVYZ ,SIGVZX ,
42 A SOUNDSP,VISCMAX,THK ,PLA ,UVAR ,
43 B OFF ,NGL ,IPM ,MAT ,ETSE ,
44 C GS ,YLD ,EPSD_PG ,EPSP ,DPLA_I )
48#include "implicit_f.inc"
104#include "param_c.inc"
105#include "com01_c.inc"
107 COMMON /nectrxi/ jst ,ic ,ifunc,minlen,nfuncv,
108 . nfuncm,imix ,imixv ,ifuncm,
110 COMMON /nectrxr/ ng_nrates
112 INTEGER MINLEN,GLIMIT
113 PARAMETER (GLIMIT = 64)
119 INTEGER NEL0, NUPARAM, NUVAR, NPT0,ISRATE, IPT,IFLAG(*),
120 . ipm(npropmi,*),ngl(nel0),mat(nel0)
122 my_real ,
DIMENSION(NEL0) ,
INTENT(IN) :: epsd_pg
123 my_real ,
DIMENSION(NEL0) ,
INTENT(INOUT) :: epsp
124 my_real time,timestep,uparam(*),
125 .
area(nel0),rho0(nel0),eint(nel0,2),
126 . thkly(nel0),pla(nel0),
127 . epspxx(nel0),epspyy(nel0),
128 . epspxy(nel0),epspyz(nel0),epspzx(nel0),
129 . depsxx(nel0),depsyy(nel0),
130 . depsxy(nel0),depsyz(nel0),depszx(nel0),
131 . epsxx(nel0) ,epsyy(nel0) ,
132 . epsxy(nel0) ,epsyz(nel0) ,epszx(nel0) ,
133 . sigoxx(nel0),sigoyy(nel0),
134 . sigoxy(nel0),sigoyz(nel0),sigozx(nel0),gs(*)
139 . signxx(nel0),signyy(nel0),
140 . signxy(nel0),signyz(nel0),signzx(nel0),
141 . sigvxx(nel0),sigvyy(nel0),
142 . sigvxy(nel0),sigvyz(nel0),sigvzx(nel0),
143 . soundsp(nel0),viscmax(nel0),etse(nel0),
148 my_real uvar(nel0,nuvar), off(nel0),thk(nel0),yld(nel0)
152 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
165 INTEGER I,J,J1,J2,N,NINDX,NMAX,IADBUF,NFUNC,
166 . iad1(mvsiz),ipos1(mvsiz),ilen1(mvsiz),
167 . iad2(mvsiz),ipos2(mvsiz),ilen2(mvsiz),
168 . jj(mvsiz),index(mvsiz),ifunc(mvsiz,100),nratem,
169 . nrate1,ifunc1(100),nfuncv(mvsiz),
171 INTEGER JST(MVSIZ+1),IC,MNRATE
173 . MX,MX2,MX3,MX4,ME,MA1,MA2,MG,MNU,
174 . MEPSMAX,MEPSR1,MEPSR2,MFISOKIN
176 . DYDX1(MVSIZ),DYDX2(MVSIZ),RATE(MVSIZ,2),SVM(MVSIZ),
177 . Y1(MVSIZ),Y2(MVSIZ),DR(MVSIZ),
179 . aa(mvsiz),bb(mvsiz),dpla_j(mvsiz),
180 . pp(mvsiz),qq(mvsiz),fail(mvsiz),svmo(mvsiz),h(mvsiz),
181 . sigexx(mvsiz),sigeyy(mvsiz),sigexy(mvsiz),
184 . r,umr,a,b,c,amu,s11,s22,s12,p,p2,fac,dezz,
185 . sigz,s1,s2,s3,dpla,vm2,epst,nnu2,
186 . err,f,df,pla_i,q2,yld_i,sigpxx,sigpyy,sigpxy,
alpha,
187 . e1,a11,a21,g1,g31,nnu11,nu11,nu21,nu31,nu41,nu51,nu61,
188 . epsmax1,epsr11,epsr21,fisokin1,
189 . dsxx,dsyy,dsxy,dexx,deyy,dexy,nux
193 . ng_e,ng_a1,ng_a2,ng_g,ng_nu,ng_g3,
194 . ng_espmax,ng_epsr1,ng_epsr2,ng_fisokin,
195 . ng_nrates(mvsiz,100),
196 . ng_rate1,ng_rate2,ng_yfac1,ng_yfac2,
197 . ng_ipos1,ng_ipos2,ng_iad1,ng_iad2,ng_ilen1,ng_ilen2,
198 . ng_eps1,ng_eps2,ng_y11,ng_y12,ng_epsmax,
199 . y11(mvsiz),y12(mvsiz)
200 INTEGER NG_NRATE, NG_CRVVAL,EPSMAX0LIST(MVSIZ)
202 . K,L,M,JJS(MVSIZ+1,100+1),JCNT,
203 . ISQRT,ISQRTLIST(MVSIZ),
204 . DIFF(MVSIZ),IMIX,IMIXV(MVSIZ),TEMPIC,JEND(MVSIZ),
205 . ifuncm(mvsiz,100),nfuncmv(mvsiz),jlast(mvsiz+1),
206 . iepsmax0,jjindex(mvsiz),jjstart,jjend
208 DATA nmax/3/,iperf/0/
212 nfunc = ipm(10,mat(1))
214 ifunc1(j)=ipm(10+j,mat(1))
217 iadbuf = ipm(7,mat(1))-1
218 e1 = uparam(iadbuf+2)
219 a11 = uparam(iadbuf+3)
220 a21 = uparam(iadbuf+4)
221 g1 = uparam(iadbuf+5)
223 nux = uparam(iadbuf+6)
224 nrate1 = nint(uparam(iadbuf+1))
225 epsmax1=uparam(iadbuf+6+2*nrate1+1)
226 IF(epsmax1==zero)
THEN
227 IF(tf(npf(ifunc1(1)+1)-1)==zero)
THEN
228 epsmax1=tf(npf(ifunc1(1)+1)-2)
234 nnu11 = nux / (one - nux)
239 nu41 = one + nnu2 + nnu11
240 nu51 = one + nnu2 - two*nnu11
241 nu61 = half - nnu2 + half*nnu11
243 epsr11 =uparam(iadbuf+6+2*nrate1+2)
244 epsr21 =uparam(iadbuf+6+2*nrate1+3)
245 fisokin1=uparam(iadbuf+6+2*nrate1+8)
268 signxx(i)=sigoxx(i) - uvar(i,2) +a11*depsxx(i)+a21*depsyy(i)
270 signxy(i)=sigoxy(i) - uvar(i,4) +g1 *depsxy(i)
271 signyz(i)=sigoyz(i)+gs(i) *depsyz(i)
272 signzx(i)=sigozx(i)+gs
273 sigexx(i) = signxx(i)
274 sigeyy(i) = signyy(i)
275 sigexy(i) = signxy(i)
277 soundsp(i) = sqrt(a11/rho0(i))
284 epsp(i) = half*( abs(epspxx(i)+epspyy(i))
285 . + sqrt( (epspxx(i)-epspyy(i))*(epspxx(i)-epspyy(i))
286 . + epspxy(i)*epspxy(i) ) )
288 epsp(i) = asrate*epsd_pg(i) + (one-asrate)*epsp(i)
293 epst = half*( epsxx(i)+epsyy(i)
294 . + sqrt( (epsxx(i)-epsyy(i))*(epsxx(i)-epsyy(i))
295 . + epsxy(i)*epsxy(i) ) )
296 fail(i) =
max(zero,
min(one,(epsr21-epst)/(epsr21-epsr11)))
305 iadbuf = ipm(7,mat(1))-1
309 IF(epsp(i)>=uparam(iadbuf+6+j)) jj(i) = j
313 rate(i,1)=uparam(iadbuf+6+jj(i))
314 rate(i,2)=uparam(iadbuf+6+jj(i)+1)
315 yfac(i,1)=uparam(iadbuf+6+nrate1+jj(i))
316 yfac(i,2)=uparam(iadbuf+6+nrate1+jj(i)+1)
322 ipos1(i) = nint(uvar(i,j1+4))
323 iad1(i) = npf(ifunc1(j1)) / 2 + 1
324 ilen1(i) = npf(ifunc1(j1)+1) / 2 - iad1
325 ipos2(i) = nint(uvar(i,j2+4))
326 iad2(i) = npf(ifunc1(j2)) / 2 + 1
327 ilen2(i) = npf(ifunc1(j2)+1) / 2 - iad2(i) - ipos2(i)
330 CALL vinter(tf,iad1,ipos1,ilen1,nel0,pla,dydx1,y1)
331 CALL vinter(tf,iad2,ipos2,ilen2,nel0,pla,dydx2,y2)
333 IF (fisokin1==zero)
THEN
337 y1(i)=y1(i)*yfac(i,1)
338 y2(i)=y2(i)*yfac(i,2)
339 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
340 yld(i) = fail(i)*(y1(i) + fac*(y2(i)-y1(i)))
341 yld(i) =
max(yld(i),em20)
342 dydx1(i)=dydx1(i)*yfac(i,1)
343 dydx2(i)=dydx2(i)*yfac(i,2)
344 h(i) = fail(i)*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
345 uvar(i,j1+4) = ipos1(i)
346 uvar(i,j2+4) = ipos2(i)
348 ELSEIF (fisokin1==1.)
THEN
352 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
353 dydx1(i)=dydx1(i)*yfac(i,1)
354 dydx2(i)=dydx2(i)*yfac(i,2)
355 h(i) = fail(i)*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
356 uvar(i,j1+4) = ipos1(i)
357 uvar(i,j2+4) = ipos2(i)
359 y1(i)=tf(npf(ifunc1(j1))+1)
360 y2(i)=tf(npf(ifunc1(j2))+1)
361 y1(i)=y1(i)*yfac(i,1)
362 y2(i)=y2(i)*yfac(i,2)
363 yld(i) = fail(i)*(y1(i) + fac*(y2(i)-y1(i)))
369 y1(i)=y1(i)*yfac(i,1)
370 y2(i)=y2(i)*yfac(i,2)
371 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
372 yld(i) = fail(i)*(y1(i) + fac*(y2(i)-y1(i)))
373 yld(i) =
max(yld(i),em20)
374 dydx1(i)=dydx1(i)*yfac(i,1)
375 dydx2(i)=dydx2(i)*yfac(i,2)
376 h(i) = fail(i)*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
377 uvar(i,j1+4) = ipos1(i)
378 uvar(i,j2+4) = ipos2(i)
380 y1(i)=tf(npf(ifunc1(j1))+1)
381 y2(i)=tf(npf(ifunc1(j2))+1)
382 y1(i)=y1(i)*yfac(i,1)
383 y2(i)=y2(i)*yfac(i,2)
384 yld(i) = (1.-fisokin1) * yld(i) +
385 . fisokin1 * (fail(i)*(y1(i) + fac*(y2(i)-y1(i))))
395 svm(i)=sqrt(signxx(i)*signxx(i)
396 . +signyy(i)*signyy(i)
397 . -signxx(i)*signyy(i)
398 . +three*signxy(i)*signxy(i))
399 r =
min(one,yld(i)/
max(em20,svm(i)))
400 signxx(i)=signxx(i)*r
401 signyy(i)=signyy(i)*r
402 signxy(i)=signxy(i)*r
404 dpla_i(i) = off(i)*svm(i)*umr/(g31+h(i))
405 pla(i) = pla(i) + dpla_i(i)
406 s1=half*(signxx(i)+signyy(i))
407 dezz = dpla_i(i) * half*(signxx(i)+signyy(i)) / yld(i)
408 dezz=-(depsxx(i)+depsyy(i))*nnu11-nu31*dezz
409 thk(i) = thk(i) + dezz*thkly(i)*off(i)
410 IF(r<one) etse(i)= h(i)/(h(i)+e1)
413 ELSEIF(iflag(1)==1)
THEN
418 h(i) =
max(zero,h(i))
419 s1=signxx(i)+signyy(i)
420 s2=signxx(i)-signyy(i)
423 bb(i)=three_over_4*s2*s2+3.*s3*s3
424 svm(i)=sqrt(aa(i)+bb(i))
425 dezz = -(depsxx(i)+depsyy(i))*nnu11
426 thk(i) = thk(i) + dezz*thkly(i)*off(i)
433 IF(svm(i)>yld(i).AND.off(i)==one)
THEN
445 dpla_j(i)=(svm(i)-yld(i))/(g31+h(i))
446 etse(i)= h(i)/(h(i)+e1)
447 hk(i) = h(i)*(one-fisokin1)
451#include "vectorize.inc"
455 yld_i =yld(i)+hk(i)*dpla_i(i)
456 dr(i) =half*e1*dpla_i(i)/yld_i
457 pp(i) =one/(one+dr(i)*nu11)
458 qq(i) =one/(one+three*dr(i)*nu21)
461 f =aa(i)*p2+bb(i)*q2-yld_i*yld_i
462 df =-(aa(i)*nu11*p2*pp(i)+three*bb(i)*nu21*q2*qq(i))
463 . *(e1-two*dr(i)*hk(i))/yld_i
465 df = sign(
max(abs(df),em20),df)
466 IF(dpla_i(i)>zero)
THEN
467 dpla_j(i)=
max(zero,dpla_i(i)-f/df)
476#include "vectorize.inc"
479 pla(i) = pla(i) + dpla_i(i)
480 s1=(signxx(i)+signyy(i))*pp(i)
481 s2=(signxx(i)-signyy(i))*qq(i)
482 signxx(i)=half*(s1+s2)
483 signyy(i)=half*(s1-s2)
484 signxy(i)=signxy(i)*qq(i)
485 dezz = - nu31*dr(i)*s1/e1
486 thk(i) = thk(i) + dezz*thkly(i)*off(i)
490 ELSEIF(iflag(1)==2)
THEN
496 p = -(signxx(i)+signyy(i))*third
503 vm2= three*(s12*s12 - s11*s22)
507 c = p2*nu51 - yld(i)*yld(i)
508 r =
min(one,(-b + sqrt(
max(zero,b*b-a*c)))/
max(a ,em20))
509 signxx(i) = s11*r - p
510 signyy(i) = s22*r - p
516 signxx(i) = signxx(i) + sigz
517 signyy(i) = signyy(i) + sigz
519 dpla_i(i) = off(i)*svm(i)*umr/(g31+h(i))
520 pla(i) = pla(i) + dpla_i(i)
521 dezz = dpla_i(i) * half*(signxx(i)+signyy(i)) / yld(i)
522 dezz=-(depsxx(i)+depsyy(i))*nnu11-nu31*dezz
523 thk(i) = thk(i) + dezz*thkly(i)*off(i)
524 IF(r<one) etse(i)= h(i)/(h(i)+e1)
529 IF(pla(i)>epsmax1.AND.off(i)==one)off(i)=four_over_5
535 IF (fisokin1/=zero)
THEN
537 dsxx = sigexx(i) - signxx(i)
538 dsyy = sigeyy(i) - signyy(i)
539 dsxy = sigexy(i) - signxy(i)
540 dexx = (dsxx - nux*dsyy)
541 deyy = (dsyy - nux*dsxx)
542 dexy = two*(one+nux)*dsxy
543 alpha = fisokin1*h(i)/(e1+h(i))/three
544 sigpxx =
alpha*(four*dexx+two*deyy)
545 sigpyy =
alpha*(four*deyy+two*dexx)
547 signxx(i) = signxx(i) + uvar(i,2)
548 signyy(i) = signyy(i) + uvar(i,3)
549 signxy(i) = signxy(i) + uvar(i,4)
550 uvar(i,2) = uvar(i,2) + sigpxx
551 uvar(i,3) = uvar(i,3) + sigpyy
552 uvar(i,4) = uvar(i,4) + sigpxy