cicsic
C CICSIC SOURCE OF166741 25/11/04 21:15:22 12349 & ,necou,iecou) C C variables en entree C C WRK0,KRK1,WRK5 pointeurs sur des segments de travail C C WRK0: C XMAT(NMATT): tableau composantes materiaux C C WRK1: C SIG0(NSTRS) : contraintes au debut du pas C VAR0(NVARI) : variables internes au debut du pas C DEPST(NSTRS): increment de deformation totale C C WRK22: C XXE: coordonnees de l'element en double precison C C WTRAV: C TXR: cosinus directeurs des axes locaux de l'element massif C C WRK5: C C NSTRS nombre de composantes dans les vecteurs des contraintes C et les vecteurs des deformations C C NVARI nombre de variables internes (doit etre egal a 3) C C NMATT nombre de constantes du materiau C C variables en sortie C C VARF variables internes finales dans WRK0 C C SIGF contraintes finales dans WRK0 C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCREEL -INC DECHE -INC TECOU SEGMENT WRK22 REAL*8 XXE(3,NBNNbi) ENDSEGMENT SEGMENT WRK6 REAL*8 SIG0S(NSTRS),DEPSTS(NSTRS) END SEGMENT INTEGER NSTRS1,NVARI INTEGER KCAS,IRTD,ISTRS REAL*8 IDAUX(6,6) REAL*8 DOR1(3), DOR2(3), DOR3(3) REAL*8 MORTH (3,3), IORTH (3,3), AEQ (3,3) REAL*8 H1 (6,6), H2(6,6), H3(6,6) REAL*8 H01 (6,6), H02(6,6), H03(6,6) REAL*8 K01 (6,6), K02(6,6), K03(6,6), KW(6,6) REAL*8 KEFF1(6,6), KEFF2(6,6), KEFF3(6,6) REAL*8 RIG0 (6,6), CED0 (6,6) REAL*8 SORTH(6), SIG0V(6), SIGFV(6), & DEFI(6), DEPSTV(6), DORTH(6) REAL*8 VARTMP INTEGER HCLO1, HCLO2, HCLO3 * scalar damage indicators REAL*8 DOM1, DOM2, DOM3 REAL*8 YGR1, YGR2, YGR3, YW(6) REAL*8 YEQ1, YEQ2, YEQ3 * * PHENOMENOLOGICAL COEFFICIENTS * * deactivation parameter (scalars) REAL*8 ETADS * closure stress * REAL*8 SIGCLO (NSTRSS) *!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *ON NE LE PREND PAS EN COMPTE!!!! *!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * scalar damage law parameters * Passes comme param. materiau REAL*8 G1DC, G1Y0, G1YC, G1P REAL*8 G2DC, G2Y0, G2YC, G2P REAL*8 G3DC, G3Y0, G3YC, G3P DATA ETADS /1./ DATA H1 & /1.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.7, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.0, 0.7/ DATA H2 & /0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.7, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.0, 0.7/ DATA H3 & /0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.7, 0.0, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.7, 0.0, & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0/ DATA AEQ & /1.0, 0.0, 0.0, & 0.0, 1.0, 0.0, & 0.0, 0.0, 1.0/ ***** INITIALIZATION VARIABLES * kerre=0 * Proprietes materiau YG1 = XMAT(1) YG2 = XMAT(2) YG3 = XMAT(3) XNU12 = XMAT(4) XNU23 = XMAT(5) XNU13 = XMAT(6) G12 = XMAT(7) G23 = XMAT(8) G13 = XMAT(9) G1DC = XMAT(16) G1Y0 = XMAT(17) G1YC = XMAT(18) G1P = XMAT(19) G2DC = XMAT(20) G2Y0 = XMAT(21) G2YC = XMAT(22) G2P = XMAT(23) G3DC = XMAT(24) G3Y0 = XMAT(25) G3YC = XMAT(26) G3P = XMAT(27) H1(5,5)= XMAT(29) H3(5,5)= XMAT(29) H1(6,6)= XMAT(30) H2(6,6)= XMAT(30) H2(4,4)= XMAT(28) H3(4,4)= XMAT(28) AEQ(1,2)= XMAT(35) AEQ(2,1)= XMAT(35) AEQ(1,3)= XMAT(37) AEQ(3,1)= XMAT(37) AEQ(2,3)= XMAT(36) AEQ(3,2)= XMAT(36) * Pour deboggage C* jPARAM=0 * Variables internes du modele DOM1=VAR0(2) DOM2=VAR0(3) DOM3=VAR0(4) * Mise a zero des matrices ****** CALCUL DE LA DEFORMATION INITIALE A PARTIR ****** DES CONTRAINTES INITIALES **********Debougage C* IF (jPARAM.EQ.1) THEN C* WRITE(IOIMP,66770) IB,IGAU C*66770 format(////////2x,'element ',i6,2x,'point ',i3//) C* C* WRITE (IOIMP,*) 'Increment des deformations ' C* WRITE (IOIMP,99999) (DEPST(ILOOP), ILOOP=1,6) C* C* WRITE (IOIMP,*) 'Contraintes au debut de l''iteration' C* WRITE (IOIMP,99999) (SIG0(ILOOP), ILOOP=1,6) C* ENDIF **********Debougage * Controle si il faut calculer la matrice de hooke IF (IB.EQ.1.AND.IGAU.EQ.1) THEN GOTO 100 ELSEIF (N2PTEL.EQ.1.AND.N2EL.EQ.1) THEN GOTO 200 ELSEIF (N2PTEL.EQ.1.AND.N2EL.NE.1) THEN IF (IGAU.EQ.1) THEN GOTO 100 ELSE GOTO 200 ENDIF ELSE GOTO 100 ENDIF * Calcul de la matrice de hook pour un materiau orthotrope 100 CONTINUE * WRITE (IOIMP,*) 'Calcul de la matrice de Hooke, CMATE=', CMATE IPERR=1 XNU21=(YG2/YG1)*XNU12 XNU32=(YG3/YG2)*XNU23 XNU31=(YG3/YG1)*XNU13 AUX=(1.D0-XNU12*XNU21-XNU23*XNU32-XNU13*XNU31 & -2.D0*XNU21*XNU32*XNU13) AUX1=AUX/YG1 AUX2=AUX/YG2 AUX3=AUX/YG3 DDAUX(1,1)=(1.D0-XNU23*XNU32)/AUX1 DDAUX(1,2)=(XNU21+XNU31*XNU23)/AUX1 DDAUX(2,1)=DDAUX(1,2) DDAUX(1,3)=(XNU31+XNU21*XNU32)/AUX1 DDAUX(3,1)=DDAUX(1,3) DDAUX(2,2)=(1.D0-XNU13*XNU31)/AUX2 DDAUX(2,3)=(XNU32+XNU12*XNU31)/AUX2 DDAUX(3,2)=DDAUX(2,3) DDAUX(3,3)=(1.D0-XNU12*XNU21)/AUX3 DDAUX(4,4)=G23 DDAUX(5,5)=G13 DDAUX(6,6)=G12 * On recopie la matrice de hook pour l'inversee 200 DO JLOOP=1,LHOOK DO ILOOP=1,LHOOK IDAUX(ILOOP,JLOOP)= DDAUX(ILOOP,JLOOP) ENDDO ENDDO * Inversion de la matrice de Hooke * WRITE (IOIMP,*) 'Inversion de la matrice de Hooke' TPREC= 0.D0 IPERR=0 IF (IPERR.NE.0) THEN WRITE (IOIMP,*) 'ERREUR DANS L''INVERSION DE LA MATRICE DE HOOK' ENDIF * Calcul des tenseurs d'endommagement H01, H02, H03 C* Calcul des matrices K01,K02,K03 ***** Recuperation deformation initiale dans le repere orth. DEFI(1)=VAR0(5) DEFI(2)=VAR0(6) DEFI(3)=VAR0(7) DEFI(4)=VAR0(8) DEFI(5)=VAR0(9) DEFI(6)=VAR0(10) * Calcul de l'increment de deformation dans le repere orthotrope DO 451 ILOOP=1,6 DEPSTV(ILOOP)=DEPST(ILOOP) 451 CONTINUE * Reorganisation dans SICDEF selon la valeur de iAXEP * TC iaxep n'est pas initialise , je le mets a 0 !!! iaxep=0 * Reorganisation supplementaire pour le contraintes en cisaillement VARTMP= DORTH(4) DORTH(4)= DORTH(6) DORTH(6)= VARTMP DORTH(5)= DORTH(5) * On calcule les deformation totales. DO 500 ILOOP=1,NSTRSS DORTH(ILOOP)=DEFI(ILOOP)+DORTH(ILOOP) * On garde le deformations totales dans le var. internes VARF(ILOOP+4)=DORTH(ILOOP) 500 CONTINUE ******************************************************** ** ON A LES DEFORMATIONS TOTALES ** ** ON PEUT CALCULER LES CONTRAINTES A LA FIN DU PAS ** ******************************************************** * WRITE (IOIMP,*) 'Calcul contraintes' * Calcul des noveaux HCLO IF (DORTH(1).LT.0.) THEN HCLO1=1 ELSE HCLO1=0 ENDIF IF (DORTH(2).LT.0.) THEN HCLO2=1 ELSE HCLO2=0 ENDIF IF (DORTH(3).LT.0.) THEN HCLO3=1 ELSE HCLO3=0 ENDIF * Calcul des nouvelles KEFF DO JLOOP=1,LHOOK DO ILOOP=1,LHOOK KEFF1(ILOOP,JLOOP)=K01(ILOOP,JLOOP) KEFF2(ILOOP,JLOOP)=K02(ILOOP,JLOOP) KEFF3(ILOOP,JLOOP)=K03(ILOOP,JLOOP) ENDDO ENDDO KEFF1(1,1)=K01(1,1)*(1.-ETADS*HCLO1) KEFF2(2,2)=K02(2,2)*(1.-ETADS*HCLO2) KEFF3(3,3)=K03(3,3)*(1.-ETADS*HCLO3) * Calcul des YGR * WRITE (IOIMP,*) 'YW1' * WRITE (IOIMP,*) (YW(ILOOP), ILOOP=1,6) YGR1=0. DO 510 ILOOP=1,6 YGR1=YGR1+YW(ILOOP)*DORTH(ILOOP) 510 CONTINUE YGR1=0.5D0*YGR1 * WRITE (IOIMP,*) 'YGR1=',YGR1 * WRITE (IOIMP,*) 'YW2' * WRITE (IOIMP,*) (YW(ILOOP), ILOOP=1,6) YGR2=0. DO 520 ILOOP=1,6 YGR2=YGR2+YW(ILOOP)*DORTH(ILOOP) 520 CONTINUE YGR2=0.5D0*YGR2 YGR3=0. DO 530 ILOOP=1,6 YGR3=YGR3+YW(ILOOP)*DORTH(ILOOP) 530 CONTINUE YGR3=0.5D0*YGR3 YGR1 = MAX(YGR1,0.D0) YGR2 = MAX(YGR2,0.D0) YGR3 = MAX(YGR3,0.D0) *Calcul des YEQ YEQ1= AEQ(1,1)*YGR1+AEQ(1,2)*YGR2+AEQ(1,3)*YGR3 YEQ2= AEQ(2,1)*YGR1+AEQ(2,2)*YGR2+AEQ(2,3)*YGR3 YEQ3= AEQ(3,1)*YGR1+AEQ(3,2)*YGR2+AEQ(3,3)*YGR3 *Calcul des DOM DD1= ((SQRT(YEQ1) - G1Y0)/ G1YC ) DD2= ((SQRT(YEQ2) - G2Y0)/ G2YC ) DD3= ((SQRT(YEQ3) - G3Y0)/ G3YC ) DD1 = MAX(DD1,0.D0) DD2 = MAX(DD2,0.D0) DD3 = MAX(DD3,0.D0) DOM1= G1DC*(1.D0 - EXP(-1.* ( DD1**G1P ) ) ) DOM2= G2DC*(1.D0 - EXP(-1.* ( DD2**G2P ) ) ) DOM3= G3DC*(1.D0 - EXP(-1.* ( DD3**G3P ) ) ) DOM1= MAX(DOM1,VAR0(2)) DOM2= MAX(DOM2,VAR0(3)) DOM3= MAX(DOM3,VAR0(4)) *Calcul de la matrice de rigidite DO 600 JLOOP=1,LHOOK DO ILOOP=1,LHOOK RIG0(ILOOP,JLOOP)=DDAUX(ILOOP,JLOOP) & -DOM1*KEFF1(ILOOP,JLOOP) & -DOM2*KEFF2(ILOOP,JLOOP) & -DOM3*KEFF3(ILOOP,JLOOP) ENDDO 600 CONTINUE * Calcul des contraintes a la fin du pas * SORTH contient les contraintes a la fin du pas * dans le repere orthotrope * ATTENTION: * On reorganise les contraintes en cisaillement pour * calculer les contraintes dans le repere global SIGFV(1)=SORTH(1) SIGFV(2)=SORTH(2) SIGFV(3)=SORTH(3) SIGFV(4)=SORTH(6) SIGFV(5)=SORTH(5) SIGFV(6)=SORTH(4) * On appele SICROT pour trouver le contraintes dans le repere global * On utilise SORTH pour garder le resultat * (on peut pas passer SIGF a la subroutine car il est dans un segment) * On recopie SORTH in SIGF DO 1000 ILOOP=1,6 SIGF(ILOOP)=SORTH(ILOOP) 1000 CONTINUE VARF(2)= DOM1 VARF(3)= DOM2 VARF(4)= DOM3 99999 format(2x,' ',(6(1x,3pe12.5),/)) 99998 format(2x,' ',(4(1x,3pe12.5),/)) 99997 format(2x,' ',(1x,3pe12.5),/) 99996 format(2x,' ',(3(1x,1pe12.3),/)) RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales