C CJFDEC    SOURCE    OF166741  25/11/04    21:15:25     12349          
C JFDECO    SOURCE    AM        00/12/13    21:37:04     4045
      SUBROUTINE CJFDEC(WRK52,WRK53,WRK54,WRKK2,NSTRS1,NVARI,ICARA,
     $   xecou)
C
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C     %                                                               %
C     %   subroutine integrant le comportement du beton               %
C     %                                                               %
C     %   - determine les nouvelles valeurs des variables             %
C     %     d'histoire YLIM1 YLIM2 D1 et D2                           %
C     %                                                               %
C     %                                                               %
C     %   en fonction du vecteur des deformations                     %
C     %                                                               %
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C     %                                                               %
C     %                                                               %
C     %          declaration des variables                            %
C     %                                                               %
C     %                                                               %
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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(NSTRS)
      END SEGMENT
      SEGMENT WRK3
        REAL*8 EPSILO(NSTRS)
      END SEGMENT
*
      REAL*8 YLIM1,YLIM2,DOM1,DOM2,Y1,Y2,Z1,Z2
*
      REAL*8 EPS33(3,3),XROTA(3,3),EPSA(3),EPSN(3)
      REAL*8 SIGNN(3),SIGA(3),SIGMAN(3,3)
      INTEGER JSIGN(3)

      LOGICAL CONV
      REAL*8 UN,DEUX,ZERO
      PARAMETER (ZERO=0.D0)
      PARAMETER (UN=1.D0)
      PARAMETER (DEUX=2.D0)
*
*     -----> RECUPERATION DES VARIABLES INTERNES
*
      YLIMA1 = VAR0(1)
      YLIMA2 = VAR0(2)
      DOM1  = VAR0(3)
      DOM2  = VAR0(4)
      E     = XMAT(1)

      Z1=UN/(UN-DOM1)
      Z2=UN/(UN-DOM2)
*
*     -----> ON DIAGONALISE LES ANCIENNES DEFORMATIONS
*
      CALL ENDOCA(EPSILI,EPS33,2)
      CALL JACOB3(EPS33,2,EPSA,XROTA)
*      PRINT*,'ANCIENNES DEFORMATIONS PPALES',EPSA(1),EPSA(2),EPSA(3)
*
*     -----> ON DIAGONALISE LES ANCIENNES CONTRAINTES
*
      CALL ENDOCA(SIG0,EPS33,1)
      CALL JACOB3(EPS33,2,SIGA,XROTA)
*
*     -----> ON CALCULE LES DEFORMATIONS TOTALES
*
      SEGINI WRK3
      DO ISTRS=1,NSTRS1
         EPSILO(ISTRS)=EPSILI(ISTRS)+DEPST(ISTRS)
*         print*,'ISTRS',ISTRS,'EPSILO',EPSILO(ISTRS)
      END DO
*
*     -----> ON LES DIAGONALISE
*
      CALL ENDOCA(EPSILO,EPS33,2)
      CALL JACOB3(EPS33,2,EPSN,XROTA)
*      PRINT*,'DEFORMATIONS PPALES',EPSN(1),EPSN(2),EPSN(3)
*
*     -----> ON INITIALISE Y1 ET Y2
*
      IF (SIGA(1) .GE. ZERO) THEN
         JSIGN(1)=1
      ELSE
         JSIGN(1)=0
      END IF
      IF (SIGA(2) .GE. ZERO) THEN
         JSIGN(2)=1
      ELSE
         JSIGN(2)=0
      END IF
      TRSIG=SIGA(1)+SIGA(2)
      IF (TRSIG .GE. ZERO) THEN
         FSIG=TRSIG
      ELSE IF (TRSIG.GE.-SIGF) THEN
         FSIG=TRSIG*(UN+TRSIG/(DEUX*SIGF))
      ELSE
         FSIG=-SIGF*TRSIG/DEUX
      END IF
      YA1=( JSIGN(1)*SIGA(1)*SIGA(1)+JSIGN(2)*SIGA(2)*SIGA(2) )
     &                                      *Z1*Z1/(DEUX*E)
      YA2=( (1-JSIGN(1))*SIGA(1)*SIGA(1)+
     &                         (1-JSIGN(2))*SIGA(2)*SIGA(2) )
     &                                      *Z2*Z2/(DEUX*E)
C
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C     %                                                               %
C     %  DECOUPAGE DE L'INCREMENT DE DEFORMATION                      %
C     %                                                               %
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c
      NEPS=1
      CONV=.FALSE.
      DO WHILE ((.NOT. CONV).AND.(NEPS.LE.100))
         SIG1 = SIGA(1)
         SIG2 = SIGA(2)
         YLIM1=YLIMA1
         YLIM2=YLIMA2
         IF (SIG1.GE.0.D0)THEN
           JSIGN(1)=1
         ELSE
           JSIGN(1)=0
         END IF
         IF (SIG2.GE.0.D0)THEN
          JSIGN(2)=1
         ELSE
          JSIGN(2)=0
         END IF
         Z1=1.D0/(1.D0-DOM1)
         Z2=1.D0/(1.D0-DOM2)
         Y1 = YA1
         Y2 = YA2
         DEPS1=(EPSN(1)-EPSA(1))/NEPS
         DEPS2=(EPSN(2)-EPSA(2))/NEPS
         IEPS=0
         DT1=xecou.DT/NEPS
c         print*,'Vitesse',(DEPS1/dt1),(DEPS2/dt1)
         CONV=.TRUE.
         DO WHILE (CONV .AND. (IEPS.LT.NEPS))
           IEPS=IEPS+1
           EPSP1=EPSA(1)+IEPS*DEPS1
           EPSP2=EPSA(2)+IEPS*DEPS2
c
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C     %                                                               %
C     %  CALCUL DES VALEURS  DES VARIABLES INTERNES                   %
C     %                                                               %
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c
            CALL CODJFD(WRK52,WRK53,EPSP1,EPSP2,YLIM1,YLIM2,Z1,Z2,Y1,Y2,
     1                 JSIGN,SIG1,SIG2,CONV,DT1)
            if (.not. conv ) then
                conv=.true.
                CALL CODJF2(WRK52,WRK53,EPSP1,EPSP2,YLIM1,YLIM2,Z1,Z2,
     1                 Y1,Y2,JSIGN,SIG1,SIG2,CONV,DT1)
            endif
C
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C     %                                                               %
C     %  REACTUALISATION DES SEUILS                                   %
C     %                                                               %
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c
            IF (CONV) THEN
               VARF(1)= MAX(Y1,VAR0(1))
               VARF(2)= MAX(Y2,VAR0(2))
               VARF(3)= MAX(1.D0-1.D0/Z1,VAR0(3))
               VARF(4)= MAX(1.D0-1.D0/Z2,VAR0(4))
c               IF (Y1 .GT.YLIM1)THEN
c                  VARF(1)=Y1
c                  VARF(3)=1.D0-1.D0/Z1
c               ELSE
c                  VARF(1)=VAR0(1)
c                  VARF(3)=VAR0(3)
c               END IF
c               IF (Y2 .GT. YLIM2)THEN
c                 VARF(2)=Y2
c                 VARF(4)=1.D0-1.D0/Z2
c               ELSE
c                  VARF(2)=VAR0(2)
c                  VARF(4)=VAR0(4)
c               END IF
            END IF
         END DO
         NEPS=NEPS*10
      END DO
      IF (.NOT. CONV)THEN
            print*,'valeur de neps et ieps',neps,ieps
            print*, 'NON CONVERGE DANS EULER',EPSP1,EPSP2
C            CALL MODJFD(WRK0,NMATT,EPSP1,EPSP2,YLIM1,YLIM2,Z1,Z2,Y1,Y2,
C     1                 JSIGN,SIG1,SIG2,CONV,DT1)
            SEGSUP WRK3
            KERRE=56
            return
      END IF
C
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C     %                                                               %
C     %  CALCUL DES CONTRAINTES DANS LE REPERE DE L'ELEMENT           %
C     %                                                               %
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C
      SIGNN(1)=SIG1
      SIGNN(2)=SIG2
      SIGNN(3)=0.D0
      CALL PRODT2 (SIGMAN,SIGNN,XROTA,3)
      SIGF(1)=SIGMAN(1,1)
      SIGF(2)=SIGMAN(2,2)
      SIGF(3)=SIGMAN(3,3)
      SIGF(4)=SIGMAN(1,2)
C
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C     %                                                               %
C     %  CALCUL DES DEFORMATIONS ANELASTIQUES                         %
C     %                                                               %
C     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C
      CALL MATVE1 (DDHOOK,SIGF,NSTRS1,NSTRS1,EPSILI,1)
      DO ISTRS=1,NSTRS1
          EPINF(ISTRS)=EPSILO(ISTRS)-EPSILI(ISTRS)
      END DO
      SEGSUP WRK3

      RETURN
      END

 
