C CMVMMM    SOURCE    OF166741  25/11/04    21:15:29     12349          
      SUBROUTINE CMVMMM(WRK52,WRK53,WRK54,NVARI,iecou,necou,xecou)

*======================================================================
* BCN
*     New source: one nonlocal damage material model added:
*     Modified Von Mises
*     This routine is very similar to MAZZZ.ESO
*======================================================================
C
C    calcule la deformation initiale et l'increment de deformation
C    a partir de la contrainte initiale et l'increment de contrainte
C    elastique puis appelle la subroutine MAZARS
C
C     variables en entree
C
C     NSTRS1      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 2)
C
C     NMATT      nombre de constantes du materiau
C
C     ISTEP      flag utilise pour separer les etapes dans un calcul non local
C                ISTEP=0 -----> calcul local
C                ISTEP=1 -----> calcul non local etape 1 on calcule les seuils
C                ISTEP=2 -----> calcul non local etape 2 on continue le calcul
C                               a partir des seuils moyennes
C
C     variables en sortie
C
C     VARF      variables internes finales dans WRK0
C
C     SIGF      contraintes finales dans WRK0
C
C Modif L.Bode - 09/10/92 - Traitement particulier des coques
C Modif L.Bode - 14/10/92 - Modifications complementaires
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)

-INC PPARAM
-INC CCOPTIO
-INC DECHE
-INC TECOU

      SEGMENT WRKK2
         REAL*8 EPSILI(NSTRSV)
      END SEGMENT

      SEGMENT WRK6
        REAL*8 SIG0S(NSTRS1),DEPSTS(NSTRS1)
      END SEGMENT

      PARAMETER (UN=1.D0)

      nstrs1 = iecou.NSTRSS
      KERRE=0
      YOUN = XMAT(1)
      XNU  = XMAT(2)
C
C     ON CALCULE LES CONTRAINTES VRAIES DANS LE CAS DES COQUES
C
C      print*,'dans mazzzz MFR=', mfr
      IF (MFR .EQ. 9) THEN
         EPAI=xcarb(1)
         SEGINI WRK6
         DO 101 ISTRS=1,nstrs1
            SIG0S(ISTRS)=SIG0(ISTRS)
            DEPSTS(ISTRS)=DEPST(ISTRS)
  101    CONTINUE
         nstrsV=4
         IFOUR2=-2
C Modif L.Bode - 14/10/92
C Dans le cas des coques, on force la dimension a 2 pour MAZARS
C ie on travaille en contraintes planes
         JDIM =2
C Fin modif L.Bode
         DO 102 ISTRS=1,2
            SIG0(ISTRS)=SIG0S(ISTRS)/EPAI
  102    CONTINUE
         DEPST(3)=0.D0
         DEPST(4)=DEPSTS(3)
         SIG0(3)=0.D0
         SIG0(4)=SIG0S(3)/EPAI
      ELSE IF (MFR .EQ. 1) THEN
         nstrsV=nstrs1
         IFOUR2=IFOUR
C Modif L.Bode - 14/10/92
C Pour les elts massifs, on utilise la vraie dimension
         JDIM = IDIM
C Fin modif L.Bode
      ELSE
         PRINT*,'MFR=',MFR
         KERRE=57
         RETURN
      END IF

C     calcul de la matrice elastique
      CMATE = 'ISOTROPE'
      KCAS=1
*      print*,'increment de deformation elastique'
      CALL DOHMAS(XMAT,CMATE,IFOUR2,nstrsV,KCAS,DDHOOK,IRTD)

*      DO ISTRS=1,nstrs1
*         print*,(DDHOOK(ISTRS,J),j=1,nstrs1)
*         print*,DEPST(ISTRS)
*      END DO
      IF ( IRTD .NE. 1) THEN
         print*,'erreur dans dohmas'
         KERRE=56
         RETURN
      END IF
C
C      calcul de l'increment de contrainte
C
      CALL MATVE1 (DDHOOK,DEPST,NSTRSV,NSTRSV,DSIGT,1)
C
      CALL DOHMAS(XMAT,CMATE,IFOUR2,NSTRSV,2,DDHOOK,IRTD)
*      DO ISTRS=1,NSTRSV
*              print*,(DDHOOK(ISTRS,J),j=1,nstrsv)
*      END DO
      IF ( IRTD .NE. 1) THEN
         print*,'erreur dans dohmas(2)'
         KERRE=56
         RETURN
      END IF

C     inversion de cette matrice
      PREC=1.D-08
*        print*,'appel a invalm'
      CALL INVALM(DDHOOK,NSTRSV,NSTRSV,IRTD,PREC)
      IF (IRTD.NE.0)THEN
         print*,'erreur dans invalm'
         KERRE=56
         RETURN
      END IF

      SEGINI WRKK2
C
C     calcul des deformations du materiau elastique lineaire
C
      CALL MATVE1 (DDHOOK,SIG0,NSTRSV,NSTRSV,EPSILI,1)
C
C     modification pour tenir compte de l'endommagement

      DO ISTRS=1,NSTRSV
        EPSILI(ISTRS)=EPSILI(ISTRS)+EPIN0(ISTRS)
      ENDDO
C
C      appel a la routine MAZARS
C
C Modif L.Bode - 14/10/92
C On envoie la dimension et le numero de la formulation
C  ( Elts Coques JDIM =2 , IFOUR2 = -2 => contraintes planes
C    Elts Massifs JDIM = IDIM ,IFOUR2 = IFOUR)
*            print*,'appel a mazars'
*
* BCN
C            CALL  MAZARS (WRK0,WRK1,WRKK2,WRK5,NSTRSV,NVARI,NMATT,
C     1                    ISTEP,iecou.ICARA,JDIM,IFOUR2)
c        CALL  MODVONMISES (WRK0,WRK1,WRKK2,WRK5,NSTRSV,NVARI,NMATT,
c     1                    ISTEP,iecou.ICARA,JDIM,IFOUR2)
      icarbi=iecou.icara
      CALL CODVMS (WRK52,WRK53,WRK54,WRKK2,NSTRSV,NVARI,ICARBI,
     $     jdim,ifour2)
* BCN
*
C Fin modif L.Bode
C
C      ON RECALCULE LES CONTRAINTES EFFECTIVES POUR LES COQUES
C
*            print*,'apres mazars'
      IF (MFR .EQ. 9) THEN

C     ON MET A JOUR DE FACON NON LINEAIRE LA PARTIE MEMBRANE
C     ET LES PARTIES FLEXION ET EFFORTS TRANCHANTS LE CAS ECHEANT
         FAC=(EPAI**3)/12.D0
         AUX =FAC*YOUN/(1.D0-XNU*XNU)
         AUX1=FAC*YOUN*.5D0/(1.D0+XNU)
         AUX2=EPAI*YOUN*.5D0/(1.d0+XNU)/1.2d0
         DO ISTRS=1,nstrs1
            SIG0(ISTRS)=SIG0S(ISTRS)
            DEPST(ISTRS)=DEPSTS(ISTRS)
         ENDDO
         SIGF(1)=SIGF(1)*EPAI
         SIGF(2)=SIGF(2)*EPAI
         SIGF(3)=SIGF(4)*EPAI
         SIGF(4)=SIG0(4)+AUX*(DEPST(4)+XNU*DEPST(5))
         SIGF(5)=SIG0(5)+AUX*(DEPST(5)+XNU*DEPST(4))
         SIGF(6)=SIG0(6)+AUX1*DEPST(6)
         SIGF(7)=SIG0(7)+AUX2*DEPST(7)
         SIGF(8)=SIG0(8)+AUX2*DEPST(8)
         SEGSUP WRK6
      END IF

      SEGSUP WRKK2

      RETURN
      END

 
