fluo3d
C FLUO3D SOURCE FD218221 24/02/07 21:15:12 11834 SUBROUTINE FLUO3D(XMAT,NMAT,SIG0,SIGF,DEPST,NSTRS,VAR0,VARF, # NVARI,TETA1,TETA2,DT,KERRE,MFR,IFOURB,ISTEP,EPST0, # EPSTF,TREFB,NBVIA3d,INLVIA3d,NBNMAX3D,NBNB3D,IDIMB3D,XE3D) c A Sellier Nov 2023 C MFR = NUMERO DE LA FORMULATION DE L'ELEMENT FINI C = 1 MASSIF C = 33 POREUX C IFOU INDICE DU TYPE DE PROBLEME C -1 DEFORMATIONS PLANES C 0 AXISYMETRIQUE C 2 TRIDIMENSIONNEL C ISTEP=0 : CALCUL LOCAL C ISTEP=1 : PREPARATION DU 1ER PASSGE NON LOCAL C ISTEP=2 : DERNIER PASSAGE NON LOCAL EFFECTUE C ISTEP=3 : PASSAGE NON LOCAL INTERMEDIAIRE EN NON LOCAL ITERATIF C TABLES DE DIMENSION FIXE POUR RESOLUTION DES SYTEMES LINEAIRES IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C******** DECLARATION DES VARIABLES EXTERNES *************************** INTEGER NMAT,NVAR0,NVAR1,NVAR2,NVAR3,NVARI,NBVIA,ISTEP INTEGER NSTRS,KERRE,MFR,IFOURB REAL*8 XMAT(NMAT),SIG0(NSTRS),SIGF(NSTRS),DEPST(NSTRS) REAL*8 EPST0(NSTRS),EPSTF(NSTRS) REAL*8 VAR0(NVARI),VARF(NVARI) REAL*8 DT,TETA1,TETA2,TREFB C LIGNE A INCLURE DANS LES MODELES UTILISANT LES NOEUDS INTEGER NBNMAX3D,NBNB3D,IDIMB3D REAL*8 XE3D(3,NBNMAX3D) C VARIABLE LOGIQUE POUR MATRICE INIT ISOTROPE LOGICAL ISO,ORTHO PARAMETER(ISO=.false.,ORTHO=.true.) c********DECLARATION DES VARIABLES LOCALES ***************************** c nombre de parametre elastiques obligatoire en debut de xmat integer NBELAS3D c nombre de sous type de modele et de variable par tenseur (cf idvar4) integer NSTYPE,NDTENS parameter (NSTYPE=4,NDTENS=12) c nombre de parametres scalaires par sous type de modele integer VNMAT(NSTYPE) c nombre de vari scalaires par sous type de modele integer VNVARI(NSTYPE,2) c declarations locales c indicateur 1er pas logical PPAS c teneur en eau3d real*8 vw0,vwf c module 1er passage real*8 E,nu,E1,nu12,k0,mu0,k1,mu1 c numero vari integer ivar,numx,numk,numm,nx c matrices de Hoocke base d orthotropie real*8 raideuro66(6,6),souplesseo66(6,6),Po33(3,3),TPo33(3,3) c matrices de Hoocke base fixe real*8 raideurf66(6,6),souplessef66(6,6),Pf33(3,3),TPf33(3,3) c matrices de Hoockebase quelconque real*8 raideurb66(6,6),souplesseb66(6,6),Pb33(3,3),TPb33(3,3) c contraintes initiales dans la matrice real*8 sigm03(3),vsigm033(3,3),Tvsigm033(3,3) real*8 dsigm06(6),dsigm16(6) c invariant contraintes initiales real*8 sigm0d3(3),devis0,tracs0 c contraintes effectives real*8 sigeff6(6) c influence de la temperature real*8 dtherm,kthermv,kthermp c increment total de deformation mecanique real*8 epst06(6),epstf6(6),deps6(6) c influence de l eau capillaire et nano real*8 keau,knanov,kmecap c coeff de fluage de Maxwell real*8 kflum c consolidation et temps de maxwell real*8 taumc3(3),taum,CC3(3) c increment deformation totale real*8 deps33(3,3),deps3(3),Vdeps33(3,3),TVdeps33(3,3) c tenseur d orientations real*8 O333(3,3,3),DX3(3),VDX33(3,3) c increment de deformations elastiques et de contraintes real*8 depse3(3),dsig3(3) c contraintes real*8 sigm06(6),sigmf6(6) c increments de deformations anelastiques real*8 depsx3(NSTYPE,3) c coeff de fluage real*8 cflux3(NSTYPE,3) c def elastiques real*8 epse3(3),Vepse33(3,3),TVepse33(3,3) C************* PARAMETRES POUR LES RENFORTS **************************** C-INC HNBRREN C ADAPTE POUR FLUOR3D PARAMETER(NB_RENF=0) PARAMETER(NB_PARA_PAR_RENF=0) PARAMETER(NB_PARA_RENF=0) PARAMETER(NB_VARI_PAR_RENF=0) PARAMETER(NB_VARI_RENF=0) c declaration des renforts du fluendo3d si on veut les utiliser C-INC HDECREN C*********************************************************************** C************** DECLARATIONS POUR LES FIBRES ROMAIN ******************** c declaration des fibres de romain gontero si on veut les utiliser C-INC HDECFIB C*********************************************************************** C************** PARAMETRES POUR HELMHOLTZ ****************************** c lignes a inclure dans les modeles utilisant helmholtz c recuperation des dimensions des tableaux pour helmholtz -INC HNBRHEL c declaration des tableaux pour helmholtz -INC HDECHEL C c recuperation des variables d helmholtz C -INC HMATHEL C c attention il faut NVAR3 debut de la zone de Helmholtz dans les vari C NVAR3=NVARI-(NB_VARI_RENF+NB_VARI_HELM) C DO NL=1,NB_HELM C c lecture des variable internes et rangements dans helm0(nl,ii) C c et helm1(nl,ii) avec ii=1,nb_vari_par_helm C -INC HLVIHEL C END DO C*********************************************************************** c******recuperation des parametres pour les fibres si modele de fibre*** C-INC HMATFIB c*********************************************************************** c*************** recuperation des parametres pour les renforts ********* c-INC HMATREN c*********************************************************************** c*************** NOMBRE DE PARAMETRES PAR SOUS TYPE ******************** c a actualiser en fonction du contenu de idvisc c numero du sous type de modele 1 2 3 4 5 6 7 c type de sous modele : ELA,MAX,FLU,KEL,TRA,DP,CC data VNMAT /8 ,6 ,4 ,2 / c ,5 ,6 ,3 / c************** NOMBRE DE VARI ET TYPE DE VARI PAR SOUS TYPE *********** c nombre de variables scalaire par sous type c numero du sous type de modele 1 2 3 4 5 6 7 c type de sous modele : ELA,MAX,FLU,KEL,TRA,DP,CC data (VNVARI(I,1),I=1,NSTYPE) /9 ,0 ,2 ,0 / c ,3 ,2 ,3 /, c nombre de variables tensorielles par sous type c numero du sous type de modele 1 2 3 4 5 6 7 c type de sous modele : ELA,MAX,FLU,KEL,TRA,DP,CC # (VNVARI(I,2),I=1,NSTYPE) /1 ,1 ,1 ,1 / c ,1 ,1 ,1 / c print*,'debut de FLUOR3D' c verification des varf C do i=1,nvari c print*,'var0',10,'=',var0(10) C end do c read* c******* INITIALISATIONS *********************************************** c indicateur d erreur KERRE=0 c dimension de la zone des parametres elastiques dans xmat if(mfr.eq.1)then c milieu elastique if(iso) then print*,'Verifier ces valeurs dans fluor3d' NBELAS3D=4 c YOUN NU RHO ALP NBFAC3D=3 c VISQ TREF TALP kerre=1 return else if (ortho) then NBELAS3D=15 c E1 E2 E3 nu12 n23 nu 13 G12 G23 G13 V1X V1Y V1Z V2X V2Y V2Z NBFAC3D=6 c RHO ALP1 ALP2 ALP3 TREF TALP else print*,'Erreur formulation 0 dans fluor3d.eso' kerre=1 return end if else if (mfr.eq.33) then c milieu poro elastique print*,'Erreur formulation 1 dans fluor3d.eso' kerre=1 return else c cas imprevu print*,'Erreur formulation 2 dans fluor3d.eso' kerre=1 return end if c copie des var0 sur les varf avec dilution des vari scalaires call init3d(xmat,nmat,vnmat,nstype,nbelas3d,var0,varf, # nvari,vnvari,ndtens,KERRE) c print*, 'varf apres init' c print*,'varf',10,'=',varf(10) c initialisation de l indicateur de premier passage dans le modele if (var0(1).ne.1.) then ppas=.true. else ppas=.false. end if c traitements particuliers lors du premier passage if(ppas) then c controle des dimensions des listes de parametres ntest=nbelas3d do i=1,NSTYPE ntest=ntest+VNMAT(i) end do c on a supprimer les parametres de Helmholtz pour ne pas avoir c de pb de lecture des donnees ntest=ntest+0*NB_PARA_HELM+NB_PARA_RENF+NBFAC3D if(ntest.ne.nmat) then print*,'ERREUR nmat dans FLUOR3D.ESO' print*,'nmat',nmat print*,'ntest',ntest KERRE=1 do i=1,nmat print*,'xmat(',i,')=',xmat(i) end do return end if c controle des dimensions des listes de variables internes ntest=0 do i=1,NSTYPE ntest=ntest+VNvari(i,1)+VNvari(i,2)*ndtens end do ntest=ntest+NB_VARI_HELM+NB_VARI_PAR_RENF if(ntest.ne.nvari) then print*,'ERREUR nvari dans FLUOR3D.ESO' print*,'nvari',nvari print*,'ntest',ntest do i=1,nvari print*,'var0(',i,')=',var0(i) end do KERRE=1 return end if if(iso) then c initialisation des module dans les vari pour le suivi d hydratation call xmat3d(E,xmat,nmat,vnmat,nstype,nbelas3d,0,1) call xmat3d(nu,xmat,nmat,vnmat,nstype,nbelas3d,0,2) k1=E/(3.d0*(1.d0-2.d0*nu)) mu1=E/(2.d0*(1.d0+nu)) c print*,E,nu,k1,mu1 call xvar3d(k0,numk,var0,nvari,vnvari,nstype,ndtens,1,7) call xvar3d(mu0,numm,var0,nvari,vnvari,nstype,ndtens,1,8) var0(numk)=k1 var0(numm)=mu1 else if (ortho) then c initialisation des module dans les vari pour le suivi d hydratation call xmat3d(E1,xmat,nmat,vnmat,nstype,nbelas3d,0,1) call xmat3d(nu12,xmat,nmat,vnmat,nstype,nbelas3d,0,4) k1=E1/(3.d0*(1.d0-2.d0*nu12)) mu1=E1/(2.d0*(1.d0+nu12)) c print*,E,nu,k1,mu1 call xvar3d(k0,numk,var0,nvari,vnvari,nstype,ndtens,1,7) call xvar3d(mu0,numm,var0,nvari,vnvari,nstype,ndtens,1,8) var0(numk)=k1 var0(numm)=mu1 else print*,'Erreur formulation 3 dans fluor3d.eso' kerre=1 return end if end if c******* MATRICE DE RIGIDITE EN BASE D ORTHTROPIE et FIXE ************** c matrice de Hoocke en base fixe if(iso)then c matrices de raideur et de souplesse en base fixe cas isotrope call hook3d(iso,xmat,nmat,nbelas3d,KERRE, # raideurf66,souplessef66) else if(ortho) then c matrice en base d orthotropie call rior3d(xmat,nmat,nbelas,ierr1, # raideuro66,souplesseo66,Po33,TPo33) c matrice de rigidite en base fixe do i=1,3 do j=1,3 if(i.eq.j) then Pf33(i,j)=1.d0 else Pf33(i,j)=0.d0 end if end do end do call traps1(TPf33,Pf33,3) call chre66(raideuro66,raideurf66,Po33,TPo33,Pf33,TPf33) call chre66(souplesseo66,souplessef66,Po33,TPo33,Pf33,TPf33) else print*,'Erreur 4 fluor3d formulation imprevue' end if C******* TENEUR EN EAU ************************************************* if(mfr.ne.33) then c actualisation de la teneur en eau debut de pas pour le fluage c et la capillarite call xvar3d(vw0,numx,var0,nvari,vnvari,nstype,ndtens,1,2) call xmat3d(vwf,xmat,nmat,vnmat,nstype,nbelas3d,1,3) if (ppas) then c on initialise la teneur en eau pour le 1er pas var0(numx)=vwf vw0=vwf end if else call xvar3d(vw0,numx,var0,nvari,vnvari,nstype,ndtens,1,2) print*,'ERREUR2 Implementation poreux / calcul vw ds FLUOR3D' print*,'Actualiser la vari numro:', numx,' avec vwf' KERRE=1 return end if c stockage pour le prochain pas varf(numx)=vwf c******* CONTRAINTES INITIALES ***************************************** c contraintes principales en fonction des deformations elastiques c calcul en base fixe call sigp3d(nstype,var0,nvari,vnvari,ndtens,iso,raideurf66, # sigm03,vsigm033) c matrice de passage inverse call traps1(Tvsigm033,vsigm033,3) c print*,'FLUOR3D sigm03 av relaxation',sigm03 c print*,'FLUOR3D vsigm033' c call afic33(vsigm033) c relaxation de la nouvelle contrainte principale en cas c d augmentation des modules et actualisation des def visco elastiques if(iso) then call hydr3d(xmat,nmat,vnmat,nstype,nbelas3d,var0,varf, # nvari,vnvari,ndtens,iso,sigm03,souplessef66) else if (ortho) then c matrice de souplesse en base principale des contraintes call chre66(souplesseo66,souplessef66,Po33,TPo33, # vsigm033,Tvsigm033) call hydr3d(xmat,nmat,vnmat,nstype,nbelas3d,var0,varf, # nvari,vnvari,ndtens,iso,sigm03,souplessef66) else print*,'Erreur 5 fluor3d formulation imprevue' end if c print*,'FLUOR3D sigm03 apres relaxation chimique',sigm03 c ** 1-1 actualisation des parametres de fluage ******************** c prise en compte de la temperature call ther3d(xmat,nmat,vnmat,nstype,var0,varf,nvari,vnvari, # ndtens,nbelas3d,teta1,teta2,TREFB,dtherm,kthermv,kthermp) c prise en compte de l eau capillaire call eau3d(xmat,nmat,vnmat,nstype,var0,varf,nvari,vnvari, # ndtens,nbelas3d,teta1,teta2,TREFB,mfr,keau) c prise en compte de la surpression dans la nanoporosité call nano3d(xmat,nmat,vnmat,nstype,var0,varf,nvari,vnvari, # ndtens,nbelas3d,teta1,teta2,TREFB,ppas,dt,kthermv,knanov) c Amplification non lineaire du fluage entre Rc/3 et Rc call kmkf3d(xmat,nmat,vnmat,nstype,nbelas3d,sigm03,kmecap) c ** 1-2 relaxation visco elastique a deformation constante ******** c deformations elastiques initiales principales call tvar3d(epse3,Vepse33,nE,varf,nvari,vnvari,nstype,ndtens,1,1) call traps1(TVepse33,Vepse33,3) c coeff de fluage dans les directions elastiques principales initiales call cofl3d(xmat,nmat,vnmat,nstype,var0,varf,nvari,vnvari, # ndtens,nbelas3d,Vepse33,dt,kthermv,kthermp,kmecap,keau, # knanov,cflux3) C print*,'FLUOR3D avant rela coeff de fluage ' C do ityp=1,4 C do j=1,3 C print*,ityp,j,cflux3(ityp,j) C end do C end do c raideur en base principale des deformations elastiques call chre66(raideuro66,raideurb66,Po33,TPo33,Vepse33,TVepse33) c relaxation visco elastique c print*, 'varf avant relaxation' call rela3d(xmat,nmat,vnmat,nstype,nbelas3d,var0,varf,nvari, # vnvari,ndtens,KERRE,iso,cflux3,raideurb66,sigm03,vsigm033) c expression de sigm0 en base fixe call orie3d(vsigm033,O333) do i=1,6 sigm06(i)=0.d0 end do c print*,'aff0 ds FLUOR3D',sigm06,sigm03,O333 call incv3d(sigm06,sigm03,O333) c print*,'FLUOR3D sigm03 ap relaxation des contraintes init',sigm03 c read* c print*, 'varf apres reeevaluation contrainte 1' c print*,'varf',10,'=',varf(10) c******* INCREMENT TOTAL DE DEFORMATION MECANIQUE ********************** c chargement increment de deformation imposee et deformation finale c remarque 4-5-6 sont des gama jusqu ici, ensuite des epsilons if(nstrs.lt.6) then do i=1,nstrs deps6(i)=DEPST(i) epstf6(i)=epstf(i) epst06(i)=epst0(i) end do do i=nstrs+1,6 deps6(i)=0.d0 epstf6(i)=0.d0 epst06(i)=0.d0 end do else do i=1,6 deps6(i)=DEPST(i) epstf6(i)=epstf(i) epst06(i)=epst0(i) end do end if c passage gama en epsilon do i=4,6 deps6(i)=0.5d0*deps6(i) epstf6(i)=0.5d0*epstf6(i) epst06(i)=0.5d0*epst06(i) end do c******* TIR VISCO ELASTIQUE ******************************************* c diagonalisation du tenseur des increments de deformation call x6x33(deps6,deps33) c valeurs principales des increments call b3_v33(deps33,deps3,Vdeps33) c matrice de passage inverse call traps1(TVdeps33,Vdeps33,3) c tenseurs d orientations des increments call orie3d(Vdeps33,O333) c print*,'aff1 cm3d',deps33,deps3,Vdeps33 c coeff visco elastique dans la base principele de l increment call cofl3d(xmat,nmat,vnmat,nstype,var0,varf,nvari,vnvari, # ndtens,nbelas3d,Vdeps33,dt,kthermv,kthermp,kmecap,keau, # knanov,cflux3) C print*,'aff2 cm3d' C do ityp=1,4 C do j=1,3 C print*,ityp,j,cflux3(ityp,j) C end do C end do C read* c resolution visco elastique en base principales do i=1,3 c deformation elastique (ityp=1) depsx3(1,i)=deps3(i)/(1.d0+cflux3(1,i)) c deformations visqueuses (itype=2,3,4) do ityp=2,4 depsx3(ityp,i)=depsx3(1,i)*cflux3(ityp,i) end do c deformations plastiques (itype=5,..,nstype) do ityp=5,nstype depsx3(ityp,i)=0.d0 end do end do c mise a jour des increments de deformation visco elastiques do ityp=1,4 do i=1,3 dx3(i)=depsx3(ityp,i) end do c print*,'info envoyee a majt3d',ityp,1 c print*,'valeurs',DX3 c print*,'orientatio',O333 call majt3d(DX3,O333,varf,nvari,vnvari,nstype, # ndtens,ityp,1) end do c print*, 'varf apres increment visco elastique' c print*,'varf',10,'=',varf(10) c increments de contraintes if(iso) then do i=1,3 dsig3(i)=0.d0 do j=1,3 dsig3(i)=dsig3(i)+raideur66f(i,j)*depsx3(1,j) end do end do c nouvelle valeur des contraintes do i=1,6 sigmf6(i)=sigm06(i) end do call incv3d(sigmf6,dsig3,O333) else c print*,'base des increments deps' c call afic33(Vdeps33) c passage matrice de raideur base principale de l increment call chre66(raideuro66,raideurb66,Po33,TPo33,Vdeps33,TVdeps33) c calcul des 6 increments de contraintes en fonction des 3 depse C print*,'raideuro' C call afic66(raideuro66) C print*,'raideurb' C call afic66(raideurb66) C print*,'depse' C do i=1,3 C print*,'depse(',i,')=',depsx3(1,i) C end do do i=1,6 dsigm16(i)=0.d0 do j=1,3 dsigm16(i)=dsigm16(i)+raideurb66(i,j)*depsx3(1,j) end do end do c retour de l increment de contrainte en base fixe call chrep6(dsigm16,TVdeps33,.false.,dsigm06) do i=1,6 sigmf6(i)=sigm06(i)+dsigm06(i) c print*,'fluo3d sigmf(',i,')=',sigmf6(i) end do c read* end if c print*,'aff3 FLUOR3D apres tir visco elastique sigmf6',sigmf6 c print*, 'varf apres increment contrainte visco elastique' c print*,'varf',10,'=',varf(10) c******* EVALUATION DES CRITERES *************************************** c chargement des tenseurs de plasticité pour les ecrouissages c do ityp=5,nstype c call tvar3d(dx3,vdx33,nx,var0,nvari,vnvari,nstype,ndtens,ityp,1) c end do c *** re-mise a zero de tous les increments de deformation ********* do ityp=1,nstype do i=1,3 depsx3(ityp,i)=0.d0 end do end do c *** evaluation et tri des criteres actifs ************************ na=0 c *** gestion de l ecoulement plastique **************************** if(na.ne.0) then c *** ecoulement plastique *************************************** print*,'Ecoulement plastique' c *** mise a jour des deformations ******************************* do ityp=1,nstype do i=1,3 dx3(j)=depsx3(ityp,i) end do call majt3d(dx3,O333,varf,nvari,vnvari,nstype, # ndtens,ityp,1) end do end if c print*,'varf apres plasticite' c print*,'varf',10,'=',varf(10) c****** FIN DE L ECOULEMENT PLASTIQUE ********************************** c****** TRANSFERT DES CONTRAINTES VERS LES POINTS DE GAUSS ************* do i=1,nstrs sigf(i)=sigmf6(i) c print*,'sigf(',i,')=',sigf(i) end do c read* c indicateur de fin de 1er pas if(ppas.and.((istep.eq.2).or.(istep.eq.0))) then varf(1)=1.d0 else if(ppas) then varf(1)=0.d0 else varf(1)=var0(1) end if end if c*********************************************************************** c VARIABLES INTERNES A ACTUALISER POUR LES FORMULATIONS DE HELMHOLTZ C*********************************************************************** c sauvegarde des vari de helmholtz HELM1(NL,ii=1..NBR_VARI_HELM) C do NL=1,NB_HELM C -INC HEVIHEL C end do c print*,'fin de FLUOR3D' c verification des varf C do i=1,nvari c print*,'varf',10,'=',varf(10) C end do c read* return end c fin c***********************************************************************
© Cast3M 2003 - Tous droits réservés.
Mentions légales