cmicro
C CMICRO SOURCE PV 17/12/08 21:16:07 9660 C MICROP SOURCE AM 00/12/13 21:40:52 4045 * * modele d'endommagement microplan couple a la plasticite * C. La Borderie + S. Fichant Oct. 95 * routines utilisees: * micro1: plasticite nadai * IDECAL=3 DANS LE CAS ISO IDECAL=8 DANS LE CAS ANISO * jacob3: diagonalisation: * attention jacob3 modifie la matrice a diagonaliser!! * prodt et prodt2 * attention prodt2 ne fonctionne qu'avec la matrice des V. P. !! * IMPLICIT INTEGER(I-N) C IMPLICIT REAL*8(A-H,O-Z) INTEGER NVARI,ICARA,MFR1 INTEGER ISTRS,I,J REAL*8 YOUNG,XNU,EPSD0,BT,LAMB,DEUXMU,ALFA REAL*8 DOM(6),SIGAN(6),TRSIG,DEF33(3,3),EPSIPP(3),VECP(3,3) REAL*8 DEFPT(6),DEFTOT(6),EPSITOP(3),EPSE1,EPSE REAL*8 VECPT(3,3),DOM33(3,3),DEFRPDE(3,3),DOMRPDE(3,3) REAL*8 D1,D2,D3,DOM3(3) REAL*8 SIGPP(3),SIGPM(3),SIG33(3,3),SIG33P(3,3),SIG33M(3,3) REAL*8 S33PRD(3,3),S33MRD(3,3) REAL*8 LAMBDAP(6), LAMBDAM(6) LOGICAL COMP INTEGER IDECAL * -INC PPARAM -INC CCOPTIO -INC DECHE * SEGMENT IECOU * COMMON/IECOU/NYOG,NYNU,NYALFA,NYSMAX,NYN,NYM,NYKK, INTEGER icow1,icow2,icow3,icow4,icow5,icow6,icow7, C INTEGER NYOG, NYNU, NYALFA,NYSMAX,NYN, NYM, NYKK, 1 icow8,icow9,icow10,icow11,icow12,icow13,icow14,icow15,icow16, C . NYALF1,NYBET1,NYR, NYA, NYRHO,NSIGY, NNKX, NYKX, IND, 2 icow17,icow18,icow19,icow20,icow21,icow22,icow23,icow24, C . NSOM, NINV, NINCMA,NCOMP, JELEM, LEGAUS,INAT, NCXMAT, 3 icow25,icow26,icow27,icow28,icow29,icow30,ICARA, C . LTRAC, MFR, IELE, NHRM, NBNN, NBELEM,ICARA, 4 icow32,icow33,NSTRS1,MFR1,icow36,icow37,icow38, C . LW2, NDEF, NSTRSS,MFR1, NBGMAT,NELMAT,MSOUPA, 5 icow39,icow40,icow41,icow42,icow43,icow44 C . NUMAT1,LENDO, NBBB, NNVARI,KERR1, MELEME INTEGER icow45,icow46,icow47,icow48,icow49,icow50, . icow51,icow52,icow53,icow54,icow55,icow56 . icow57,icow58 ENDSEGMENT SEGMENT WRKK1 REAL*8 DDEFEL(NSTRS1) ENDSEGMENT * * on recupere les variable materielles * YOUNG=XMAT(1) XNU=XMAT(2) EPSD0=XMAT(5) BT=XMAT(6) ALFA=XMAT(9) DEUXMU=YOUNG/(1.D0+XNU) LAMB=XNU*DEUXMU/(1.D0-2.D0*XNU) * print*,'dans microp' * * recuperation des variables internes d'endommagement * DO ISTRS=1,NSTRS1 DOM(ISTRS)=VAR0(2+ISTRS) END DO SEGINI WRKK1 * * on ecoule plastiquement sur la contrainte effective * IDECAL=8 * print*,'appel a micro1' nstrbi=nstrs1 & .false.,DEFPT,EPSE1,EPSE) nstrs1=nstrbi IF (KERRE .NE. 0) THEN print*,'on n''a pas converge dans micro1' & .true.,DEFPT,EPSE1,EPSE) SEGSUP WRKK1 RETURN ENDIF * * on ecoule en endommagement sur les deformations elastiques * * print*,'apres micro1' * * calcul de l'increment deformations elastiques DDEFEL * 1) on calcule l'increment de deformations totales avec * l'increment de contraintes elastique DSIGT * 2) on retranche l'increment de deformations plastiques DEFP * TRSIG=0.D0 DO ISTRS=1,3 TRSIG=TRSIG+DSIGT(ISTRS) END DO DO ISTRS=1,3 DDEFEL(ISTRS)=( (1.D0+XNU)*DSIGT(ISTRS)-XNU*TRSIG)/YOUNG 1 - DEFP(ISTRS) END DO DO ISTRS=4,NSTRS1 DDEFEL(ISTRS)= (1.D0+XNU)*DSIGT(ISTRS)/YOUNG 1 - 0.5d0*DEFP(ISTRS) END DO * * on diagonalise l'increment de deformations elastiques: * 1) on met sous forme 3x3 avec endoca * 2) on diagonalise avec jacob3 * * print*,'incr de def el dans rpg' * print*,ddefel * print*,'avant endoca ddefl' * print*,'apres endoca ddefl' * print*,'apres jacob3 def33' * print*,'incr deformations principales' * print*,epsipp * * calcul des deformations elastiques * TRSIG=0.D0 * print*,'-----sigf------' * print*,sigf(1),sigf(2),sigf(3) DO ISTRS=1,3 TRSIG=TRSIG+SIGF(ISTRS) END DO DO ISTRS=1,3 END DO * print*,'-----defela------' * print*,defela(1),defela(2),defela(3) DO ISTRS=4,NSTRS1 END DO * print*,'deformations elastiques dans rpg' * print*,defela * * on met les deformations sous forme de matrice 3x3 * puis on ecrit la matrice dans le repere de depsilon:DEFRPDE * * print*,'deformations elastiques dans rpg(3x3)' * print*,def33 * print*,'def elast dans rpddeps' * print*,defrpde * * on calcule l'endommagement resultant * IF (DEFRPDE(1,1) .GT. EPSD0) THEN D1=1.D0-EPSD0/DEFRPDE(1,1)*EXP(BT*( EPSD0 - DEFRPDE(1,1))) ELSE D1=0.D0 END IF IF (DEFRPDE(2,2) .GT. EPSD0) THEN D2=1.D0-EPSD0/DEFRPDE(2,2)*EXP(BT*( EPSD0 - DEFRPDE(2,2))) ELSE D2=0.D0 END IF IF (DEFRPDE(3,3) .GT. EPSD0) THEN D3=1.D0-EPSD0/DEFRPDE(3,3)*EXP(BT*( EPSD0 - DEFRPDE(3,3))) ELSE D3=0.D0 END IF * print*,defrpde(1,1),epsd0,D1 * print*,defrpde(2,2),epsd0,D2 * print*,defrpde(3,3),epsd0,D3 * * on met l'endommagement initial dans le meme repere * * print*,'prodt DOMRPDE' * print*,'endommagement initial dans rpddeps' * print*,domrpde * * et on en deduit l'increment d'endommagement dans RPDE * IF(d1.gt.domrpde(1,1))then domrpde(1,1)=d1 endif IF(d2.gt.domrpde(2,2))then domrpde(2,2)=d2 endif IF(d3.gt.domrpde(3,3))then domrpde(3,3)=d3 endif * print*,'endommagement final dans rpddeps' * print*,domrpde * * on remet D dans RPG * DO I=1,3 DO J=1,3 VECPT(I,J)=VECP(J,I) END DO END DO * print*,'endommagement final dans rpg' * print*,dom33 * * on separe les contraintes effectives en + et - dans rpsigma * * print*,'contraintes ppales' * print*,sigpp DO I=1,3 IF (SIGPP(I) .LT. 0.D0)THEN SIGPM(I)=SIGPP(I) SIGPP(I)=0.D0 ELSE SIGPM(I)=0.D0 END IF END DO * print*,'contraintes dans rpg' * print*,sig33p * print*,sig33m * * on met le tout dans le repere ppal d'endo * attention jacob3 modifie la matrice fournie * --> on passe une copie DO I=1,3 DO J=1,3 SIG33(I,J)=DOM33(I,J) END DO END DO * print*,'endom dans rpd' * print*,dom3 ************** * A REVOIR EN ATENDANT MIEUX ON BORNE LES VALEURS PROPRES DE D ENTRE 0. ET 1.* ************** DO I=1,3 DOM3(I)=MAX(DOM3(I),0.D0) DOM3(I)=MIN(DOM3(I),1.D0-1.d-6) END DO ************** * FIN A REVOIR ************** * print*,'dom3=',dom3 * print*,'dom33=',dom33 * print*,'s33prd',s33prd(3,3) * print*,'s33mrd',s33mrd(3,3) * print*,'callambdap' * print*,'apres callambdap' SIG33P(1,1)=LAMBDAP(1)*S33PRD(1,1)+LAMBDAM(1)*S33MRD(1,1) SIG33P(1,2)=LAMBDAP(4)*S33PRD(1,2)+LAMBDAM(4)*S33MRD(1,2) SIG33P(1,3)=LAMBDAP(5)*S33PRD(1,3)+LAMBDAM(5)*S33MRD(1,3) SIG33P(2,1)=SIG33P(1,2) SIG33P(2,2)=LAMBDAP(2)*S33PRD(2,2)+LAMBDAM(2)*S33MRD(2,2) SIG33P(2,3)=LAMBDAP(6)*S33PRD(2,3)+LAMBDAM(6)*S33MRD(2,3) SIG33P(3,1)=SIG33P(1,3) SIG33P(3,2)=SIG33P(2,3) SIG33P(3,3)=LAMBDAP(3)*S33PRD(3,3)+LAMBDAM(3)*S33MRD(3,3) * print*,'contraintes dans RPD' * print*,sig33p * print*,'sig33p(1,2)',sig33p(1,2) * print*,'dsigt',dsigt(1),dsigt(2),dsigt(3) * print*,'dsigt',dsigt(4),dsigt(5),dsigt(6) * print*,'sigf',sigf(1),sigf(2),sigf(3) * print*,'sigf',sigf(4),sigf(5),sigf(6) * * on remet le tout dans le repere global * * print*,'matrice des vect proprs' * print*,vecp DO I=1,3 DO J=1,3 VECPT(I,J)=VECP(J,I) END DO END DO * print*,'contraintes dans rpg' * print*,sig33 * * on rend les contraintes et les variables internes finales * SIGAN(1)=SIGF(1)-SIG33(1,1) SIGF(1)=SIG33(1,1) VARF(3)=MAX(DOM33(1,1),0.d0) SIGAN(2)=SIGF(2)-SIG33(2,2) SIGF(2)=SIG33(2,2) VARF(4)=MAX(DOM33(2,2),0.d0) SIGAN(3)=SIGF(3)-SIG33(3,3) SIGF(3)=SIG33(3,3) VARF(5)=MAX(DOM33(3,3),0.d0) SIGAN(4)=SIGF(4)-SIG33(1,2) SIGF(4)=SIG33(1,2) VARF(6)=MAX(DOM33(1,2),0.d0) VARF(7)=MAX(DOM33(1,3),0.d0) VARF(8)=MAX(DOM33(2,3),0.d0) IF(IFOUR.GE.1.OR.IFOUR.LE.-3) THEN SIGAN(5)=SIGF(5)-SIG33(1,3) SIGF(5)=SIG33(1,3) SIGAN(6)=SIGF(6)-SIG33(2,3) SIGF(6)=SIG33(2,3) ELSE SIGAN(5)=0.D0 SIGAN(6)=0.D0 END IF DO ISTRS=1,6 VARF(ISTRS+8)=SIGAN(ISTRS) END DO * print*,'sigf',sigf(1),sigf(2),sigf(3) * print*,'sigf',sigf(4),sigf(5),sigf(6) * print*,'sigan',sigan(1),sigan(2),sigan(3) * print*,'sigan',sigan(4),sigan(5),sigan(6) SEGSUP WRKK1 RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales