gurso2
C GURSO2 SOURCE JB251061 22/12/21 21:15:04 11521 C GURSO2 SOURCE FD218221 17/09/07 21:15:02 9528 1 DSIGT,NCOMAT,SIG0,VAR0,XMAT,XCAR,NVARI,ICARA, 2 SIGF,VARF,DEFP,TRAC,KERRE,necou) * *_________________________________________________________________ * * * ENTREES : * --------- * * DEPST = INCREMENT DE DEFORMATIONS TOTALES * NSTRS = NBRE DE COMPOSANTES DES DEFORMATIONS * NCOMAT= NBRE DE CARACTERISTIQUES MECANIQUES DU MATERIAU * MFR1 = NUMERO DE LA FORMULATION * IB = NUMERO DE L ELEMENT COURANT * IGAU = NUMERO DU POINT COURANT * NVARI = NBRE DE VARIABLES INTERNES * SIG0(NSTRS) = CONTRAINTES AU DEBUT DU PAS D'INTEGRATION * VAR0(NVARI) = VARIABLES INTERNES AU DEBUT DU PAS DE TEMPS * XMAT(NCOMAT) = CARACTERISTIQUES MECANIQUES DU MATERIAU * ICARA = NBRE DE CARACTERISTIQUES GEOMETRIQUES DES ELEMENTS FINIS * XCARA(ICARA) = CARACTERISTIQUES GEOMETRIQUES DES ELEMENTS FINIS * TRAC = COURBE DE TRACTION NON ENDOMMAGEE * * SORTIE : * -------- * * SIGF(NSTRS) = CONTRAINTES FINALES * VARF(NVARI) = VARIALES INTERNES A LA FIN DU PAS D'INTEGRATION * DEFP(NSTRS) = INCREMENT DE DEFORMATION PLASTIQUE A LA FIN * DU PAS D'INTEGRATION * ============================================================ * ICI IL FAUT PROGRAMMER EN FORTRAN PUR *============================================================= * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) * -INC CCREEL -INC PPARAM -INC CCOPTIO * SEGMENT NECOU * COMMON/NECOU/NCOURB,IPLAST,IT,IMAPLA,ISOTRO, INTEGER NCOURB,IPLAST,IT,IMAPLA,ISOTRO, . ITYP,IFOURB,IFLUAG, . ICINE,ITHER,IFLUPL,ICYCL,IBI, . JFLUAG,KFLUAG,LFLUAG, . IRELAX,JNTRIN,MFLUAG,JSOUFL,JGRDEF ENDSEGMENT C COMMON/NECOU/NCOURB,IPLAST,IT,IMAPLA,ISOTRO, C . ITYP,IFOURB,IFLUAG, C . ICINE,ITHER,IFLUPL,ICYCL,IBI, C . JFLUAG,KFLUAG,LFLUAG, C . IRELAX,JNTRIN,MFLUAG,JSOUFL,JGRDEF * DIMENSION SIG0(*),DEPST(*),VAR0(*),XMAT(*),XCAR(*),SIGF(*), & VARF(*),DEFP(*),DSIGT(*),TRAC(*) DIMENSION RDEPS0(6) DIMENSION RSIG0(6),RDEPS(6),RSIGF(6),RDEFP(6),RDIGT(6) DIMENSION DEVT(6),SIGT(6),DEFT(6),SIGT1(6) * * Adaptation de l'option de calcul vers le 3D massif de SIG0 a RSIG0 *==================================================================== * IF (MFR1 .EQ. 1 .OR. MFR1 .EQ. 31) THEN * *---> 1 formulation massive *---> 2 formulation quasi incompressible *---> MASSIF 3D * IF (NSTRS .EQ. 6) THEN DO 110 I=1,NSTRS RSIG0(I)=SIG0(I) RDEPS0(I)=DEPST(I) 110 CONTINUE ELSE IF ( NSTRS .EQ. 4 .AND. ((IFOUR .EQ. 0) & .OR.(IFOUR .EQ. -1).OR.(IFOUR.EQ.-2))) THEN * *---> Calcul en mode deformations planes ou axisymetrique * ou contraintes planes * DO 115 I=1,NSTRS RSIG0(I)=SIG0(I) RDEPS0(I)=DEPST(I) 115 CONTINUE RSIG0(5)=0.D0 RSIG0(6)=0.D0 RDEPS0(5)=0.D0 RDEPS0(6)=0.D0 ENDIF ELSE KERRE = 99 RETURN ENDIF * * * Passage des deformations de cisaillement exprimées * en GAMA aux déformations de cisaillement exprimées * en déformations * DO 116 I=1,6 A=1.D0 IF (I.GT.3) A=2.D0 RDEPS0(I)=RDEPS0(I)/A RDEPS(I)=0.D0 116 CONTINUE * * Données du materiau *=========================================================== * C Ordre des composants dans XMAT (different de celui de VALMAT !) : C XMAT(1) : YOUNG C XMAT(2) : NU C XMAT(3) : RHO C XMAT(4) : ALPH C XMAT(5) : ECRO C XMAT(6) : Q C XMAT(7) : FU C XMAT(8) : FF C XMAT(9) : FC C XMAT(10) : FNS0 C XMAT(11) : FNE0 C XMAT(12) : SNS C XMAT(13) : SNE C XMAT(14) : SIGN C XMAT(15) : EPSN C XMAT(16) : F0 C XMAT(17) : VISQ C XMAT(18) : SRMA C XMAT(19) : Q2 C XMAT(20) : Q3 C XMAT(21) : TREF C XMAT(22) : TALP YOUNG=XMAT(1) XNU=XMAT(2) Q1=XMAT(6) FU0=XMAT(7) FF0=XMAT(8) FC0=XMAT(9) FNS0=XMAT(10) FNE0=XMAT(11) SNS0=XMAT(12) SNE0=XMAT(13) SIGN0=XMAT(14) EPSN0=XMAT(15) F0=XMAT(16) XSRMA=XMAT(18) Q2 = XMAT(19) Q3 = XMAT(20) Fmin0=1.D-8 IF ((FF0.LE.Fmin0).OR.(FF0.GT.1.D0)) FF0=1.D0 IF ((F0.LE.Fmin0).OR.(F0.GE.1.D0)) F0=0.D0 C RMIN0=(1.D0-FF0)/(1.D0-F0) * * Calculs préliminaires *=================================== * *---> Module de cisaillement G0 et de pression hydro XK0 * G0=YOUNG/(2.D0*(1.D0+XNU)) XK0=YOUNG/(3.D0*(1.D0-(2.D0*XNU))) * * Début des sous incrémentations *=================================== * recal0=-100.D0 iter2=0 nmax0=1 * *---> Variables internes test * * - déformation plastique équivalente * - fraction volumique de cavités * 93 EPSPT=VAR0(1) FT=VAR0(2) SIGMT=VAR0(3) EPSMT=VAR0(4) RHOT=VAR0(5) FNST=VAR0(6) FNET=VAR0(7) VARF(3)=VAR0(3) VARF(4)=VAR0(4) VARF(6)=VAR0(6) VARF(7)=VAR0(7) IF (RHOT.LE.1.D-30) THEN RHOT=1.D0 VAR0(5)=1.D0 ENDIF IF (FT.LE.Fmin0) FT=0.D0 * * Contraintes planes * - on stocke les variables internes au début de * chaque sous incrémentation * - on stocke les déformations plastiques au début de * chaque sous incrémentation * IF (IFOUR.EQ.-2) THEN EPSPT1=EPSPT FT1=FT EPSMT1=EPSMT SIGMT1=SIGMT RHOT1=RHOT FNST1=FNST FNET1=FNET def1=0.D0 def2=0.D0 def3=0.D0 rdeps3=0.D0 ENDIF * * Contraintes planes * - on stocke les contraintes au début de * chaque sous incrémentation * IF (IFOUR.EQ.-2) THEN DO 171 I=1,6 SIGT1(I)=RSIG0(I) 171 CONTINUE ENDIF DO 172 I=1,6 SIGT(I)=RSIG0(I) 172 CONTINUE SMT0=(RSIG0(1)+RSIG0(2)+RSIG0(3))/3.D0 SMT=SMT0 IF (IFOUR.EQ.-2) SMT1=SMT0 * * On divise le chargement pour les sous incrementations * 95 DO 118 I=1,6 RDEPS(I)=RDEPS0(I)/nmax0 118 CONTINUE iter2=iter2+1 * * Initialisations *=================================== * iter1=0 * *---> paramètre de recalcul éventuel de la nucléation * il est ré-initialisé à chaque sous itération * recal1=-100.D0 * *---> Calcul de la trace de l'incrément de déformation * IF (IFOUR.EQ.-2) THEN XLAM0=(1.D0-FT)*XK0-(2.D0*G0/3.D0) RDEPS(3)=-1.D0*XLAM0/(2.D0*G0+XLAM0)*(RDEPS(1)+RDEPS(2)) ENDIF 98 treps0=RDEPS(1)+RDEPS(2)+RDEPS(3) * * * Calculs des grandeurs élastiques test *==================================================== * *---> Variables internes test: cas contraintes planes * * - déformation plastique équivalente * - fraction volumique de cavités * IF (IFOUR.EQ.-2) THEN EPSPT=EPSPT1 FT=FT1 EPSMT=EPSMT1 SIGMT=SIGMT1 RHOT=RHOT1 FNST=FNST1 FNET=FNET1 SMT=SMT1 ENDIF * *---> Calcul des contraintes test élastiques * et de l'incrément des déformations plastiques test au * cours du pas * DO 101 I=1,6 A=0.D0 IF (I.LE.3) A=1.D0 IF (IFOUR.EQ.-2) SIGT(I)=SIGT1(I) DEVT(I)=SIGT(I)-(A*SMT) DEVT(I)=DEVT(I)+(2.D0*G0*(RDEPS(I)-(A*treps0/3.D0))) DEFT(I)=0.D0 101 CONTINUE * *---> Contrainte équivalente STEST * IF (STEST2.LE.1.D-10) STEST2=0.D0 Stest=STEST2**0.5D0 * *---> Limite d'élasticité lue sur la courbe d'écrouissage * * - Recherche des valeurs de déformations plastiques équivalentes * encadrant la valeur courante * EPSM0=TRAC(2*NCOURB) IF (EPSMT.GE.EPSM0) THEN Y1=TRAC(2*NCOURB-1) Y2=TRAC(2*NCOURB-1) EPS1=EPSM0 EPS2=2.D0*EPSM0 ELSE DO 300 I=1,(NCOURB-1) EPS1=TRAC(2*I) EPS2=TRAC(2*(I+1)) IF ((EPSMT.GE.EPS1).AND.(EPSMT.LT.EPS2)) THEN Y1=TRAC(2*I-1) Y2=TRAC(2*(I+1)-1) GOTO 96 ENDIF 300 CONTINUE ENDIF * * - Limite d'élasticité * 96 H1=(Y2-Y1)/(EPS2-EPS1) Ytest=(H1*(EPSMT-EPS2))+Y2 * *---> Fraction de densité test * * Correction SEMI: Mars 2017: le rapport de densite est exprime en deformation logarithmique *========================================= * Dans la note 96-566, le rapport de densite est deduit de l'expression lineaire de la variation de volume: * trace(epsilon)=dV/V0 * avec: V le volume total, V0 le volume total initial et epsilon la deformation totale * On en deduit: V/V0=1+trace(epsilon) * Puis le rapport de densite RHO=V0/V=1/(1+trace(epsilon)) * Cette expression n'est pas imposée dans l'article de Needleman et Tvergaard de réference * "AN ANALYSIS OF DUCTILE RUPTURE MODES AT A CRACK TIP" * A. NEEDLEMAN, V. TVERGAARD, * J. Mech. Phys. Solids Vol. 35, No. 2, pp. 151-183, 1987 * Si on exprime la variation de volume par son expression logarithmique: * trace(depsilon)=dln(V) * avec depsilon la variation de la deformation totale et dln(V) la variation du logarithme du volume V * On en deduit: ln(V/V0)=trace(epsilon) * Puis le rapport de densite RHO=exp(-trace(epsilon)) * Cette expression donne de meilleurs résultats pour les très forts taux de déformation. *========================================== * RHOT=1.D0/((1.D0/RHOT)+treps0) treps00 = LOG((1.D0/RHOT)) treps00 = treps00 + treps0 RHOT = EXP(-1. * treps00) * Fin Correction SEMI: Mars 2017 IF (RHOT.LT.1.D-10) RHOT=1.D-10 ** IF ((FT.GT.Fmin0).AND.(RHOT.LT.RMIN0)) RHOT=RMIN0 * *---> Coefficients de nucléation des cavités * dif0=VARF(3)-Ytest-SMT IF ((dif0.LE.1.D-5).AND.(treps0.GE.0.D0)) THEN BB0=EXP(-.5D0*((VARF(3)-SIGN0)/SNS0)**2.D0) BB0=BB0*FNS0/(SNS0*((2.D0*XPI)**.5D0)) ELSE BB0=0.D0 ENDIF * *---> Cas de la nucléation pilotée en contrainte * IF ((FNS0.GT.Fmin0).AND.(recal1.LT.0.D0)) THEN * * Si on se trouve dans la "fenetre" où la * nucléation apparait, on sous incrémente le pas * de calcul afin de suivre les variations de BB0 * dif0=Ytest+SMT IF ((dif0.GE.(SIGN0-SNS0*2.D0)).AND. . (VARF(3).LE.(SIGN0+SNS0*2.D0))) THEN xmax1=200.D0*(dif0-VARF(3))/(4.D0*SNS0) nmax1=NINT(xmax1)*nmax0 IF (nmax1.GT.2000) nmax1=2000 IF (nmax1.GT.nmax0) THEN nmax0=nmax1 iter2=0 recal1=100.D0 GOTO 93 ENDIF ENDIF * ENDIF * *---> Fraction de cavité test * On résoud une équation du second degré * AA1=BB0*XK0/((1.D0-F0)*RHOT) BB1=BB0*XK0-1.D0 CC1=BB0*SMT+1.D0-FT delta0=BB1*BB1+4.D0*AA1*CC1 * IF (AA1.GT.1.D-5) THEN * * Le terme en contrainte de la nucléation n'est pas négligeable * XX1=(BB1+(delta0**.5D0))/(2.D0*AA1) FT=1.D0-XX1 ELSE * * Le terme en contrainte de la nucléation est négligé * BB0=0.D0 ENDIF FT=MAX(FT,0.D0) * *---> Contrainte totale et contrainte moyenne test * FNST=FNST-BB0*SMT SMT=(1.D0-FT)*XK0*((1.D0-FT+XSRMA*(FNET+FNST))/(1.D0-F0)/RHOT- . 1.D0) FNST=FNST+BB0*SMT DO 200 I=1,6 A=0.D0 IF (I.LE.3) A=1.D0 SIGT(I)=DEVT(I)+(A*SMT) 200 CONTINUE * *---> Fonction d'endommagement * IF (FT.LE.FC0) THEN FST0=FT ddel0=1.D0 ELSE FST0=FC0+(FU0-FC0)/(FF0-FC0)*(FT-FC0) ddel0=(FU0-FC0)/(FF0-FC0) ENDIF IF (FST0.GT.FU0) FST0=FU0 * *---> Terme d'endommagement * SMTM=MAX(SMT,0.D0) SMTM=SMT Gtest=1.D0+(Q3*FST0*FST0)- . (2.D0*Q1*FST0*COSH(3.D0*Q2*SMTM/(2.D0*Ytest))) * *---> Fonction de charge test PHIT * PHIT=(Stest*Stest)-(Ytest*Ytest)*Gtest * *---> Cas du matériau complètement endommagé * 91 IF (FT.GE.FF0) THEN * * Les cavités * FT=FF0+Fmin0 * * Les contraintes sont mises a zero * Les deformations sont plastiques * SMT=0.D0 Stest=0.D0 treps1=(SMT/(1.D0-FF0)-SMT0/(1.D0-VAR0(2)))/XK0 DO 12 I=1,6 SIGT(I)=0.D0 A=0.D0 IF (I.LE.3) A=1.D0 depel0=SIGT(I)-RSIG0(I) DEVT(I)=(depel0-(SMT-SMT0)*A)/(2.D0*G0) depel0=DEVT(I)+(treps1*A/3.D0) DEFT(I)=RDEPS0(I)*iter2/nmax0-depel0 IF ((IFOUR.EQ.-2).AND.(I.EQ.3)) THEN DEFT(3)=rdeps3+RDEPS(3)-depel0 ENDIF 12 CONTINUE * * Deformation plastique equivalente * treps1=DEFT(1)+DEFT(2)+DEFT(3) DO 14 I=1,6 A=0.D0 IF (I.LE.3) A=1.D0 DEVT(I)=DEFT(I)-treps1*A/3.D0 14 CONTINUE IF (treps1.LE.0.D0) THEN DO 16 I=1,3 DEFT(I)=DEVT(I) 16 CONTINUE ENDIF EPSPT=EPSPT+dlam0 ** RHOT=RMIN0 * Gtest=0.D0 PHIT=0.D0 * ENDIF * * * Vérification du critère de plasticité *========================================================= * *---> Erreur admise * ERR0=1.D-7*(ABS(PHIT)) ERR0=MAX(ERR0,1.D-8*Ytest*Ytest) * *---> Critère de plasticité * PHI0=PHIT iter0=0 * 99 IF (PHI0.LE.ERR0) THEN * * On est élastique *========================================================= * *-------------------------------------------------------------- * Cas particulier des contraintes planes *-------------------------------------------------------------- * IF (IFOUR.EQ.-2) THEN * *---> On vérifie qu'on est en contraintes planes * iter1=iter1+1 SIG3=ABS(SIGT(3)) SIG30=MAX(Stest*1.D-5,1.D-3) IF (SIG3.GT.SIG30) THEN XLAM0=(1.D0-FT)*XK0-(2.D0*G0/3.D0) RDEPS(3)=-1.D0*(XLAM0/(2.D0*G0+XLAM0))* . (RDEPS(1)-DEFT(1)+RDEPS(2)-DEFT(2)+def1+def2) RDEPS(3)=RDEPS(3)+DEFT(3)-def3 IF (iter1.LE.200)THEN GOTO 98 ELSE KERRE=460 ENDIF ELSE EPSPT1=EPSPT FT1=FT SIGMT1=SIGMT EPSMT1=EPSMT RHOT1=RHOT FNST1=FNST FNET1=FNET SMT1=SMT SIGT1(1)=SIGT(1) SIGT1(2)=SIGT(2) SIGT1(3)=SIGT(3) SIGT1(4)=SIGT(4) SIGT1(5)=SIGT(5) SIGT1(6)=SIGT(6) rdeps3=rdeps3+RDEPS(3) def1=DEFT(1) def2=DEFT(2) def3=DEFT(3) ENDIF ENDIF * *----------------------------------------------------- * Fin du cas particulier des contraintes planes *----------------------------------------------------- * DO 400 I=1,6 RSIGF(I)=SIGT(I) RDEFP(I)=DEFT(I) RDIGT(I)=RSIGF(I)-RSIG0(I) 400 CONTINUE VARF(1)=EPSPT VARF(2)=FT VARF(3)=MAX(VARF(3),Ytest+SMT) VARF(4)=MAX(VARF(4),EPSMT) VARF(5)=RHOT VARF(6)=FNST VARF(7)=FNET * ELSE * * On plastifie *========================================================= * *---> Valeur minimale de Stest au dessous de laquelle * les contraintes sont considérées comme étant * purement hydrostatiques * Gmin0=2.D0*Q1*FST0*COSH(3.D0*Q2*SMTM/(2.D0*Ytest)) Gmin0=Gmin0-((Q3*FST0*FST0)) Gmin0=(ABS(Gmin0))**.5D0 Gmin0=Gmin0*Ytest*1.D-6 * *---> Coefficient de nucléation * dif0=VARF(4)-EPSMT IF (dif0.LE.1.D-5) THEN DD0=EXP(-.5D0*((VARF(4)-EPSN0)/SNE0)**2.D0) DD0=DD0*FNE0/(SNE0*((2.D0*XPI)**.5D0)) ELSE DD0=0.D0 ENDIF * *---> Condition de consistance * tr0=3.D0*Q1*Q2*FST0*Ytest*SINH(3.D0*Q2*SMTM/(2.D0*Ytest)) IF (Stest.LT.Gmin0) THEN DE0=SMT*tr0/((1.D0-FT+XSRMA*(FNET+FNST))*Ytest) ELSE tr0=tr0/(2.D0*Stest) DE0=(SMT*tr0+Stest)/((1.D0-FT+XSRMA*(FNET+FNST))*Ytest) ENDIF * H0=H1*DE0 DS1=XK0*(2.D0*(1.D0-FT+XSRMA*(FNET+FNST))/(1.D0-F0)/RHOT-1.D0) DF0=((1.D0-FT+XSRMA*(FNET+FNST))*tr0+DD0*DE0+BB0*H0)/ . (1.D0+BB0*DS1) * DCOS0=(DS1*DF0/(2.D0*Ytest))+(SMT*H0)/(2.D0*Ytest*Ytest) DCOS0=DCOS0*3.D0*Q2*SINH(3.D0*Q2*SMTM/(2.D0*Ytest)) * DG0=2.D0*Q3*ddel0*DF0*FST0 DG0=DG0+2.D0*Q1*FST0*DCOS0 DG0=DG0-2.D0*Q1*ddel0*DF0*COSH(3.D0*Q2*SMTM/(2.D0*Ytest)) * IF (Stest.LT.Gmin0) THEN denom0=Ytest*Ytest*DG0 ELSE denom0=6.D0*G0*Stest+Ytest*Ytest*DG0 denom0=denom0+2.D0*H0*Gtest*Ytest ENDIF * IF (denom0.GT.1.D-5) THEN dlam0=PHIT/denom0 ELSE IF (recal0.LE.0.D0) THEN recal0=100.D0 nmax0=2000 iter2=0 GOTO 93 ENDIF ENDIF * * * * Vérification des hypothèses de calcul *=============================================================== * IF (recal0.LE.0.D0) THEN * xnum0=10.D0 * * Correction SEMI: Mars 2017. * critere de verification de la precision de la linearisation de la loi GTN * xlim0=1.D-1 xlim0=1.D-2 * Fin Correction SEMI: Mars 2017. xmax1=0.D0 xmax2=0.D0 xmax3=0.D0 xmax4=0.D0 xmax5=0.D0 xmax6=0.D0 xmax7=0.D0 * *---> Condition 3.D0*G*dlam0/Stest << 1 * IF (Stest.GE.Gmin0) THEN cri01=ABS(3.D0*G0*dlam0/Stest) IF (cri01.GT.xlim0) THEN xmax1=xnum0*cri01+5.D0 ENDIF ENDIF * *---> Condition H0*dlam0/Ytest << 1 * cri01=ABS(H0*dlam0/Ytest) IF (cri01.GT.xlim0) THEN xmax2=xnum0*cri01+5.D0 ENDIF * *---> Condition DCOS0*dlam0/COSH << 1 * cri01=ABS(DCOS0*dlam0/COSH(3.D0*Q2*SMTM/(2.D0*Ytest))) IF (cri01.GT.xlim0) THEN xmax3=xnum0*cri01+5.D0 ENDIF * *---> Condition DF0*dlam0/F << 1 * Fmax0=MAX(FNS0,FNE0) Fmax0=MAX(Fmax0,F0) Fmax0=MAX(Fmax0,FT) Fmax0=MAX(Fmax0,Fmin0) cri01=ABS(DF0*dlam0/Fmax0) IF (cri01.GT.xlim0) THEN xmax4=xnum0*cri01+5.D0 ENDIF * *---> Condition DG0*dlam0/G << 1 * Gmax0=MAX(ABS(Gtest),1.D0) cri01=ABS(DG0*dlam0/Gmax0) IF (cri01.GT.xlim0) THEN xmax5=xnum0*cri01+5.D0 ENDIF * *---> Condition DS1*dlam0/SMT << 1 * SMTmax=MAX(ABS(SMT),(1.D-3*TRAC(1))) cri01=ABS(DS1*DF0*dlam0/SMTmax) IF (cri01.GT.xlim0) THEN xmax6=xnum0*cri01+5.D0 ENDIF * *---> Condition tr0*dlam0/tr(EPSP) << 1 * tremp0=(FT-F0)/(1.D0-F0)/RHOT IF (ABS(tremp0).GT.1.D-5) THEN cri01=ABS(tr0*dlam0/tremp0) IF (cri01.GT.xlim0) THEN xmax7=xnum0*cri01+5.D0 ENDIF ENDIF * * IF (xmax1.GT.xmax2) THEN xmax00=xmax1 ELSE xmax00=xmax2 ENDIF IF (xmax3.GT.xmax00) xmax00=xmax3 IF (xmax4.GT.xmax00) xmax00=xmax4 IF (xmax5.GT.xmax00) xmax00=xmax5 IF (xmax6.GT.xmax00) xmax00=xmax6 IF (xmax7.GT.xmax00) xmax00=xmax7 * nmax00=NINT(xmax00) recal0=100.D0 IF (nmax00.GT.nmax0) nmax0=nmax00 IF (nmax0.GT.2000) nmax0=2000 * *---> On recommence le calcul en sous incrémentant le * pas de temps * IF (nmax0.GE.2) THEN iter2=0 GOTO 93 ENDIF * ENDIF * * Cas particulier de la nucléation *============================================================ * IF (recal1.LT.0.D0) THEN * *---> Condition sur la nucléation pilotée en contrainte * IF (FNS0.GT.Fmin0) THEN * * Si on se trouve dans la fenetre, on sous incremente * dif0=Ytest+H0*dlam0+SMT-DS1*DF0*dlam0 IF ((dif0.GE.(SIGN0-SNS0*2.D0)).AND. . (VARF(3).LE.(SIGN0+SNS0*2.D0))) THEN xmax1=200.D0*(dif0-VARF(3))/(4.D0*SNS0) nmax1=NINT(xmax1)*nmax0 IF (nmax1.GT.2000) nmax1=2000 IF (nmax1.GT.nmax0) THEN nmax0=nmax1 iter2=0 recal1=100.D0 GOTO 93 ENDIF ENDIF * ENDIF * *---> Condition sur la nucléation pilotée en deformation * IF (FNE0.GT.Fmin0) THEN * * Si on se trouve dans la fenetre, on sous incremente * dif0=EPSMT+DE0*dlam0 IF ((dif0.GE.(EPSN0-SNE0*2.D0)).AND. . (VARF(4).LE.(EPSN0+SNE0*2.D0))) THEN xmax1=200.D0*(dif0-VARF(4))/(4.D0*SNE0) nmax1=NINT(xmax1)*nmax0 IF (nmax1.GT.2000) nmax1=2000 IF (nmax1.GT.nmax0) THEN nmax0=nmax1 iter2=0 recal1=100.D0 GOTO 93 ENDIF ENDIF * ENDIF * ENDIF * * * Mise à jour des grandeurs après écoulement plastique *============================================================ * *---> Variables internes mises à jour * IF (Stest.GT.Gmin0) EPSPT=EPSPT+dlam0 EPSMT=EPSMT+DE0*dlam0 FNST=FNST+BB0*(H0-DS1*DF0)*dlam0 FNET=FNET+DD0*DE0*dlam0 FT=FT+DF0*dlam0 IF (FT.LT.Fmin0) FT=0.D0 * *---> Contraintes mises à jour * SMT=(1.D0-FT)*XK0*((1.D0-FT+XSRMA*(FNET+FNST))/RHOT/(1.D0-F0)- . 1.D0) DO 601 I=1,6 A=0.D0 IF (I.LE.3) A=1.D0 IF (Stest.LE.Gmin0) THEN DEVT(I)=0.D0 ELSE DEVT(I)=DEVT(I)-3.D0*G0*DEVT(I)*dlam0/Stest ENDIF SIGT(I)=DEVT(I)+(SMT*A) 601 CONTINUE * *---> Incrément de déformations plastiques mise à jour * treps1=(SMT/(1.D0-FT)-SMT0/(1.D0-VAR0(2)))/XK0 DO 610 I=1,6 A=0.D0 IF (I.LE.3) A=1.D0 depel0=(DEVT(I)-RSIG0(I)+(SMT0*A))/(2.D0*G0) depel0=depel0+(treps1*A/3.D0) DEFT(I)=RDEPS0(I)*iter2/nmax0-depel0 IF ((IFOUR.EQ.-2).AND.(I.EQ.3)) THEN DEFT(3)=rdeps3+RDEPS(3)-depel0 ENDIF 610 CONTINUE * *---> Contrainte équivalente Stest mise à jour * IF (STEST2.LE.1.D-10) STEST2=0.D0 Stest= STEST2 ** 0.5D0 * *---> Limite d'élasticité lue sur la courbe d'écrouissage * mise à jour * * - Recherche des valeurs de déformations plastiques équivalentes * encadrant la valeur courante * EPSM0=TRAC(2*NCOURB) IF (EPSMT.GE.EPSM0) THEN Y1=TRAC(2*NCOURB-1) Y2=TRAC(2*NCOURB-1) EPS1=EPSM0 EPS2=2.D0*EPSM0 ELSE DO 700 I=1,(NCOURB-1) EPS1=TRAC(2*I) EPS2=TRAC(2*(I+1)) IF ((EPSMT.GE.EPS1).AND.(EPSMT.LT.EPS2)) THEN Y1=TRAC(2*I-1) Y2=TRAC(2*(I+1)-1) GOTO 97 ENDIF 700 CONTINUE ENDIF * * - Limite d'élasticité mise à jour * 97 H1=(Y2-Y1)/(EPS2-EPS1) Ytest=(H1*(EPSMT-EPS2))+Y2 * *---> Mise à jour des coefficients de nucléation * IF ((Ytest+SMT).GE.VARF(3)) THEN BB0=EXP(-.5D0*((Ytest+SMT-SIGN0)/SNS0)**2.D0) BB0=BB0*FNS0/(SNS0*((2.D0*XPI)**.5D0)) ELSE BB0=0.D0 ENDIF IF (EPSMT.GE.VARF(4)) THEN DD0=EXP(-.5D0*((EPSMT-EPSN0)/SNE0)**2.D0) DD0=DD0*FNE0/(SNE0*((2.D0*XPI)**.5D0)) ELSE DD0=0.D0 ENDIF * *---> Fonction d'endommagement * IF (FT.LE.FC0) THEN FST0=FT ddel0=1.D0 ELSE FST0=FC0+(FU0-FC0)/(FF0-FC0)*(FT-FC0) ddel0=(FU0-FC0)/(FF0-FC0) ENDIF IF (FST0.GT.FU0) FST0=FU0 * *---> Terme d'endommagement * SMTM=MAX(SMT,0.D0) SMTM=SMT Gtest=1.D0+(Q3*FST0*FST0)- . (2.D0*Q1*FST0*COSH(3.D0*Q2*SMTM/(2.D0*Ytest))) * *---> Fonction de charge test PHIT mise à jour * PHIT=(Stest*Stest)-(Ytest*Ytest)*Gtest PHI0=ABS(PHIT) * *---> Cas particulier des matériaux totalement endommagés * 92 IF (FT.GE.FF0) THEN * FT=FF0+Fmin0 * SMT=0.D0 treps1=(SMT/(1.D0-FF0)-SMT0/(1.D0-VAR0(2)))/XK0 DO 13 I=1,6 SIGT(I)=0.D0 A=0.D0 IF (I.LE.3) A=1.D0 depel0=SIGT(I)-RSIG0(I) DEVT(I)=(depel0-((SMT-SMT0)*A))/(2.D0*G0) depel0=DEVT(I)+(treps1*A/3.D0) DEFT(I)=RDEPS0(I)*iter2/nmax0-depel0 IF ((IFOUR.EQ.-2).AND.(I.EQ.3)) THEN DEFT(3)=rdeps3+RDEPS(3)-depel0 ENDIF 13 CONTINUE treps1=DEFT(1)+DEFT(2)+DEFT(3) DO 15 I=1,6 A=0.D0 IF (I.LE.1) A=1.D0 DEVT(I)=DEFT(I)-(DEFT(1)+DEFT(2)+DEFT(3))*A/3.D0 15 CONTINUE IF (treps1.LE.0.D0) THEN DO 17 I=1,3 DEFT(I)=DEVT(I) 17 CONTINUE ENDIF EPSPT=EPSPT+dlam0 ** RHOT=RMIN0 * Gtest=0.D0 PHIT=0.D0 PHI0=0.D0 * ENDIF * *---> 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 * * Passage des deformations de cisaillement exprimées * en déformations aux déformations de cisaillement exprimées * en GAMA * DO 117 I=1,6 A=1.D0 IF (I.GT.3) A=2.D0 RDEFP(I)=RDEFP(I)*A 117 CONTINUE * * * Passage a l'option de calcul pour les contraintes *========================================================= * IF (MFR1 .EQ. 1 .OR. MFR1 .EQ. 31) THEN IF (NSTRS .EQ. 6) THEN * *---> MASSIF 3D * DO 170 I=1,NSTRS SIGF(I)=RSIGF(I) DEFP(I)=RDEFP(I) DSIGT(I)=RDIGT(I) 170 CONTINUE ELSE IF ( NSTRS .EQ. 4 ) THEN * *---> Calcul axisymétrique ou contraintes planes * DO 180 I=1,NSTRS SIGF(I)=RSIGF(I) DEFP(I)=RDEFP(I) DSIGT(I)=RDIGT(I) 180 CONTINUE ENDIF ENDIF RETURN * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales