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