C WELLS     SOURCE    PV        17/12/08    21:18:08     9660           
      SUBROUTINE WELLS(WRK52,WRK53,WRK54,IB,IGAU,NBPGAU)
C
C______________________________________________________________________
C
C     MODELE  WELLS
C______________________________________________________________________
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)

-INC PPARAM
-INC CCOPTIO
-INC DECHE
*

      DIMENSION SIGF1(3),DEPST1(3),EPSTF1(3)
      DIMENSION DEPST2(3)

      NSTRS = SIG0(/1)
      NVARI = VAR0(/1)
      NMAT  = XMAT(/1)
      NSTRS1 = NSTRS - 1

*      PRINT *,' ENTREE WELLS - NMAT=', NMAT
*
*
*  QUELQUES IMPRESSIONS EN ENTREE
*
*     DO I=1,NMAT
*      PRINT *,' I=', I, '  XMAT=', XMAT(I)
*     ENDDO
*
*     DO I=1,NSTRS
*      PRINT *,' I=', I, '  SIG0=', SIG0(I)
*     ENDDO
*
*     DO I=1,NVARI
*      PRINT *,' I=', I, '  VAR0=', VAR0(I)
*     ENDDO
*
*     DO I=1,NSTRS
*      PRINT *,' I=', I, '  DEPST=', DEPST(I)
*     ENDDO
*

*
*   XMAT(1) : KS
*   XMAT(2) : KN
*        3  : LTR
*        4  : GFTR
*        5  : HS
*        6  : DINT
*

      XKS  = XMAT(1)
      XKN  = XMAT(2)
      XLTR = XMAT(3)
      GFTR = XMAT(4)
      HS   = - XMAT(5)
      DINT = XMAT(6)

*
*   SIG0(1) : SMS1
*   SIG0(2) : SMS2 SI 3D
*   SIG0(NSTRS) : SMN
*
*   EPST0(1) : DRS1
*   EPST0(2) : DRS2 SI 3D
*   EPST0(NSTRS) : DRN
*
*
*
*
*   VAR0(1) : EPSE
*   VAR0(2) : EPS1
*   VAR0(3) : EPS2  SI 3D
*   VAR0(NVARI) : EPN
*
* -----------------------
*     LOI ELASTIQUE
* -----------------------
*
      CALL DOU266(XMAT,CMATE,IFOUR,NSTRS,DDHOOK,IRET)

*
*  ON RECUPERE L'OUVERTURE MAXI INITIALE
*
      XK0 = VAR0(NVARI)

*
*  ON REGARDE L'ETAT INITIAL  ET L'ETAT FINAL
*
      DN0 = EPST0(NSTRS)
      DNF = DN0 + DEPST(NSTRS)
      CR0 = DN0 - XK0
      CRF = DNF - XK0

*
*  TEST DE DN0 PAR RAPPORT A DNF
*
      IF(DN0.GT.DNF) GO TO 10



*  --------------------------------------------------------------------
*  !                       A)    DN0 < DNF                            !
*  --------------------------------------------------------------------


*-------------------------------------
*  1-ER CAS : FERMETURE - FERMETURE
*-------------------------------------
*
      IF(DN0.LE.0.D0.AND.DNF.LE.0.D0) THEN

*        PRINT *,' CAS A1 '
C
C       calcul de l'increment de contrainte
C
        CALL MATVE1 (DDHOOK,DEPST,NSTRS,NSTRS,DSIGT,2)
C
C       ON CALCULE LES CONTRAINTES FINALES
C
        DO I=1,NSTRS
          SIGF(I) = SIG0(I) + DSIGT(I)
        ENDDO
        DO I=1,NVARI
          VARF(I) = VAR0(I)
        ENDDO
*-------------------------------------
*  2-EME CAS : FERMETURE - OUVERTURE
*-------------------------------------
*
      ELSE IF (DN0.LE.0.D0.AND.DNF.GT.0.D0) THEN

*        PRINT *,' CAS A2 '

*
*     CALCUL DE LA PROPORTION
*
         XX1L =  - DN0 /(DNF - DN0 )
         XX1NL= 1.D0 - XX1L
         DO I=1,NSTRS
            DEPST1(I) = DEPST(I)*XX1L
            DEPST2(I) = DEPST(I)*XX1NL
         ENDDO
C
C       calcul de l'increment de contrainte PUREMENT ELASTIQUE
C
        CALL MATVE1 (DDHOOK,DEPST1,NSTRS,NSTRS,DSIGT,2)
C
        DO I=1,NSTRS
          SIGF1(I) = SIG0(I) + DSIGT(I)
          EPSTF1(I) = EPST0(I) + DEPST1(I)
        ENDDO

C
C       CALCUL DU SUPPPLEMENT DE CONTRAINTE
C
*
*   1-ER SOUS CAS : JOINT DEJA ENDOMMAGE
*   °°°°°°°°°°°°?*
        IF(XK0.GT.0.D0) THEN
*
*                   ON VERIFIE SI LE POINT FINAL DEPASSE LE CRITERE
*
*        A)  ON NE DEPASSE PAS  => ON UTILISE TOUT CE QUI RESTE
*            -----------------
*
            IF(CRF.LE.0.) THEN

               DO I=1,NSTRS1
                 SIGF(I) = SIGF1(I) +
     &                     DINT*EXP(HS*DNF)*EPSTF(I)
     &                   - DINT*EPSTF1(I)
               ENDDO
*
               PENTE3 = XLTR * EXP(-XLTR*XK0/GFTR)/XK0
               DSIG3 = PENTE3 * DEPST2(NSTRS)
               SIGF(NSTRS)= SIGF1(NSTRS) + DSIG3
*
               VARF(1) = ABS(DEPST2(NSTRS))
               DO I=1,NSTRS1
                 VARF(I+1) = VAR0(I+1)+ DEPST2(I)
               ENDDO
               VARF(NVARI) = VAR0(NVARI)
*
*
*        B)  ON DEPASSE
*            ----------
*
            ELSE
*
*             IL FAUT CALCULER UNE AUTRE PROPORTION
*
               XX2L = XK0 /DNF
               DO I=1,NSTRS
                  DEPST1(I) = DEPST2(I)*XX2L
               ENDDO
*
               DO I=1,NSTRS1
                 SIGF(I) = SIGF1(I) +
     &                     DINT*EXP(HS*DNF)*EPSTF(I)
     &                   - DINT*EPSTF1(I)
               ENDDO
*
*               3-EME COMPOSANTE : D'ABORD PARTIE SECANTE
*
               PENTE3 = XLTR * EXP(-XLTR*XK0/GFTR)/XK0
               DSIG3 = PENTE3 * DEPST1(NSTRS)
               SIGF1(NSTRS)= SIGF1(NSTRS) + DSIG3
*
*              PUIS LA PARTIE ADOUCISSANTE
*

               DSIG3 = XLTR*EXP(-XLTR*DNF/GFTR) -
     &                   XLTR*EXP(-XLTR*XK0/GFTR)
               SIGF(NSTRS) = SIGF1(NSTRS) + DSIG3
*
               VARF(1) = ABS(DEPST2(NSTRS))
               DO I=1,NSTRS1
                 VARF(I+1) = VAR0(I+1)+ DEPST2(I)
               ENDDO
               VARF(NVARI) = DNF

            ENDIF

*
*   2-EME SOUS CAS : JOINT PAS ENDOMMAGE
*   °°°°°°°°°°°°°°
*
        ELSE

               DO I=1,NSTRS1
                 SIGF(I) = SIGF1(I) +
     &                     DINT*EXP(HS*DNF)*EPSTF(I)
     &                   - DINT*EPSTF1(I)
               ENDDO
*
*                DIRECTEMENT ADOUCISSANT
*
               DSIG3 = XLTR*EXP(-XLTR*DNF/GFTR)
     &                 - XLTR
               SIGF(NSTRS) = SIGF1(NSTRS) + DSIG3
*
               VARF(1) = ABS(DEPST2(NSTRS))
               DO I=1,NSTRS1
                 VARF(I+1) = VAR0(I+1)+ DEPST2(I)
               ENDDO
               VARF(NVARI) = DNF

        ENDIF

*-------------------------------------
*  3-EME CAS : OUVERTURE - OUVERTURE
*-------------------------------------
*
      ELSE IF (DN0.GT.0.D0.AND.DNF.GT.0.D0) THEN


*        PRINT *,' CAS A3 '


*
*   1-ER SOUS CAS : JOINT DEJA ENDOMMAGE
*   °°°°°°°°°°°°?*


*        PRINT *,' CAS A3  XK0=' , XK0

        IF(XK0.GT.0.D0) THEN
*
*                   ON VERIFIE SI LE POINT FINAL DEPASSE LE CRITERE
*
*        A)  ON NE DEPASSE PAS  => ON UTILISE TOUT L'INCREMENT
*            -----------------
*

*        PRINT *,' CAS A3  CRF=' , CRF


            IF(CRF.LE.0.) THEN

               DO I=1,NSTRS1
                 SIGF(I) = SIG0(I) +
     &                     DINT*EXP(HS*DNF)*EPSTF(I)
     &                   - DINT*EXP(HS*DN0)*EPST0(I)
               ENDDO
*
               PENTE3 = XLTR * EXP(-XLTR*XK0/GFTR)/XK0
               DSIG3 = PENTE3 * DEPST(NSTRS)
               SIGF(NSTRS)= SIG0(NSTRS) + DSIG3
*
               VARF(1) = VAR0(1)+ABS(DEPST(NSTRS))
               DO I=1,NSTRS1
                 VARF(I+1) = VAR0(I+1)+ DEPST(I)
               ENDDO
               VARF(NVARI) = VAR0(NVARI)
*
*
*        B)  ON DEPASSE
*            ----------
*
            ELSE
*
               DO I=1,NSTRS1
                 SIGF(I) = SIG0(I) +
     &                     DINT*EXP(HS*DNF)*EPSTF(I)
     &                   - DINT*EXP(HS*DN0)*EPST0(I)
               ENDDO
*
*             3-EME COMPOSANTE :
*             IL FAUT CALCULER UNE PROPORTION
*
               XX1L = (XK0 -DN0) / (DNF - DN0 )
*               PRINT *, ' XX1L = ', XX1L

               DO I=1,NSTRS
                  DEPST1(I) = DEPST(I)*XX1L
               ENDDO
*
*              D'ABORD PARTIE SECANTE
*
               PENTE3 = XLTR * EXP(-XLTR*XK0/GFTR)/XK0
               DSIG3 = PENTE3 * DEPST1(NSTRS)
               SIGF1(NSTRS)= SIG0(NSTRS) + DSIG3
*
*              PUIS LA PARTIE ADOUCISSANTE
*

               DSIG3 = XLTR*EXP(-XLTR*DNF/GFTR) -
     &                   XLTR*EXP(-XLTR*XK0/GFTR)
               SIGF(NSTRS) = SIGF1(NSTRS) + DSIG3
*
               VARF(1) = VAR0(1)+ABS(DEPST(NSTRS))
               DO I=1,NSTRS1
                 VARF(I+1) = VAR0(I+1)+ DEPST(I)
               ENDDO
               VARF(NVARI) = DNF

            ENDIF

*
*   2-EME SOUS CAS : JOINT PAS ENDOMMAGE
*   °°°°°°°°°°°°°°
*
        ELSE

               DO I=1,NSTRS1
                 SIGF(I) = SIG0(I) +
     &                     DINT*EXP(HS*DNF)*EPSTF(I)
     &                   - DINT*EXP(HS*DN0)*EPST0(I)
               ENDDO
*
*                DIRECTEMENT ADOUCISSANT
*
               DSIG3 = XLTR*EXP(-XLTR*DNF/GFTR)
     &                 - XLTR
               SIGF(NSTRS) = SIGF1(NSTRS) + DSIG3
*
               VARF(1) = VAR0(1)+ABS(DEPST(NSTRS))
               DO I=1,NSTRS1
                 VARF(I+1) = VAR0(I+1)+ DEPST(I)
               ENDDO
               VARF(NVARI) = DNF

        ENDIF
*
      ENDIF
      GO TO 20
*
  10  CONTINUE
*
*
*  --------------------------------------------------------------------
*  !                       B)    DN0 >= DNF                           !
*  --------------------------------------------------------------------


*-------------------------------------
*  1-ER CAS : FERMETURE - FERMETURE
*-------------------------------------
*
      IF(DN0.LE.0.D0.AND.DNF.LE.0.D0) THEN


*        PRINT *,' CAS B1'

C
C       calcul de l'increment de contrainte
C
        CALL MATVE1 (DDHOOK,DEPST,NSTRS,NSTRS,DSIGT,2)
C
C       ON CALCULE LES CONTRAINTES FINALES
C
        DO I=1,NSTRS
          SIGF(I) = SIG0(I) + DSIGT(I)
        ENDDO
        DO I=1,NVARI
          VARF(I) = VAR0(I)
        ENDDO
*-------------------------------------
*  2-EME CAS : DECHARGE - FERMETURE
*-------------------------------------
*
      ELSE IF (DN0.GT.0.D0.AND.DNF.LE.0.D0) THEN

*        PRINT *,' CAS B2'

*
*     CALCUL DE LA PROPORTION
*
         XX1L =  - DN0 /(DNF - DN0 )
         XX1NL= 1.D0 - XX1L
         DO I=1,NSTRS
            DEPST1(I) = DEPST(I)*XX1L
            DEPST2(I) = DEPST(I)*XX1NL
            EPSTF1(I) = EPST0(I) + DEPST1(I)
         ENDDO


         DO I=1,NSTRS1
            SIGF1(I) = SIG0(I) +
     &                 DINT*EPSTF1(I)
     &               - DINT*EXP(HS*DN0)*EPST0(I)
         ENDDO
*
         PENTE3 = XLTR * EXP(-XLTR*XK0/GFTR)/XK0
         DSIG3 = PENTE3 * DEPST1(NSTRS)
         SIGF1(NSTRS)= SIG0(NSTRS) + DSIG3

C
C        CALCUL DU SUPPPLEMENT DE CONTRAINTE  PUREMENT ELASTIQUE
C
         CALL MATVE1 (DDHOOK,DEPST2,NSTRS,NSTRS,DSIGT,2)
C
         DO I=1,NSTRS
            SIGF(I) = SIGF1(I) + DSIGT(I)
         ENDDO
*
         VARF(1) = ABS(DEPST(NSTRS))
         DO I=1,NSTRS1
            VARF(I+1) = VAR0(I+1)+ DEPST1(I)
         ENDDO
         VARF(NVARI) = VAR0(NVARI)

*----------------------------------
*  3-EME CAS : DECHARGE - DECHARGE
*----------------------------------
*
      ELSE IF (DN0.GT.0.D0.AND.DNF.GE.0.D0) THEN


*        PRINT *,' CAS B3'

         ZOB = -XLTR*XK0/GFTR
         ZOB1 = EXP (ZOB)
*        PRINT *,' XLTR=', XLTR , ' XK0 = ', XK0 ,
*    &           '  GFTR = ', GFTR
*        PRINT *,' ZOB=', ZOB , '  ZOB1 = ', ZOB1



         DO I=1,NSTRS1
           SIGF(I) = SIG0(I) +
     &               DINT*EXP(HS*DNF)*EPSTF(I)
     &             - DINT*EXP(HS*DN0)*EPST0(I)
         ENDDO
*
         PENTE3 = XLTR * EXP(-XLTR*XK0/GFTR)/XK0
         DSIG3 = PENTE3 * DEPST(NSTRS)
         SIGF(NSTRS)= SIG0(NSTRS) + DSIG3
*
         VARF(1) = ABS(DEPST(NSTRS))
         DO I=1,NSTRS1
            VARF(I+1) = VAR0(I+1)+ DEPST(I)
         ENDDO
         VARF(NVARI) = VAR0(NVARI)

      ENDIF


   20 CONTINUE


*      PRINT *,' SORTIE DE WELLS'
*
*
*  QUELQUES IMPRESSIONS EN SORTIE
*
*     DO I=1,NSTRS
*      PRINT *,' I=', I, '  SIGF=', SIGF(I)
*     ENDDO
*
*     DO I=1,NVARI
*      PRINT *,' I=', I, '  VARF=', VARF(I)
*     ENDDO
*
*     DO I=1,NSTRS
*      PRINT *,' I=', I, ' EPSTF =', EPSTF(I)
*     ENDDO

      RETURN
      END















 
 
 
