C DTAK      SOURCE    CHAT      05/01/12    22:57:00     5004
C      SUBRUTINE DTAK : APPLICATION D'UNE LOI DE COMPORTEMENT POUR DES
C                        DEFORMATIONS DUES A LA FLEXION
C======================================================================
       SUBROUTINE DTAK(IFLAG,IDEP,ELEF1,ELDEP1,ELEF2,ELDEP2,
     1                 YLEF1,YLDEP1,YLEF2,YLDEP2,ULEF1,ULDEP1,
     2                 ULEF2,ULDEP2,EF,VARDEP,DEP,DEPE,
     3                 DEPMAX,DEPMIN,EFMAX,EFMIN,X0,RR)
C
C =====================================================================
C ELEF1        - EFFORT MAX. ELASTIQUE DANS LE SENS +
C ELDEP1       - DEFORMATION MAX. ELASTIQUE DANS LE SENS +
C ELEF1        - EFFORT MAX. ELASTIQUE DANS LE SENS -
C ELDEP1       - DEFORMATION MAX. ELASTIQUE DANS LE SENS -
C YLEF1        - EFFORT MAX. LINEAIRE DANS LE SENS +
C YLDEP1       - DEFORMATION MAX. LINEAIRE DANS LE SENS +
C YLEF1        - EFFORT MAX. LINEAIRE DANS LE SENS -
C YLDEP1       - DEFORMATION MAX.LINEAIRE  DANS LE SENS -
C ULEF1        - EFFORT MAX. PLASTIQUE DANS LE SENS +
C ULDEP1       - DEFORMATION MAX. PLASTIQUE DANS LE SENS +
C ULEF2        - EFFORT MAX. PLASTIQUE DANS LE SENS -
C ULDEP2       - DEFORMATION MAX. PLASTIQUE DANS LE SENS -
C EF           - EFFORT DU PAS PRECEDENT
C VARDEP       - L'INCREMENT DE DEFORMATION
C DEP          - DEFORMATION DU PAS PRECEDENT
C DEPMAX       - DEFORMATION MAX. +
C DEPMIN       - DEFORMATION MAX. -
C EFMAX        - EFFORT MAX. +
C EFMIN        - EFFORT MAX. -
C X0           - DERNIERE INTERSECTION AVEC L'AXE OX
C IFLAG        - FLAG POUR LE STADE DE COMPORTEMENT
C REL          - RIGIDITE ELASTIQUE COHERENTE AVEC LA MATRICE DE
C                RIGIDITE
C REL1         - RIGIDITE ELASTIQUE DANS LE SENS +
C REL2         - RIGIDITE ELASTIQUE DANS LE SENS -
C RR1          - RIGIDITE SECANTE DANS LE SENS +
C RR2          - RIGIDITE SECANTE DANS LE SENS -
C RIN1         - RIGIDITE INELASTIQUE DANS LE SENS +
C RIN2         - RIGIDITE INELASTIQUE DANS LE SENS -
C DEPT         - DEFORMATION TOTALE
C RR           - RIGIDITATE POUR LE STADE DE COMPORTEMENT ACTUEL
C
C ----------------------------------------------------------------------
C
      IMPLICIT INTEGER(I-N)
        IMPLICIT REAL*8(A-H,O-Z)
C
C  INITIALISATION
C
        REL = (ELEF1 - ELEF2)/(ELDEP1 - ELDEP2)
C
        IF (ELDEP1.LT.YLDEP1) THEN
                  REL1 = (YLEF1 - ELEF1)/(YLDEP1 - ELDEP1)
        ELSE
                  REL1 = REL
        END IF
C
       IF (ELDEP2.GT.YLDEP2) THEN
                  REL2 = (YLEF2 - ELEF2)/(YLDEP2 - ELDEP2)
        ELSE
                  REL2 = REL
        END IF
C
        RIN1 = (ULEF1 - YLEF1) / (ULDEP1 - YLDEP1)
        RIN2 = (ULEF2 - YLEF2) / (ULDEP2 - YLDEP2)
        RR1 = (YLEF1 / YLDEP1)
        RR2 = (YLEF2 / YLDEP2)
C
        IF(IFLAG.EQ.0) THEN
                  IFLAG = 1
                  RR = REL
                  DEPMAX = ELDEP1
                  EFMAX = ELEF1
                  DEPMIN = ELDEP2
                  EFMIN = ELEF2
                  DEP = 0.0
                  X0 = 0.0
        END IF
C
        DEPT = DEP + VARDEP
C
C  CAS EF = 0
C
        IF(EF.EQ.0.)THEN
           IF(IFLAG.EQ.1)THEN
              IF(DEPT.GT.0.)GO TO 11
              IF(DEPT.LT.0.)GO TO 12
              RETURN
           END IF
           IF((VARDEP.GT.0.).AND.(RR.EQ.(EFMIN / (DEPMIN - X0))))THEN
                   RR = EFMAX / (DEPMAX - X0)
                   GO TO 3
           ELSE IF((VARDEP.LT.0.).AND.(RR.EQ.(EFMAX/(DEPMAX-X0))))THEN
                   RR = EFMIN / (DEPMIN - X0)
                   GO TO 3
           END IF
           IF(IFLAG.EQ.3)GO TO 31
        END IF
C
        GO TO(1,2,3,4),IFLAG
C
C  STADE ELASTIQUE
C
1       IFLAG = 1
11      IF(EF.GE.0)THEN
           IF(DEPT.GT.YLDEP1)THEN
                          DEPMAX = YLDEP1
                          EFMAX = YLEF1
                          VARDEP = DEPT - YLDEP1
                          DEP = YLDEP1
                          EF = YLEF1
                          RR = RIN1
                          GO TO 2
           ELSE
              IF ((ELDEP1.LT.YLDEP1).AND.(DEPT.GE.0.))THEN
               IF (VARDEP.GE.0.)THEN
                IF ((DEP.GE.DEPMAX).OR.(DEPMAX.EQ.ELDEP1)) THEN
                 IF ((DEP.LE.ELDEP1).AND.(DEPT.LE.ELDEP1))THEN
                         RR=REL
                 ELSE IF ((DEP.GE.ELDEP1).AND.(DEPT.GE.ELDEP1))THEN
                         RR=REL1
                 ELSE IF ((DEP.LE.ELDEP1).AND.(DEPT.GE.ELDEP1))THEN
                         VARDEP=DEPT-ELDEP1
                         EF=ELEF1
                         DEP=ELDEP1
                         RR=REL1
                 ENDIF
                ELSE
                  IF (DEPT.GE.DEPMAX) THEN
                         VARDEP=DEPT-DEPMAX
                         EF=EFMAX
                         DEP=DEPMAX
                         RR=REL1
                  ELSE
                         RR=(EFMAX/DEPMAX)
                  ENDIF
                ENDIF
               ELSE
                IF (DEP.GT.DEPMAX) THEN
                        DEPMAX=DEP
                        EFMAX=EF
                 ENDIF
                 IF (DEPMAX.EQ.ELDEP1)THEN
                        RR=REL
                 ELSE
                        RR=(EFMAX/DEPMAX)
                 ENDIF
               ENDIF
             EF = EF + VARDEP * RR
             DEP = DEPT
             RETURN
             END IF
            END IF
            IF(DEPT.LT.0.) THEN
                       DEP = 0.
                       VARDEP = DEPT
                       EF = 0.
                       RR = REL
                       GO TO 12
           END IF
           EF = EF + VARDEP * RR
           DEP = DEPT
           RETURN
        END IF
12      IF(EF.LE.0.)THEN
           IF(DEPT.LT.YLDEP2) THEN
                      DEPMIN = YLDEP2
                      EFMIN = YLEF2
                      VARDEP = DEPT - YLDEP2
                      DEP = YLDEP2
                      EF = YLEF2
                      RR = RIN2
                      GO TO 2
           ELSE
              IF ((ELDEP2.GT.YLDEP2).AND.(DEPT.LE.0.))THEN
               IF (VARDEP.LE.0.)THEN
               IF ((DEP.LE.DEPMIN).OR.(DEPMIN.EQ.ELDEP2)) THEN
                 IF ((DEP.GE.ELDEP2).AND.(DEPT.GE.ELDEP2))THEN
                      RR=REL
                 ELSE IF ((DEP.LE.ELDEP2).AND.(DEPT.LE.ELDEP2))THEN
                      RR=REL2
                 ELSE IF ((DEP.GE.ELDEP2).AND.(DEPT.LE.ELDEP2))THEN
                      VARDEP=DEPT-ELDEP2
                      EF=ELEF2
                      DEP=ELDEP2
                      RR=REL2
                 ENDIF
                ELSE
                  IF (DEPT.LE.DEPMIN) THEN
                      VARDEP=DEPT-DEPMIN
                      EF=EFMIN
                      DEP=DEPMIN
                      RR=REL2
                  ELSE
                      RR=(EFMIN/DEPMIN)
                  ENDIF
                ENDIF
               ELSE
                  IF (DEP.LT.DEPMIN)THEN
                      DEPMIN=DEP
                      EFMIN=EF
                  ENDIF
               IF (DEPMIN.EQ.ELDEP2)THEN
                      RR=REL
                 ELSE
                      RR=(EFMIN/DEPMIN)
                 ENDIF
               ENDIF
               EF = EF + VARDEP * RR
               DEP = DEPT
               RETURN
             END IF
           END IF
           IF (DEPT.GT.0.) THEN
                   DEP = 0.
                   VARDEP = DEPT
                   EF = 0.
                   RR = REL
                   GO TO 11
           END IF
           EF = EF + VARDEP * RR
           DEP = DEPT
          RETURN
        END IF
C
C  STADE PLASTIQUE
C
2       IFLAG = 2
        IF((EF * VARDEP).GE.0.) THEN
                 EF = EF + VARDEP * RR
                 DEP = DEPT
                 IF(EF.GT.ULEF1) IDEP = 1
                 IF(EF.LT.ULEF2) IDEP = -1
               RETURN
        END IF
        IF(EF.GE.0.)THEN
                 DEPMAX = DEP
                 EFMAX = EF
                 RR = SQRT(YLDEP1 / DEP) * RR1
        ELSE
                 DEPMIN = DEP
                 EFMIN = EF
                 RR = SQRT(YLDEP2 / DEPMIN) * RR2
        END IF
C
C   DECHARGE SANS CHANGEMENT DE SENS
C
3       IFLAG = 3
        IF(EF.EQ.0.)GO TO 4
        IF((EF * VARDEP).GT.0.)THEN
                 IF(EF.GT.0.)RR = (EFMAX - EF) / (DEPMAX - DEP)
                 IF(EF.LT.0.)RR = (EFMIN - EF) / (DEPMIN - DEP)
                 GO TO 4
        END IF
        EFT1 = EF + VARDEP * RR
        IF((EFT1 * EF).GT.0.0)THEN
                 EF = EFT1
                 DEP = DEPT
                 RETURN
        END IF
31      X0 = DEP - EF / RR
        IF(VARDEP.GT.0.)RR = EFMAX / (DEPMAX - X0)
        IF(VARDEP.LT.0.)RR = EFMIN / (DEPMIN - X0)
        DEP = X0
        VARDEP = DEPT - DEP
        EF = 0.
        IF(VARDEP.EQ.0.)RETURN
C
C   DECHARGE APRES LE CHANGEMENT DE SENS
C
4       IFLAG = 4
        IF((EF * VARDEP).GE.0.)THEN
           IF(DEPT.GT.DEPMAX)THEN
                    VARDEP = DEPT - DEPMAX
                    DEP = DEPMAX
                    EF = EFMAX
                  IF(DEPMAX.GT.YLDEP1)THEN
                    RR = RIN1
                    GO TO 2
                  ELSE
                    RR = (EFMAX/DEPMAX)
                    GO TO 11
                  END IF
           END IF
           IF(DEPT.LT.DEPMIN)THEN
                    VARDEP = DEPT - DEPMIN
                    DEP = DEPMIN
                    EF = EFMIN
                  IF(DEPMIN.LT.YLDEP2)THEN
                    RR = RIN2
                    GO TO 2
                  ELSE
                    RR = (EFMIN/DEPMIN)
                    GO TO 11
                  END IF
           END IF
           EF = EF + VARDEP * RR
           DEP = DEPT
           RETURN
        END IF
        IF(EF.GE.0.)RR = SQRT(YLDEP1 / DEPMAX) * RR1
        IF(EF.LT.0.)RR = SQRT(YLDEP2 / DEPMIN) * RR2
        GO TO 3
        END


