flufib
C FLUFIB SOURCE PV090527 24/06/12 21:15:04 11940
& NPROPS,NVAR)
C-----------------------------------------------------------------------
C RESOLUTION DES MODELES DE FLUAGE POUR LES POUTRES A FIBRE
C - Implementation des lois de fluage pour les modeles de poutre
C a fibre (modeles de section)
C - Les modeles sont ecrits en dimension 1, dans la direction des
C fibres de la poutre. Ainsi :
C -- la contrainte equivalente est definie comme la valeur absolue
C de la contrainte axiale (composante XX)
C -- la vitesse de deformation equivalente de fluage est definie
C comme la valeur absolue de la vitesse de deformation de
C fluage axiale (composante XX)
C - Le schema d'integration est de type Runge-Kutta a l'ordre 4
C avec controle de l'erreur et adaptation du pas de temps
C - Liste des modeles de fluage actuelement disponibles:
C -- Norton (IMOD=15)
C -- Polynomial (IMOD=16)
C -- Blackburn (IMOD=17)
C -- Blackburn 2 (IMOD=18)
C -- Lemaitre (IMOD=19)
C Francois Di Paola (nov 2019)
C-----------------------------------------------------------------------
C
C Entrees
C -------
C IMOD : Numero du modele a fibre
C PROPS : Caracteristiques du materiaux
C NPROPS : Taille du tableau PROPS
C DEPS : Increment de deformations totales sur le pas de temps (modele section)
C SIG0 : Contraintes au debut du pas de temps (modele section)
C VAR0 : Variables internes au debut du pas de temps
C NVAR : Taille du tableau VAR0 (et aussi VARF)
C TIME0 : Instant initial (debut du pas de temps)
C TIMEF : Instant final (fin du pas de temps)
C
C Sorties
C -------
C SIGF : Contraintes a la fin du pas de temps (modele section)
C VARF : Variables internes a la fin du pas de temps
C
C
C Detail des composantes de materiau
C ----------------------------------
C PROPS(1) : 'YOUN' Module de Young
C PROPS(2) : 'NU ' Coefficient de Poisson
C PROPS(3) : 'RHO ' Masse volumique
C PROPS(4) : 'ALPH' Coefficient de dilatation thermique
C PROPS(.) : puis les autres composantes, selon le modele
C
C Detail des composantes des variables
C ------------------------------------
C DEPS(1) = D Epsilon_xx SIG0(1) SIGF(1) = Sig_xx
C DEPS(2) = D Gamma_xy SIG0(2) SIGF(2) = Sig_xy
C DEPS(3) = D Gamma_xz SIG0(3) SIGF(3) = Sig_xz
C
C
C-----------------------------------------------------------------------
C
C Quelques declarations
IMPLICIT INTEGER(I-N)
IMPLICIT REAL*8(A-H,O-Z)
PARAMETER(XZER=0.D0,XPETIT=1.D-6,
& UNDEMI=0.5D0,UN=1.D0,DEUX=2.D0,TROIS=3.D0,SIX=6.D0)
C
C Declaration de quelques tableaux d'entree/sortie de la subroutine
REAL*8 PROPS(NPROPS),DEPS(3),SIG0(3),VAR0(NVAR),SIGF(3),VARF(NVAR)
C
LOGICAL DTLIBR
C
C=======================================================================
C 1 - Recuperation de l'etat mecanique au debut du pas
C=======================================================================
C Pas de temps
DT=TIMEF-TIME0
C Contrainte au debut du pas
SIG=SIG0(1)
C Variables internes au debut du pas
IF (IMOD.EQ.19) THEN
XXIN=VAR0(1)
EPSIN=VAR0(2)
ELSE
EPSIN=VAR0(1)
ENDIF
C Increment de deformation totale sur le pas
DEPST=DEPS(1)
C Recuperation des parametres materiau
YOU=PROPS(1)
XNU=PROPS(2)
G=YOU/(DEUX*(UN+XNU))
C
C=======================================================================
C 2 - Initialisations pour le schema de Runge-Kutta 4
C=======================================================================
PRECIS=1.D-5
DTLIBR=.TRUE.
IF (DT.LT.0.0) THEN
PRINT*,'ERREUR DT < 0 !'
RETURN
ENDIF
IF (DT.EQ.0.0) DT=1.D-20
VSIG= YOU*DEPST/DT
DTLEFT=DT
BORNE=2.0
RMAX=1.3
RMIN=0.7
DIV=7.0
FAC=3.0
MSOUPA=10000
XMAX=YOU*1.D-3
C
C=======================================================================
C 3 - Initialisations avant iterations en sous-increments
C=======================================================================
ITERO=0
10 CONTINUE
ITERO=1+ITERO
IF (ITERO.NE.1) THEN
DTLIBR=.TRUE.
PRECIS=PRECIS*7.D0
IF (ITERO.GT.3) THEN
PRINT*,'ERREUR : INCREMENT DE CHARGEMENT TROP GRAND !'
RETURN
ENDIF
ENDIF
DTLEFT=DT
TAU=DTLEFT
ASIG=ABS(SIG)
ERRABS=PRECIS*ASIG
IF (XMAX.GT.ASIG) ERRABS=PRECIS*XMAX
C
C=======================================================================
C 4 - Iterations en sous increments / fin si DTLEFT = 0
C=======================================================================
NSSINC=0
NITERA=0
20 CONTINUE
NSSINC=NSSINC+1
IF (NSSINC.GT.MSOUPA) THEN
DTLIBR=.FALSE.
GOTO 10
ENDIF
C [1.1] Vitesses de contrainte et de deformation inelastique a partir de l'etat debut du pas
SEQ=ABS(SIG)
IF (SEQ.LT.XPETIT) THEN
VEPSIN1=XZER
IF (IMOD.EQ.19) VXX1=XZER
ELSE
C Modele de Norton
IF(IMOD.EQ.15) THEN
C Modele Polynomial
ELSEIF(IMOD.EQ.16) THEN
VEPSIN1=PROPS(6)+PROPS(7)*(SEQ**PROPS(8))+
& PROPS(9)*(SEQ**PROPS(10)) +
& PROPS(11)*(SEQ**PROPS(12))
C Modele de Blackburn
ELSEIF(IMOD.EQ.17) THEN
IF(TIMEX.LT.TAU) TIMEX=ABS(TAU)
VEPSIN1=VEPSINA+VEPSINB
C Modele de Blackburn_2
ELSEIF(IMOD.EQ.18) THEN
IF(TIMEX.LT.TAU) TIMEX=ABS(TAU)
VEPSIN1=VEPSINA+VEPSINB
C Modele de Lemaitre
ELSEIF(IMOD.EQ.19) THEN
ENDIF
ENDIF
VSIG1=DSIGN(YOU*VEPSIN1,SIG)
C Debut des iterations sur tau optimal / fin si RA
NITERA=0
30 CONTINUE
NITERA=NITERA+1
TAU2=TAU*UNDEMI
C [1.2] 1ere estimation a mi-pas, avec la vitesse debut de pas
SIG1=SIG+(TAU2*(VSIG-VSIG1))
EPSIN1=EPSIN+TAU2*VEPSIN1
IF (IMOD.EQ.19) XX1=XXIN+TAU2*VXX1
C [2.1] Vitesses de contrainte et de deformation inelastique a partir de l'etat a mi-pas [1.2]
SEQ1=ABS(SIG1)
IF (SEQ1.LT.XPETIT) THEN
VEPSIN2=XZER
IF (IMOD.EQ.19) VXX2=XZER
ELSE
C Modele de Norton
IF(IMOD.EQ.15) THEN
& VEPSIN2)
C Modele Polynomial
ELSEIF(IMOD.EQ.16) THEN
VEPSIN2=PROPS(6)+PROPS(7)*(SEQ1**PROPS(8))+
& PROPS(9)*(SEQ1**PROPS(10)) +
& PROPS(11)*(SEQ1**PROPS(12))
C Modele de Blackburn
ELSEIF(IMOD.EQ.17) THEN
IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
VEPSIN2=VEPSINA+VEPSINB
C Modele de Blackburn_2
ELSEIF(IMOD.EQ.18) THEN
IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
VEPSIN2=VEPSINA+VEPSINB
C Modele de Lemaitre
ELSEIF(IMOD.EQ.19) THEN
ENDIF
ENDIF
VSIG2=DSIGN(YOU*VEPSIN2,SIG1)
C [2.2] 2nde estimation a mi-pas, avec la vitesse moyenne sur le mi-pas
VEPSIN12=UNDEMI*(VEPSIN1+VEPSIN2)
VSIG12=UNDEMI*(VSIG1+VSIG2)
SIG2=SIG+(TAU2*(VSIG-VSIG12))
EPSIN2=EPSIN+TAU2*VEPSIN12
IF (IMOD.EQ.19) XX2=XXIN+TAU2*(UNDEMI*(VXX1+VXX2))
C [3.1] Vitesses de contrainte et de deformation inelastique a partir de l'etat a mi-pas [2.2]
SEQ2=ABS(SIG2)
IF (SEQ2.LT.XPETIT) THEN
VEPSIN3=XZER
IF (IMOD.EQ.19) VXX3=XZER
ELSE
C Modele de Norton
IF(IMOD.EQ.15) THEN
& VEPSIN3)
C Modele Polynomial
ELSEIF(IMOD.EQ.16) THEN
VEPSIN3=PROPS(6)+PROPS(7)*(SEQ2**PROPS(8))+
& PROPS(9)*(SEQ2**PROPS(10)) +
& PROPS(11)*(SEQ2**PROPS(12))
C Modele de Blackburn
ELSEIF(IMOD.EQ.17) THEN
IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
VEPSIN3=VEPSINA+VEPSINB
C Modele de Blackburn_2
ELSEIF(IMOD.EQ.18) THEN
IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
VEPSIN3=VEPSINA+VEPSINB
C Modele de Lemaitre
ELSEIF(IMOD.EQ.19) THEN
ENDIF
ENDIF
VSIG3=DSIGN(YOU*VEPSIN3,SIG2)
C [3.2] 1ere estimation a la fin du pas, avec la vitesse a mi-pas
SIG3=SIG2+(TAU2*(VSIG-VSIG3))
EPSIN3=EPSIN2+TAU2*VEPSIN3
IF (IMOD.EQ.19) XX3=XXIN+TAU2*VXX3
C [4.1] Vitesses de contrainte et de deformation inelastique a partir de l'etat a la fin du pas [3.2]
SEQ3=ABS(SIG3)
IF (SEQ3.LT.XPETIT) THEN
VEPSIN4=XZER
IF (IMOD.EQ.19) VXX4=XZER
ELSE
C Modele de Norton
IF(IMOD.EQ.15) THEN
& VEPSIN4)
C Modele Polynomial
ELSEIF(IMOD.EQ.16) THEN
VEPSIN4=PROPS(6)+PROPS(7)*(SEQ3**PROPS(8))+
& PROPS(9)*(SEQ3**PROPS(10)) +
& PROPS(11)*(SEQ3**PROPS(12))
C Modele de Blackburn
ELSEIF(IMOD.EQ.17) THEN
IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
VEPSIN4=VEPSINA+VEPSINB
C Modele de Blackburn_2
ELSEIF(IMOD.EQ.18) THEN
IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
VEPSIN4=VEPSINA+VEPSINB
C Modele de Lemaitre
ELSEIF(IMOD.EQ.19) THEN
ENDIF
ENDIF
VSIG4=DSIGN(YOU*VEPSIN4,SIG3)
C [4.2] 2nde estimation a la fin du pas, avec la vitesse moyenne sur le mi-pas
VEPSIN34=UNDEMI*(VEPSIN3+VEPSIN4)
VSIG34=UNDEMI*(VSIG3+VSIG4)
SIG4=SIG2+(TAU2*(VSIG-VSIG34))
EPSIN4=EPSIN2+TAU2*VEPSIN34
IF (IMOD.EQ.19) XX4=XXIN+TAU2*(UNDEMI*(VXX3+VXX4))
C [5.1] Vitesse de contrainte et de deformation inelastique a partir de l'etat a la fin du pas [4.2]
SEQ4=ABS(SIG4)
IF (SEQ4.LT.XPETIT) THEN
VEPSIN5=XZER
IF (IMOD.EQ.19) VXX5=XZER
ELSE
C Modele de Norton
IF(IMOD.EQ.15) THEN
& VEPSIN5)
C Modele Polynomial
ELSEIF(IMOD.EQ.16) THEN
VEPSIN5=PROPS(6)+PROPS(7)*(SEQ4**PROPS(8))+
& PROPS(9)*(SEQ4**PROPS(10)) +
& PROPS(11)*(SEQ4**PROPS(12))
C Modele de Blackburn
ELSEIF(IMOD.EQ.17) THEN
IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
VEPSIN5=VEPSINA+VEPSINB
C Modele de Blackburn_2
ELSEIF(IMOD.EQ.18) THEN
IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
VEPSIN5=VEPSINA+VEPSINB
C Modele de Lemaitre
ELSEIF(IMOD.EQ.19) THEN
ENDIF
ENDIF
VSIG5=DSIGN(YOU*VEPSIN5,SIG4)
C [5.2] 3eme estimation a la fin du pas avec les vitesses debut [1.1], mi [3.1] et fin de pas [5.1]
VEPSI135=((VEPSIN1+VEPSIN5)/SIX)+(VEPSIN3*DEUX/TROIS)
VSIG135=((VSIG1+VSIG5)/SIX)+(VSIG3*DEUX/TROIS)
SIG5=SIG+(TAU*(VSIG-VSIG135))
EPSIN5=EPSIN+TAU*VEPSI135
IF (IMOD.EQ.19) VXX135=((VXX1+VXX5)/SIX)+(VXX3*DEUX/TROIS)
IF (IMOD.EQ.19) XX5=XXIN+TAU*VXX135
C Calcul du rapport : erreur calculee / erreur admise
XX=SIG5-SIG4
RA=ABS(XX)/ERRABS
SQRA=SQRT(RA)
C Test de fin d'iterations / mise a jour de tau
C DIV =7 BORNE = 2
C Si SQRA>7 alors TAU = TAU/7 puis nouvel essai
C Si 2<RA<7*7 on vise RA = 1 puis nouvel essai
IF (DTLIBR) THEN
C Petite ruse pour dejouer l'optimisation
RA1=RA*UN
IF ((RA.GT.DIV*DIV).OR.(RA.NE.RA1)) THEN
TAU=TAU/DIV
IF(TAU.LT.1.D-30) THEN
ENDIF
*** TTAUF=TTAU0+TAU
GOTO 30
ELSEIF (RA.GT.BORNE) THEN
TAU = TAU/SQRA
IF(TAU.LT.1.D-30) THEN
ENDIF
*** TTAUF=TTAU0+TAU
GOTO 30
ENDIF
ENDIF
C
C Fin des iterations sur tau optimal / mise a jour des variables
C Ici RA < BORNE
C On avance en temps
SIG=SIG4
EPSIN=EPSIN+TAU2*(VEPSIN12+VEPSIN34)
IF (IMOD.EQ.19) XXIN=XX5
C Test de fin des iterations en sous increments / mise a jour de tau
C Si SQRA<1/3 TAU = TAU*3
C Si 1/3<SQRA<RMIN on vise RA = 1
C Si RMIN<SQRA<RMAX TAU inchange
C Si SQRA>RMAX on vise RA = 1
C Fin des boucles en sous increments si tau = DTLEFT
IF (TAU.LT.DTLEFT) THEN
*** TTAU0=TTAU0+TAU
DTLEFT=DTLEFT-TAU
IF (FAC*SQRA.LT.UN) THEN
TAU=TAU*FAC
ELSEIF ((SQRA.LT.RMIN).OR.(SQRA.GT.RMAX)) THEN
TAU=TAU/SQRA
ENDIF
IF (TAU.GT.DTLEFT) TAU=DTLEFT
*** TTAUF=TTAU0+TAU
GOTO 20
ENDIF
C Ici, on a atteint une subdivision du pas de temps trop petite,
C --> on sort en erreur
IF (ABS(TAU-DTLEFT).GT.(TAU/1000.)) THEN
PRINT*,'ERREUR NBR. MAX. DE SUBDIVISION DU PAS DE TEMPS ATTEINT'
RETURN
ENDIF
C
C=======================================================================
C 5 - Stockage des resultats et sortie
C=======================================================================
SIGF(1)=SIG
SIGF(2)=SIG0(2)+(G*DEPS(2))
SIGF(3)=SIG0(3)+(G*DEPS(3))
IF (IMOD.EQ.19) THEN
VARF(1)=XXIN
VARF(2)=EPSIN
ELSE
VARF(1)=EPSIN
ENDIF
C Sortie du programme
RETURN
END
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales