alon2
C ALON2 SOURCE CHAT 05/01/12 21:20:54 5004
. RSIGF,VARF,RDEFP,KERRE,IB,IGAU)
*
*============================================================
*
* Modèle d'argile partiellement saturé d'ALONSO
*
*============================================================
*
* ENTREES
*-----------------------------
*
* Pat0 : pression atmosphérique
* XMAT : champ des caractéristiques materiau
* DEPM : incrément des déformations plastiques
* RSIG0 : contraintes initiales
* VAR0 : variables internes initiales
* IB : numéro de l'élément
* IGAU : numéro du point de Gauss
*
* SORTIES
*-----------------------------
*
* RSIGF : contraintes finales
* VARF : variables internes finales
* RDEFP : increment de déformation plastique au cours du pas
* KERRE : message d'erreur
*
*============================================================
* ICI IL FAUT PROGRAMMER EN FORTRAN PUR
*=============================================================
*
IMPLICIT INTEGER(I-N)
IMPLICIT REAL*8(A-H,O-Z)
*
DIMENSION VAR0(*),VARF(*),XMAT(*)
DIMENSION RSIG0(*),RSIGF(*),RDEFP(*)
DIMENSION DEPM(*)
DIMENSION DEPT(6),DEVT(6),SIGT(6),DEFT(6),DEPM0(6)
*
*
* Données du materiau
*===========================================================
*
YOUN0=XMAT(1)
XNU0=XMAT(2)
XKS0=XMAT(5)
XLAM0=XMAT(6)
XM0=XMAT(7)
XKK0=XMAT(8)
PC00=XMAT(9)
P0=XMAT(10)
XLAM1=XMAT(11)
T0=XMAT(12)
TAU0=XMAT(13)
XG0=XMAT(14)
XK0=XMAT(15)
XE0=XMAT(16)
*
* Quelques initialisations
*=============================================================
*
*---> Terme GAMA0 intervenant dans l'écoulement non associatif
*
GAMA0=XM0*(XM0-9.D0)*(XM0-3.D0)*XLAM1
GAMA0=GAMA0/(9.D0*(6.D0-XM0)*(XLAM1-XK0))
*
*---> Initialisations des sous incrémentations
*
recal0=-100.D0
iter2=0
nmax0=1
93 DO 100 I=1,6
DEPM0(I)=DEPM(I)/nmax0
SIGT(I)=RSIG0(I)
DEFT(I)=0.D0
100 CONTINUE
PRES00=-1.D0*(RSIG0(1)+RSIG0(2)+RSIG0(3))/3.D0
*
*---> Variables internes initiales
* . pression de consolidation à l'état saturé
* . limite élastique en succion
* . succions initiale et finale
* La succion finale est déstinée à etre calculée au préalable
* dans un opérateur particulier indépendant de ECOULE
*
VOLU0=1.D0+XE0
PC0=VAR0(2)
IF (PC0.LE.1.D-30) PC0=PC00
SLIM0=VAR0(3)
SUCI0=VAR0(4)
*
* MODIF POUR CAS SATURE
*
SUCAUX=VARF(4)
IF(SUCI0.LT.0.D0) THEN
SUCI0=0.D0
ENDIF
IF(SUCAUX.LT.0.D0) THEN
SUCAUX=0.D0
ENDIF
*
PC1=PC0
SLIM1=SLIM0
*
*---> Succion a la fin de la sous incrementation
*
95 iter2=iter2+1
SUCF0=iter2*(SUCAUX-SUCI0)/nmax0+SUCI0
*
* MODIF POUR CAS SATURE
*
IF(SUCF0.LT.0.D0) THEN
SUCF0=0.D0
ENDIF
*
*---> Pente élasto-plastique (courbe de consolidation)
*
XLAM2=XLAM1*((1.D0-T0)*EXP(-1.D0*TAU0*SUCF0)+T0)
*
*---> Pression de saturation
*
PS0=XKK0*SUCF0
*
*
* Calcul élastique test
*================================================================
*
*---> Déformations élastiques test et déformation plastique
*
DO 11 I=1,6
A=0.D0
IF (I.LE.3) A=1.D0
DEPT(I)=DEPM0(I)
11 CONTINUE
*
*---> Contraintes
*
PRES0=-1.D0*(SIGT(1)+SIGT(2)+SIGT(3))/3.D0
TREPS0=DEPT(1)+DEPT(2)+DEPT(3)
PRES1=PRES0*EXP(-1.D0*VOLU0/XK0*TREPS0)
DO 12 I=1,6
A=0.D0
IF (I.LE.3) A=1.D0
DEVT(I)=SIGT(I)+PRES0*A
DEVT(I)=DEVT(I)+2.D0*XG0*(DEPT(I)-TREPS0/3.D0*A)
SIGT(I)=DEVT(I)-PRES1*A
12 CONTINUE
*
*---> Contrainte équivalente
*
IF (STEST2.LE.1.D-10) STEST2=0.D0
Stest=(STEST2)**(0.5D0)
*
*---> Pression de consolidation
* . à l'état saturé
* . à la succion finale
*
PCS1=P0*((PC1/P0)**((XLAM1-XK0)/(XLAM2-XK0)))
*
*---> Fonction de charge
*
PHIT=Stest*Stest+XM0*XM0*(PRES1+PS0)*(PRES1-PCS1)
*
*
*
* Vérification du critère de plasticité
*=========================================================
*
*---> Erreur admise
*
ERR0=1.D-7*ABS(PHIT)
ERR0=MAX(ERR0,1.D-10*YOUN0)
*
*---> Critère de plasticité
*
PHI0=PHIT
iter0=0
*
99 IF (PHI0.LE.ERR0) THEN
*
* On est élastique
*=========================================================
*
*
DO 400 I=1,6
RSIGF(I)=SIGT(I)
RDEFP(I)=DEFT(I)
A=0.D0
IF (I.LE.3) A=1.D0
DEVT(I)=DEFT(I)-(DEFT(1)+DEFT(2)+DEFT(3))/3.D0*A
400 CONTINUE
IF (EPSPT.LE.1.D-20) EPSPT=0.D0
EPSPT=(2.D0/3.D0*EPSPT)**.5D0
VARF(1)=VAR0(1)+EPSPT
VARF(2)=PC1
VARF(3)=MAX(SLIM1,0.D0)
*
ELSE
*
* On plastifie
*=========================================================
*
*---> Condition de consistance: calcul du paramètre plastique
*
DF1=XM0*XM0*(2.D0*PRES1+PS0-PCS1)
DF2=XM0*XM0*(PRES1+PS0)*(XLAM1-XK0)/(XLAM2-XK0)
***** DF2=DF2*((PC1/P0)**((XLAM1-XLAM2)/(XLAM1-XK0)))
***** AM 10/12/03
DF2=DF2*((PC1/P0)**((XLAM1-XLAM2)/(XLAM2-XK0)))
denom0=12.D0*Stest*Stest*XG0*GAMA0
denom0=denom0+DF1*PRES1*VOLU0/XK0*DF1
denom0=denom0+DF2*PC1*VOLU0/(XLAM1-XK0)*DF1
*
dlam0=PHIT/denom0
*
*
*---> Critères de sous incrémentation
*
IF (recal0.LT.0.D0) THEN
*
xmax0=2000.D0
xmax1=0.D0
xmax2=0.D0
xnum0=100.D0
*
cri0=ABS(VOLU0/XK0*DF1*dlam0)
IF (cri0.GT.1.D-2) THEN
xmax1=xnum0*cri0+10.D0
ENDIF
*
cri1=ABS(VOLU0/(XK0-XLAM1)*DF1*dlam0)
IF (cri1.GT.1.D-2) THEN
xmax2=xnum0*cri1+10.D0
ENDIF
*
xmax00=xmax2
IF (xmax1.GE.xmax2) xmax00=xmax1
IF (xmax00.GE.xmax0) xmax00=xmax0
nmax00=NINT(xmax00)
IF (nmax00.GT.nmax0) nmax0=nmax00
recal0=100.D0
*
IF (nmax0.GT.1) THEN
iter2=0
GOTO 93
ENDIF
*
ENDIF
*
*---> Mise à jour des contraintes
*
PRES1=PRES1*EXP(-1.D0*VOLU0/XK0*DF1*dlam0)
DO 10 I=1,6
A=0.D0
IF (I.LE.3) A=1.D0
DEVT(I)=DEVT(I)-6.D0*XG0*DEVT(I)*GAMA0*dlam0
SIGT(I)=DEVT(I)-PRES1*A
10 CONTINUE
*
*---> Mise à jour de la pression de consolidation
* . dans le domaine saturé
* . à la succion finale
*
PC1=PC1*EXP(VOLU0/(XLAM1-XK0)*DF1*dlam0)
PCS1=P0*((PC1/P0)**((XLAM1-XK0)/(XLAM2-XK0)))
*
*---> Déformation élastiques et plastiques
*
TREPS0=-1.D0*XK0/VOLU0*LOG(PRES1/PRES00)
DO 20 I=1,6
A=0.D0
IF (I.LE.3) A=1.D0
DEPT(I)=(DEVT(I)-RSIG0(I)-PRES00*A)/(2.D0*XG0)
DEPT(I)=DEPT(I)+TREPS0/3.D0*A
DEFT(I)=iter2*DEPM(I)/nmax0-DEPT(I)
20 CONTINUE
TREPP0=DEFT(1)+DEFT(2)+DEFT(3)
*
*---> Mise à jour de la limite en succion
*
SLIM1=(SLIM0+Pat0)*EXP(VOLU0/(XKS0-XLAM0)*TREPP0)-Pat0
*
*---> Mise à jour de la contrainte équivalente
*
IF (STEST2.LE.1.D-10) STEST2=0.D0
Stest=(STEST2)**(0.5D0)
*
*---> Mise à jour de la fonction de charge
*
PHIT=Stest*Stest+XM0*XM0*(PRES1+PS0)*(PRES1-PCS1)
PHI0=ABS(PHIT)
*
*---> Test de convergence ou itération suivante
*
iter0=iter0+1
IF (iter0.LT.200) THEN
GOTO 99
ELSE
PHI0=0.D0
KERRE=460
GOTO 99
ENDIF
*
ENDIF
*
*
* Vérification des sous incrémentations
*
IF ((iter2.LT.nmax0).AND.(KERRE.EQ.0)) THEN
GOTO 95
ENDIF
*
*
*
*
RETURN
END
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales