psury
C PSURY SOURCE CB215821 20/07/29 21:16:07 10668 1 RAPP,NRAPP, 1 SIG0,SIGF,VARF,NMATT,DEFP,KERRE) * * Entrées * * ENDO: courbe de debut d'endommagement * NENDO: nombre de points sur la courbe ENDO * RAPP: courbe d'evolution de l'endommagement en fonction de la * pseudo porosite * NRAPP: nombre de points de la courbe RAPP * NSTRS: nombre de composantes des deformations * MFR1: numero de la formulation * DEPST: increment de deformation totale * XMAT: donnees materiau * SIGF: contraintes plastiquement admissibles issues de ECOINC * VAR0: variables internes au debut du pas de temps * VARF: variables internes issues de ECOINC * SIG0: contraintes au debut du pas de temps * NMATT: nombre de composantes matériaux * DEFP: incrément de la déformation plastique * * Sorties * * SIGF: contraintes finales ( tiennent compte de l'endommagement) * VARF: variables internes finales * * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) * -INC PPARAM -INC CCOPTIO -INC CCREEL DIMENSION SIG0(*),VAR0(*),DEFP(*),RAPP(*) DIMENSION RSIGF(6),RSIG0(6) * * *==================================================================== * Adaptation de l'option de calcul vers le 3D massif de SIGF a RSIGF *==================================================================== * 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 RSIGF(I)=SIGF(I) RSIG0(I)=SIG0(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 *---> Calcul en mode contraintes planes * DO 115 I=1,NSTRS RSIGF(I)=SIGF(I) RSIG0(I)=SIG0(I) 115 CONTINUE RSIGF(5)=0.D0 RSIG0(5)=0.D0 RSIGF(6)=0.D0 RSIG0(6)=0.D0 ENDIF ELSE KERRE = 99 RETURN ENDIF * *======================================== * Calcul de la densité du materiau *======================================== * * Si on a oublie de rentrer la densite initiale * * IF (IFOUR.EQ.-2) THEN * DENS0=XMAT(NMATT-2) * ELSE * DENS0=XMAT(3) * ENDIF * * DENS0=XMAT(3) DENS0=XMAT(NMATT-2) IF (DENS0.LE.1.D-10) THEN KERRE=71 RETURN ENDIF * * Initialisation de la densite en variable interne * IF (VAR0(2).LE.1.D-10) THEN VAR0(2)=DENS0 ENDIF IF (IFOUR.EQ.-2) THEN treps0=(1.D0-2.D0*XMAT(2))/(1.D0-XMAT(2)) treps0=treps0*(DEPST(1)+DEPST(2)-DEFP(1)-DEFP(2)) ELSE treps0=DEPST(1)+DEPST(2)+DEPST(3) ENDIF rho=DENS0/((DENS0/VAR0(2))+treps0) * * *======================================== * A t'on déja endommagé ? *======================================== * IF (ABS(VAR0(3)).GT.1.D-10) THEN * * On a déja endommagé *---------------------------------------- * * Calcul de la pseudo porosité du temps n+1 * * * Calcul de la variable d'endommagement * D_end1=0.D0 DO 12 I=1,NRAPP-1 DD1=RAPP(2*(I-1)+1) DD2=RAPP(2*I+1) AL1=RAPP(2*I) AL2=RAPP(2*(I+1)) D_end1=(DD2-DD1)/(AL2-AL1)*(alpha-AL1)+DD1 ENDIF 12 CONTINUE D_max=VAR0(5) * * Calcul de l'ancienne pseudo porosite ( temps n) * alp_old=VAR0(4) * * Calcul de la fonction d'endommagement g0 * g0=1.D0-D_end1 g0=1.D0-D_max ELSE g0=1.D0 ENDIF g0=MAX(g0,0.D0) * * Calcul des contraintes vérifiant l'endommagement * DO 10 I=1,6 RSIGF(I)=RSIGF(I)*g0 10 CONTINUE * * Mise a jour des variables internes * *---> Densite VARF(2)=rho *---> Densite de debut de fracture VARF(3)=VAR0(3) *---> Pseudo porosite *---> Pseudo porosite maximale VARF(5)=MAX(VAR0(5),D_end1) *---> Coefficient d'endommagement VARF(6)=D_end1 *---> Fonction d'endommagement VARF(7)=g0 * ELSE * * On a pas encore endommagé *------------------------------------------- * * Calcul de P=1/3*trace(RSIGF) * P0=(RSIGF(1)+RSIGF(2)+RSIGF(3))/3.D0 * * Calcul de la contrainte équivalente * Y1=(RSIGF(1)*RSIGF(1))+(RSIGF(2)*RSIGF(2)) Y1=Y1+(RSIGF(3)*RSIGF(3)) Y1=Y1-(RSIGF(1)*RSIGF(2))-(RSIGF(2)*RSIGF(3)) Y1=Y1-(RSIGF(3)*RSIGF(1)) Y2=(RSIGF(4)*RSIGF(4))+(RSIGF(5)*RSIGF(5)) Y2=Y2+(RSIGF(6)*RSIGF(6)) Y0=Y1+(3.D0*Y2) Y0=(Y0)**(0.5D0) * * Rapport de triaxialite * Rapp0=P0/Y0 * * Rapport de triaxialite de debut d'endommagement Rapp_th * EPSE=VARF(1) Rapp_th=1.D30 Rmax=Rapp_th Rmax=Rapp_th ELSE DO 100 I=1,(NENDO-1) IND0=I ENDIF 100 CONTINUE dif0=ABS(epsmax-epsmin) IF (dif0.GT.1.D-10) THEN ELSE Rapp_th=Rmin ENDIF ENDIF * * Comparaison au rapport de triaxialite d'endommagement * IF (Rapp0.GT.Rapp_th) THEN * * On endommage * * Calcul de la densite de debut d'endommagement : rho_f *--------------------------------------------------- * *---> Rapport de triaxialite au debut du pas * P_old=(RSIG0(1)+RSIG0(2)+RSIG0(3))/3.D0 Y_old1=(RSIG0(1)*RSIG0(1))+(RSIG0(2)*RSIG0(2)) Y_old1=Y_old1+(RSIG0(3)*RSIG0(3)) Y_old1=Y_old1-(RSIG0(1)*RSIG0(2))-(RSIG0(2)*RSIG0(3)) Y_old1=Y_old1-(RSIG0(3)*RSIG0(1)) Y_old2=(RSIG0(4)*RSIG0(4))+(RSIG0(5)*RSIG0(5)) Y_old2=Y_old2+(RSIG0(6)*RSIG0(6)) Y_old0=Y_old1+(3.D0*Y2) Y_old=(Y_old0)**(0.5D0) R_old=P_old/Y_old * *---> Courbe d'evolution du rapport P/Y entre le debut et la fin du pas * On l'approxime par une droite de pente pente0 * dvar1=VARF(1)-VAR0(1) * IF (dvar1.GT.1.D-10) THEN IF (dvar1.GT.abs(varf(1)*xzprec)) THEN pente0=(Rapp0-R_old)/dvar1 ELSE pente0=abs(varf(1))/XZPREC ENDIF * *---> intersection avec la courbe de debut d'endommagement * point (R_int,eps_int) * eps_int=epsmin ELSE IF (pente0.GE.1.D30) THEN eps_int=VAR0(1) ELSE eps_int=eps_int/(pente1-pente0) ENDIF IF ((eps_int.LT.epsmin).AND.(IND0.GE.2)) THEN IND0=IND0-1 dif0=ABS(epsmin-epsmax) IF (dif0.GT.1.D-10) THEN ELSE ENDIF GOTO 150 ELSE IF ((eps_int.LT.epsmin).AND.(IND0.EQ.1)) THEN Rmax=1.D30 ENDIF R_int=pente0*(eps_int-VARF(1))+Rapp0 ELSE ENDIF * *---> Calcul de rho_f en supposant le module d'ecrouissage * constant entre le debut et la fin du pas * IF (dvar1.GT.1.D-10) THEN H0=(Y0-Y_old)/dvar1 Y_int=H0*(eps_int-VAR0(1))+Y_old ELSE * *---> Endommagement dans un cas élastique * IF ((ABS(Rapp0-R_old)).GT.1.D-20) THEN alfa0=(R_int-R_old)/(Rapp0-R_old) Y_int=(alfa0*Y0)+((1.D0-alfa0)*Y_old) ELSE Y_int=Y_old ENDIF ENDIF IF (treps0.GT.1.D-10) THEN XK0=XMAT(1)/(3.D0*(1.D0-2.D0*XMAT(2))) P_int=R_int*Y_int tr_eps1=(P_int-P_old)/XK0 ELSE tr_eps1=0.D0 ENDIF rho_f=DENS0/((DENS0/VAR0(2))+tr_eps1) IF ((rho_f.GT.1.D10).OR.(rho_f.LT.0.D0)) THEN rho_f=rho ENDIF * * Calcul de la pseudo-porosite * * * Calcul de la variable d'endommagement * D_end1=0.D0 DO 13 I=1,NRAPP-1 DD1=RAPP(2*(I-1)+1) DD2=RAPP(2*I+1) AL1=RAPP(2*I) AL2=RAPP(2*(I+1)) D_end1=(DD2-DD1)/(AL2-AL1)*(alpha-AL1)+DD1 ENDIF 13 CONTINUE D_max=VAR0(5) * * Calcul de l'ancienne pseudo porosite ( temps n) * alp_old=VAR0(4) * * Calcul de la fonction d'endommagement g0 * g0=1.D0-D_end1 g0=1.D0-D_max ELSE g0=1.D0 ENDIF g0=MAX(g0,0.D0) * * Calcul des contraintes vérifiant l'endommagement * DO 15 I=1,6 RSIGF(I)=RSIGF(I)*g0 15 CONTINUE * * Mise a jour des variables internes * VARF(2)=rho VARF(3)=rho_f VARF(5)=MAX(VAR0(5),D_end1) VARF(6)=D_end1 VARF(7)=g0 IF (D_end1.GT.0.9) THEN write(*,*) ' Debut endommagement' write(*,*) 'P_int,P_old=',P_int,P_old write(*,*) 'R_int,Y_int=',R_int,Y_int write(*,*) 'r0,rho,tr_eps1=',DENS0,VAR0(2),tr_eps1 write(*,*) 'D_end1,gg0=',D_end1,g0 write(*,*) 'DD1,DD2,AL1,AL2=',DD1,DD2,AL1,AL2 write(*,*) 'rho,rho_f=',rho,rho_f write(*,*) 'DENS0,VAR0(2)=',DENS0,VAR0(2) ENDIF * ELSE * * On n'endommage pas * VARF(2)=rho VARF(3)=0.D0 VARF(4)=0.D0 VARF(5)=0.D0 VARF(6)=0.D0 VARF(7)=1.D0 ENDIF * *======================================= * Fin du calcul d'endommagement *======================================= ENDIF * * *========================================================= * 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) 170 CONTINUE ELSE IF ( NSTRS .EQ. 4 ) THEN * *---> Calcul axisymétrique ou contraintes planes * DO 180 I=1,NSTRS SIGF(I)=RSIGF(I) 180 CONTINUE ENDIF ENDIF RETURN * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales