denc3d
C DENC3D SOURCE FD218221 24/02/07 21:15:09 11834 subroutine denc3d(ngf,NDIMG,ndima,NTMAX,NCMAX,NLMAX, # nbract,ft,lnumcrt,dpftds,dgftds,REST,PFT_GRAD_PFT,PFT_GRAD_GFT, # nbracc,fc,lnumcrc,dpfcds,dgfcds,RESC,PFC_GRAD_PFC,PFC_GRAD_GFC, # nbracl,fl,lnumcrl,dpflds,dgflds,RESL,PFL_GRAD_PFL,PFL_GRAD_GFL, # jse,jea,aai,aap,jsp,Je1epg,DEPST1,DEPSL1,DEPSC1,reduc_resg, # NDIMPL,RgR,ninc,NBRINC,Jsgep,ACTIFT,ACTIFC,ACTIFL,PFG_GRAD_PFG, # precision3d,err1,affiche) c calcul des ecoulements dans l espace des deformations plastiques implicit real*8 (a-h,o-z) implicit integer (i-n) c dimension espace generalise integer NDIMG,ndima,nbract,err1,ngf,NTMAX,NCMAX,NLMAX integer nbracc,nbracl,ninc,NBRINC c activite des criteres logical ACTIFT(NTMAX),ACTIFC(NCMAX),ACTIFL(NLMAX) real*8 aai(ngf,ngf+1) c criteres de traction c criteres de cisaillement real*8 fc(NCMAX),resc c traction localisee real*8 fl(NCMAX),resl integer lnumcrt(NTMAX),lnumcrc(NCMAX),lnumcrl(NLMAX) c inverse de a real*8 jea(NDIMG,ndima) c regiddite generalisee real*8 jse(NDIMG,NDIMG) c derivee du critere par rapport à la contrainte real*8 DPFTDS(NTMAX,NDIMG),DPFCDS(NCMAX,NDIMG) real*8 DPFLDS(NLMAX,NDIMG) c derivee du critere par rapport à la contrainte real*8 DGFTDS(NTMAX,NDIMG),DGFCDS(NCMAX,NDIMG) real*8 DGFLDS(NLMAX,NDIMG) c dimension de l espace de minimisation des residus plastiques integer NDIMPL c jacobienne Je1epg dans la base des ecoulements plastiques real*8 Je1epg(NDIMG,NDIMPL) c matrice jsp=dseff/depsp generalise real*8 jsp(NDIMG,NDIMPL) c preparation de la matrice inv(A).Jea real*8 AAP(NDIMG,NDIMPL) c gradient des fonctions seuil et pseudo potentiels, direction ecoulement real*8 PFT_GRAD_PFT(NDIMPL),PFT_GRAD_GFT(NDIMPL) c gradient des fonctions seuil et pseudo potentiels, direction ecoulement real*8 PFC_GRAD_PFC(NDIMPL),PFC_GRAD_GFC(NDIMPL) c gradient des fonctions seuil et pseudo potentiels, direction ecoulement real*8 PFL_GRAD_PFL(NDIMPL),PFL_GRAD_GFL(NDIMPL) c par de fgradf due a la pression de gel pour les criteres de decollement real*8 PFG_GRAD_PFG(NDIMPL) c precision3 real*8 precision3d c def plastique real*8 DEPST1(NDIMG),DEPSC1(NDIMG),DEPSL1(NDIMG) c coeff de relaxation du residu real*8 reduc_resg c matrice d bgpg / d ea ds l espace de minimisation real*8 Jsgep(NDIMG,NDIMPL) c Vecteur R.grad(R) dans l espace de minimisation real*8 RgR(NDIMPL) c controle affichage logical affiche,affiche_local integer icr,jcr,idir,ityp c calcul de lambda real*8 lambda,numerateur,denom affiche_local=affiche c affiche_local=.true. if(affiche_local) then print*,'Dans denc3d' end if c----------------- preparation des matrice pour le retour radial ------ c on est en base generali des deformations plastique (3*12=32 ep) c 01-12: d eps pt c 13-24: d eps pc c 25-36: d eps pl c avec un seule inclusion NDIMG=12 c et avec 3 types de plasticite NDIMPL=3*NDIMG=36 c l indice g est ici relatif a la base de dimansion NDIMPL c ---------- calcul de la matrice AAp=inv(1-Je1ee)*Je1ep(g) ------ c AAp=d epse_e(epsg) / d eps_p(ecoul) do i=1,NDIMG do j=1,NDIMPL AAp(i,j)=0.d0 do k=1,NDIMG AAp(i,j)=AAp(i,j)+AAi(i,k)*Je1epg(k,j) end do c print*,i,j,aap(i,j) end do end do c ---------matrice Jsp=H*AAp ------------------------------------- c Jsp= d sigma(epsg)/ d eps_p(ecoul) do i=1,NDIMG do j=1,NDIMPL Jsp(i,j)=0.d0 do k=1,NDIMG Jsp(i,j)=Jsp(i,j)+Jse(i,k)*AAp(k,j) end do end do end do c----------------calcul des gradient ponderes elementaires ------------- c les gradients sont calcules ici dans l espace des variables c d ecoulement plastique de dimension = NBTYP_PLAST*NDIMG 10 do i=1,NDIMPL c initialisation du f*gradient de f RgR(i)=0.d0 end do c --------- criteres de traction diffuse ------------------------- if(nbract.ne.0) then do jcr=1,nbract icr=lnumcrt(jcr) call fgrf3d(NDIMG,NDIMPL,NTMAX,DPFTDS,icr,JSP,FT, # PFT_GRAD_PFT,affiche_local) c actualisation du gradient complet do idir=1,NDIMPL RgR(idir)=RgR(idir)+PFT_GRAD_PFT(idir) end do end do end if c --------- criteres de cisaillement ----------------------------- resc=0.d0 if(nbracc.ne.0) then do jcr=1,nbracc icr=lnumcrc(jcr) resc=resc+FC(icr)**2 call fgrf3d(NDIMG,NDIMPL,NCMAX,DPFCDS,icr,JSP,FC, # PFC_GRAD_PFC,affiche_local) c actualisation du gradient complet do idir=1,NDIMPL RgR(idir)=RgR(idir)+PFC_GRAD_PFC(idir) end do end do end if c --------- criteres de traction decollement localise ------------ resl=0.d0 if(nbracl.ne.0) then do jcr=1,nbracl icr=lnumcrl(jcr) resl=resl+FL(icr)**2 c actualisation de la part de gradient du a sigma' call fgrf3d(NDIMG,NDIMPL,NLMAX,DPFLDS,icr,JSP,FL, # PFL_GRAD_PFL,affiche_local) c mise a jour du gradient global dans l espace des do idir=1,NDIMPL RgR(idir)=RgR(idir)+PFL_GRAD_PFL(idir) end do c actualisation de la part de gradient du a digma gel call fgrf3d(NDIMG,NDIMPL,NLMAX,DPFLDS,icr,JSGEP,FL, # PFG_GRAD_PFG,affiche_local) c mise a jour du gradient global dans l espace des do idir=1,NDIMPL RgR(idir)=RgR(idir)+PFG_GRAD_PFG(idir) end do end do end if c------------ multiplicateur plastique --------------------------------- c ---denominateur------------------------------------------------- c initialisation du produit scalaire fgradf*fgradF denom=0.d0 c ---- prise en compte des ecoulements de traction diffuse ------- if(nbract.ne.0) then do i=1,NBRACT icr=lnumcrt(i) c on limite le produit sur les ndimg du critere de traction if(ninc.eq.1) then idebut=0 else c pour les idebut des autres inclusions il faut c pouvoir calculer idebut print*,'Il manque un traitement ninc>1 ds denc3d' err1=1 return end if c contribution de ce critere sur le denominateur do idir=1,NDIMG denom=denom+ # RgR(idebut+idir)*DGFTDS(icr,idir)*FT(icr) end do end do end if c ---- prise en compte des ecoulements de cisaillement diffuse --- if(nbracc.ne.0) then do i=1,nbracc icr=lnumcrc(i) if(ninc.eq.1) then idebut=NDIMG else c pour les idebut des autres inclusions il faut c pouvoir calculer idebut print*,'Il manque un traitement ninc>1 ds denc3d' err1=1 return end if c contribution de ce critere sur le denominateur do idir=1,NDIMG denom=denom+ # RgR(idebut+idir)*DGFCDS(icr,idir)*FC(icr) end do end do end if c ----- prise en compte des ecoulements de de decollement -------- if(nbracl.ne.0) then do i=1,NBRACL icr=lnumcrl(i) if(ninc.eq.1) then idebut=2*NDIMG else c pour les idebut des autres inclusions il faut c pouvoir calculer idebut print*,'Il manque un traitement ninc>1 ds denc3d' err1=1 return end if c contribution de ce critere sur le denominateur do idir=1,NDIMG denom=denom+ # RgR(idebut+idir)*DGFLDS(icr,idir)*FL(icr) end do end do end if c ---numerateur -------------------------------------------------- c ---multiplicateur plastique generalise-------------------------- if(denom.ne.0.) then lambda=numerateur/denom else if(numerateur.lt.0.) then print*,'Dans denc3d le denominateur de lambda est nul' print*,'NBRACT traction diffuse',NBRACT do i=1,NTMAX icr=lnumcrt(i) write(*,'(a4,i3,1x,a4,i3,1x,a3,e10.3,L2)') # 'num:',i,'dir:',icr,'Ft:',ft(icr),actift(icr) end do print*,'NBRACT cisaillement',NBRACC do i=1,NCMAX icr=lnumcrc(i) write(*,'(a4,i3,1x,a4,i3,1x,a3,e10.3,L2)') # 'num:',i,'dir:',icr,'Fc:',fc(icr),actifc(icr) end do print*,'NBRACT traction decollement localise',NBRACL do i=1,NLMAX icr=lnumcrl(i) write(*,'(a4,i3,1x,a4,i3,1x,a3,e10.3,L2)') # 'num:',i,'dir:',icr,'Fl:',fl(icr),actifl(icr) end do c arret err1=1 return else print*,'Mise a zero du multiplicateur dans denc3d' lambda=0.d0 end if end if c----------- deformations plastiques ----------------------------------- c prise en compte de la relaxation du residu lambda=lambda*reduc_resg c initialisation des ecoulements do idir=1,NDIMG DEPST1(idir)=0.d0 DEPSC1(idir)=0.d0 DEPSL1(idir)=0.d0 end do c ---- prise en compte des ecoulements de traction diffuse ------- if(nbract.ne.0) then do i=1,NBRACT icr=lnumcrt(i) c contribution de ce critere sur le denominateur do idir=1,NDIMG DEPST1(idir)=DEPST1(idir)+ # lambda*DGFTDS(icr,idir)*FT(icr) end do end do end if c ---- prise en compte des ecoulements de cisaillement diffuse --- if(nbracc.ne.0) then do i=1,nbracc icr=lnumcrc(i) c contribution de ce critere sur le denominateur do idir=1,NDIMG DEPSC1(idir)=DEPSC1(idir)+ # lambda*DGFCDS(icr,idir)*FC(icr) end do end do end if c ----- prise en compte des ecoulements de decollement ----------- if(nbracl.ne.0) then do i=1,NBRACL icr=lnumcrl(i) c contribution de ce critere sur le denominateur do idir=1,NDIMG DEPSL1(idir)=DEPSL1(idir)+ # lambda*DGFLDS(icr,idir)*FL(icr) end do end do end if if(affiche_local) then do i=1,NDIMG write(*,'(A6,I2,A2,E10.3)') # 'DEPST(',i,')=',DEPST1(i) end do do i=1,NDIMG write(*,'(A6,I2,A2,E10.3)') # 'DEPSC(',i,')=',DEPSC1(i) end do do i=1,NDIMG write(*,'(A6,I2,A2,E10.3)') # 'DEPSL(',i,')=',DEPSL1(i) end do end if return end
© Cast3M 2003 - Tous droits réservés.
Mentions légales