drpr3d
C DRPR3D SOURCE PV090527 23/01/27 21:15:27 11574 subroutine DrPr3D(young,hpla,delta,beta,rc,epicc,epleq,rmin, #sig13,bwpw,bgpg,bsps,tauc,nc,np,na,ig,fa,dpfa_ds,dgfa_ds,dpfa_dp, #dpfa_dr,dra_dl,fg,i,precision2,rt_dp,drpr,bw,pw,kwrc, #epeqpc,rt_app) implicit real*8 (a-h,o-z) implicit integer (i-n) c variables externes real*8 young,epicc,epleq,rc,rmin,hpla,delta,beta,kwrc real*8 sig13(3),bwpw,bgpg,bsps,precision2 real*8 sigs,tauc,rt_dp integer nc,np,na,ig(nc),i real*8 fa(nc),dpfa_ds(nc,6),dgfa_ds(nc,6),dpfa_dp(nc,np) real*8 dpfa_dr(nc),dra_dl(nc),fg(nc),bw,pw,epeqpc,rt_app c variables locales real*8 coeff,rceff,dr_dp,eppc1,rseuil,epseuil,taulim real*8 x3(3),indict3(3),sigs_3,delta1,beta1,taue2,rpiceff real*8 sigd6(6) real*8 Fp,depleq_dl,fglim,x2,fg1,dfc_dpg,seq integer j,ia logical drpr c le critere est évalué avec des contraintes limitées soit c par rt_dp soit pas rt_app sig_max=min(rt_dp,rt_app) c rapport entre la resistance à la compression et au cisaillement coeff=(1.d0/dsqrt(3.d0)-delta/3.d0) c prise en compte de l ecrouissage en cisaillement pre pic call ecrp3d(rceff,dr_dp,rc,young,epicc,epleq,eppc1, # rseuil,epseuil,rmin,hpla,beta,epeqpc,rpiceff) c passage en contrainte de cisaillement c print*,'ds drpr3d rceff',rceff,'dr/dp',dr_dp taulim=max(rceff*coeff,rc*coeff*precision2) c calcul des contraintes equivalentes totales sigs=0.d0 do j=1,3 c contrainte normale matrice a comparer a la traction matrice c en enlevant la containte capilliare ce qui revient a c rajouter delta1*bw*pw a la resistance au cisaillement c ce qui en gendre dpfa_dpw=-(-delta1*bw) seq=sig13(j)-bgpg-bsps-bwpw if(seq.gt.sig_max) then x3(j)=sig_max c derive de la contrainte apparente / a la vraie indict3(j)=1.d0 else x3(j)=seq c derive de la contrainte apparente / a la vraie indict3(j)=1.d0 end if c trace de sigma apparente sigs=sigs+x3(j) end do c partie spherique vraie : -p sigs_3=sigs/3.d0 c coeff de Drucker Prager pour le critere delta1=delta c coeff de Drucker Prager pour la dilatance beta1=beta c calcul du deviateur taue2=0.d0 do j=1,6 if (j.le.3) then sigd6(j)=x3(j)-sigs_3 taue2=taue2+sigd6(j)**2 else sigd6(j)=0.d0 end if end do taue=sqrt(taue2/2.d0) c fonction seuil pour drucker prager c limitation de la contrainte spherique en cas de traction c if (sigs_3.lt.taulim/delta1) then fg1=(taue+delta1*sigs_3)-taulim fg(i)=fg1 c taux de cisaillement tauc=max((taue+delta1*sigs_3)/(rpiceff*coeff),0.d0) c print*,'ds drpr3d tauc:',tauc c pseudo potentiel plastique Fp=(taue+beta1*sigs_3) c initialisation d epl eq / d lambda depleq_dl=0.d0 c test franchissement du critere c stockage de la valeur limite du critere fglim=(taulim*precision2) c on active le critere que si les rgi sont deja satisfaites c et si la dilatance induit bien une dissipation if((fg1.gt.fglim).and.(Fp.gt.fglim)) then c indicateur de franchissement du critere drpr=.true. c print*,'rceff dans crir3d',rceff c print*,'(taue+delta*sigs_3)-taulim>0' c print*,fg(i),taue,delta,sigs_3,taulim c read* c critere de cisaillement actif c increment du nbre de critere actifs na=na+1 ia=na c tableau de correspondance i global <- i actif ig(ia)=i c stockage dans la table des criteres actifs fa(ia)=fg1 c derive de fg et direction de l ecoulement x2=0.5d0/taue c calcul des derivees dans les 6 directions do k=1,6 c termes de la diagonale if (k.le.3) then x0=x2*sigd6(k) c definition des derivees du potentiel / sigma dpfa_ds(ia,k)=(x0+delta1/3.d0)*indict3(k) c definition des derives du pseudo potentiel c reste non associee meme si perte de l effet du confinement c sur le critere c dgfa_ds(ia,k)=(x0+beta1/3.d0)*indict3(k) dgfa_ds(ia,k)=(x0+beta1/3.d0) else c potentiel x0=x2*sigd6(k) dpfa_ds(ia,k)=x0 c direction d ecoulement c calcul de la direction de l ecoulement c gama (et pas epsilon !) dgfa_ds(ia,k)=2.d0*x0 end if if (k.le.3) then depleq_dl=depleq_dl+x3(k)*dgfa_ds(ia,k) end if end do c derivee de la fonction / pressions do k=1,np dpfa_dp(ia,k)=0.d0 end do c prise en compte de l effet benefique de la tension capillaire dpfa_dp(ia,1)=kwrc*bw c normalisation du tau d evolution de la def plastique equivalente depleq_dl=depleq_dl/Rceff c derivee de la fonction / resistance dpfa_dr(ia)=-1.d0 c derive de la resistance par rapport au multiplicateur plastique c on multiplie par coeff car critere en cisaillement dra_dl(ia)=dr_dp*depleq_dl*coeff end if c print*,'a la fin de DRPR3D' c print*,young,hpla,delta,beta,rc,epicc,epleq,rmin, c # sig13,bwpw,bgpg,bsps,tauc,nc,np,na,ig(1),fg(1),i c read* return end
© Cast3M 2003 - Tous droits réservés.
Mentions légales