C CDDIS     SOURCE    OF166741  25/09/30    21:15:04     12371          

      SUBROUTINE CDDIS(WRK52,WRK53,WRK54,NSTRS1,MFR1,IFOU,IB,
     1           IGAU,NBPGAU,NBGMAT,NELMAT,INDLEG,IPWRKG)

C   SUBROUTINE DDIS : L'INITIALISATION ET L'APPEL DES LOI DE COMPORTEMENT
C=========================================================================
c       SUBROUTINE DDIS(NSTRS,CMATE,N2EL,N2PTEL,WTRAV,MFR,IFOU,IB,
c     1           IGAU,EPAIST,MELE,NPINT,NBPGAU,NBGMAT,NELMAT,SECT,
c     2      LHOOK,CRIGI,NMATT,INDLEG,IPWRKG,WRKGL,WRK0,WRK1,KERRE)

      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)

-INC PPARAM
-INC CCOPTIO
-INC SMCOORD
-INC DECHE

***********************************************************************
*        INITIALISATION ET APPEL DES LOIS DE COMPORTEMENT             *
***********************************************************************
*
* ENTREES :
* WRK0 SEGMENT DE TRAVAIL CONTENANT LES CARACTERISTIQUES
* MATERIAUX
* WRK1 SEGMENT DE TRAVAIL CONTENANT LES EFFORTS, LES DEPLACEMENTS
* ET LA MATRICE DE HOOK
* NMATT NOMBRE DE COMPOSANTES DE PROPRIETES DE MATERIAU
* INDLEG CODAGE DES, TYPES DE LOI DE COMPORTEMENT RETENUS
* WRKGL SEGMENT CONTENANT LES LOIS DE COMPORTEMENT DE LA SECTION
* IPWRKG SEGMENT DE POINTEUR SUR LES LOIS CONTENUES DANS WRKGL
* KERRE INDICATEUR D'ERREUR
* WTRAV SEGMENT DE TRAVAIL CONTENANT LES TABLEAUX UTILISES POUR
* LE CALCUL DE LA MATRICE DE HOOKE ELASTIQUE (SS-PROGRAMME CALSIG)
*
* N2EL  = NBRE D ELEMENTS DANS SEGMENT DE HOOKE
* N2PTEL= NBRE DE POINTS DANS SEGMENT DE HOOKE
* MFR1   = NUMERO DE LA FORMULATION
* IFOU  = OPTION DE CALCUL
* IB    = NUMERO DE L ELEMENT COURANT
* IGAU  = NUMERO DU POINT COURANT
* EPAIST= EPAISSEUR
* NBPGAU= NBRE DE POINTS DE GAUSS
* MELE  = NUMERO DE L ELEMENT FINI
* NPINT = NBRE DE POINTS D INTEGRATION
* NBGMAT= NBRE DE POINTS DANS SEGMENT DE CARACTERISTIQUES
* NELMAT= NBRE D ELEMENTS DANS SEGMENT DE CARACTERISTIQUES
* SECT  = SECTION
* LHOOK = TAILLE DE LA MATRICE DE HOOKE
*
* SORTIES :
* WRK1 SEGMENT DE TRAVAIL CONTENANT SOLLICITATIONS CORRIGEES
* AU COURS DU PAS DE TEMPS CONSIDERE
* KERRE INDICATEUR D'ERREUR
*
***********************************************************************
*
* ATTENTION :
* (ELEF1,ELDEP1) ET (ELEF2,ELDEP2)  DEFINISSENT LE DOMAINE DE
* COMPORTEMENT ELASTIQUE LINEAIRE PUR DE L'ELEMENT
* CES COUPLES DE VALEURS DOIVENT DONC ETRE COHERENTS AVEC LA
* MATRICE DE RIGIDITE DE L'ELEMENT (INERTIE ET MODULE D'YOUNG)
*
* CES DEUX COUPLES DE VALEURS SONT A DECLARER DANS LES OPTIONS A
* 5 OU 7 POINTS (4 OU 6 POUR LA COMPRESSION)
*
* LES COUPLES (YEF1,YDEP1) ET (YEF2,YDEP2) TENANT COMPTE DE
* L'ENDOMMAGEMENT SONT A RENTRER DANS L'OPTION 6 OU 7 POINTS
*
**********************************************************************

      SEGMENT WRKGL
        REAL*8 TLOICO(NBLOI)
      ENDSEGMENT

      SEGMENT IPWRKG
        POINTEUR IPOL(3).WRKGL
      ENDSEGMENT

      DIMENSION ICOMP(3),DD(5),IDP(3),CRIGI(12)
C
C   INITIALISATIONS
C
      JJ=0
      IDP(1) = 0
      IDP(2) = 0
      IDP(3) = 0
      ICOMP(1) = 0
      ICOMP(2) = 0
      ICOMP(3) = 0
      DD(1) = 0.D0
      DD(2) = 0.D0
      DD(3) = 0.D0
      DD(4) = 0.D0
      DD(5) = 0.D0

      XLUNG = SQRT( (XCOOR(1)-XCOOR(5))**2 + (XCOOR(2)-XCOOR(6))**2 +
     &              (XCOOR(3)-XCOOR(7))**2 )
C
C    RECUPERATION DES COURBES ET DECODAGE DE INDLEG
C
      DO II = 1,2
        IF (INDLEG.GE.100) THEN
          ICOMP(3) = ICOMP(3) + 1
          INDLEG = INDLEG - 100
        END IF
      ENDDO
      DO II = 1,2
        IF (INDLEG.GE.10) THEN
          ICOMP(2) = ICOMP(2) + 1
          INDLEG = INDLEG - 10
        END IF
      ENDDO
      IF (INDLEG.GE.1) ICOMP(1) = 1
C
C CALCUL DE L'INCREMENT DE CONTRAINTES
C
      CALL CALSIG(DEPST,DDAUX,NSTRS1,CMATE,VALMAT,VALCAR,
     1     N2EL,N2PTEL,MFR1,IFOU,IB,IGAU,EPAIST,NBPGAU,
     2        MELE,NPINT,NBGMAT,NELMAT,SECT,LHOOK,TXR,XLOC,
     3         XGLOB,D1HOOK,ROTHOO,DDHOMU,CRIGI,DSIGT,IRTD)

      IF (IRTD.NE.1) THEN
        KERRE=69
        RETURN
      ENDIF
C
C   RECUPERATION DES EFFORTS PRECEDANTS ET DES INCREMENTS
C
      DO II = 1,6
        SIGF(II) = SIG0(II) + DSIGT(II)
      ENDDO
C
C   COMPRESSION
C
C   RECUPERATION DE LA LOI DE COMPORTEMENT ET VARIABLES INT.
C
      IF (ICOMP(1).EQ.0) GO TO 100

      JJ=JJ+1
      WRKGL  = IPOL(JJ)
      NBLOI  = WRKGL.TLOICO(/1)

      IF (NBLOI.EQ.12) THEN
        YEFC2  = -1.*TLOICO(1)
        YDEPC2 = -1.*TLOICO(2)
        ELEFC2 = -1.*TLOICO(3)
        ELDEPC2= -1.*TLOICO(4)
        ELEFC1 = -1.*TLOICO(7)
        ELDEPC1= -1.*TLOICO(8)
        YEFC1  = -1.*TLOICO(9)
        YDEPC1 = -1.*TLOICO(10)
        UEFC1  = -1.*TLOICO(11)
        UDEPC1 = -1.*TLOICO(12)
      ELSE
        YEFC2  = -1.*TLOICO(1)
        YDEPC2 = -1.*TLOICO(2)
        ELEFC2 = -1.*TLOICO(1)
        ELDEPC2= -1.*TLOICO(2)
        ELEFC1 = -1.*TLOICO(5)
        ELDEPC1= -1.*TLOICO(6)
        YEFC1  = -1.*TLOICO(5)
        YDEPC1 = -1.*TLOICO(6)
        UEFC1  = -1.*TLOICO(7)
        UDEPC1 = -1.*TLOICO(8)
      ENDIF

      IFLAGC = INT(VAR0(2))
      RRC = VAR0(3)
      EFMXC = VAR0(4)
      DEPMXC = VAR0(5)
      EFMNC = VAR0(6)
      DEPMNC = VAR0(7)
      DEPC = VAR0(8)
      XINT = VAR0(9)
      PLASC = VAR0(10)

      RR1 = (ELEFC1 - ELEFC2)/(ELDEPC1 - ELDEPC2)
      EFC = SIG0(1)
      VAREFC = DSIGT(1)
      VARDPC = VAREFC / RR1
C
C   APPEL DE LA LOI DE COMPORTEMENT
C
      VARDP0 = VARDPC
      IF ((ABS(VARDP0)).GE.1.0E-9)THEN
        CALL DCMP(IFLAGC,IDP(1),ELEFC1,ELDEPC1,ELEFC2,ELDEPC2,
     1              YEFC1,YDEPC1,YEFC2,YDEPC2,UEFC1,UDEPC1,
     2              EFC,VARDPC,DEPC,DEPEC,DEPMXC,EFMXC,
     3              DEPMNC,EFMNC,XINT,RRC)
        VARF(2) = IFLAGC
        VARF(3) = RRC
        VARF(4) = EFMXC
        VARF(5) = DEPMXC
        VARF(6) = EFMNC
        VARF(7) = DEPMNC
        VARF(8) = DEPC
        VARF(9) = XINT
        SIGF(1) = EFC
        DEPE = EFC / RR1
        VARDEP = DEPC - DEPE
        DD(1) = VARDEP - PLASC
        DEFP(1) = DD(1)
        VARF(10) = VARDEP
      ELSE
        DEFP(1) = DEFP(1)
        DO II = 2,10
          VARF(II) = VAR0(II)
        ENDDO
      END IF
C
C   FLEXION
C
C   RECUPERATION DE LA LOI DE COMPORTEMENT ET VARIABLES INT.
C
 100  CONTINUE
      IF (ICOMP(2).EQ.0) GO TO 200

      JJ=JJ+1
      WRKGL  = IPOL(JJ)
      NBLOI  = WRKGL.TLOICO(/1)

      IF (NBLOI.EQ .14) THEN
        UEFF1 = (-1.*TLOICO(1))
        UDEPF1 = (-1.*TLOICO(2))
        YEFF1 = (-1.*TLOICO(3))
        YDEPF1 = (-1.*TLOICO(4))
        ELEFF1 = (-1.*TLOICO(5))
        ELDEPF1 = (-1.*TLOICO(6))
        ELEFF2 = (-1.*TLOICO(9))
        ELDEPF2 = (-1.*TLOICO(10))
        YEFF2 = (-1.*TLOICO(11))
        YDEPF2 = (-1.*TLOICO(12))
        UEFF2 = (-1.*TLOICO(13))
        UDEPF2 = (-1.*TLOICO(14))
      ELSE
        UEFF1 = (-1.*TLOICO(1))
        UDEPF1 = (-1.*TLOICO(2))
        YEFF1 = (-1.*TLOICO(3))
        YDEPF1 = (-1.*TLOICO(4))
        ELEFF1 = (-1.*TLOICO(3))
        ELDEPF1 = (-1.*TLOICO(4))
        ELEFF2 = (-1.*TLOICO(7))
        ELDEPF2 = (-1.*TLOICO(8))
        YEFF2 = (-1.*TLOICO(7))
        YDEPF2 = (-1.*TLOICO(8))
        UEFF2 = (-1.*TLOICO(9))
        UDEPF2 = (-1.*TLOICO(10))
      ENDIF
*
      IFLAGF = INT(VAR0(11))
      RRF = VAR0(12)
      EFMXF = VAR0(13)
      DEPMXF = VAR0(14)
      EFMNF = VAR0(15)
      DEPMNF = VAR0(16)
      X0F = VAR0(17)
      DEPF = VAR0(18)
      PLASF = VAR0(19)
*
      RR2 = (ELEFF1 - ELEFF2)/(ELDEPF1 - ELDEPF2)
      M2 = ICOMP(2) + 4
      EFF = SIG0(M2)
      VAREFF = DSIGT(M2)
      VARDPF = VAREFF / RR2
C
C   APPEL DE LA LOI DE COMPORTEMENT
C
      VARDP0 = VARDPF
      IF (ABS(VARDP0).GT.1.0E-9)THEN
        CALL DTAK(IFLAGF,IDP(2),ELEFF1,ELDEPF1,ELEFF2,ELDEPF2,
     1              YEFF1,YDEPF1,YEFF2,YDEPF2,UEFF1,UDEPF1,
     2              UEFF2,UDEPF2,EFF,VARDPF,DEPF,DEPEF,
     3              DEPMXF,DEPMNF,EFMXF,EFMNF,X0F,RRF)
        VARF(11) = IFLAGF
        VARF(12) = RRF
        VARF(13) = EFMXF
        VARF(14) = DEPMXF
        VARF(15) = EFMNF
        VARF(16) = DEPMNF
        VARF(17) = X0F
        VARF(18) = DEPF
        SIGF(M2) = EFF
        DEPE = EFF / RR2
        VARDEP = DEPF - DEPE
        IF (M2.EQ.6) THEN
          DD(2) = VARDEP - PLASF
          DD(5) = (VARDEP - PLASF) / XLUNG
        ELSE
          DD(3) = -1.0 * (VARDEP - PLASF)
          DD(4) = (VARDEP - PLASF) / XLUNG
        END IF
        VARF(19) = VARDEP
      ELSE
        DO II = 11,19
          VARF(II) = VAR0(II)
        ENDDO
      END IF
C
C   CISAILLEMENT
C
C   RECUPERATION DE LA LOI DE COMPORTEMENT ET VARIABLES INT.
C
 200  CONTINUE
      IF (ICOMP(3).EQ.0) GO TO 300

      JJ= JJ+1
      WRKGL  = IPOL(JJ)
      NBLOI  = WRKGL.TLOICO(/1)

      IF (NBLOI.EQ.14) THEN
        UEFT1 = (-1 * TLOICO(1))
        UDEPT1 = (-1 * TLOICO(2))
        YEFT1 =  (-1 * TLOICO(3))
        YDEPT1 = (-1 * TLOICO(4))
        ELEFT1 = (-1 * TLOICO(5))
        ELDEPT1 = (-1 * TLOICO(6))
        ELEFT2 = (-1 * TLOICO(9))
        ELDEPT2 = (-1 * TLOICO(10))
        YEFT2 = (-1 * TLOICO(11))
        YDEPT2 = (-1 * TLOICO(12))
        UEFT2 = (-1 * TLOICO(13))
        UDEPT2 = (-1 * TLOICO(14))
      ELSE
        UEFT1 = (-1 * TLOICO(1))
        UDEPT1 = (-1 * TLOICO(2))
        YEFT1 = (-1 * TLOICO(3))
        YDEPT1 = (-1 * TLOICO(4))
        ELEFT1 = (-1 * TLOICO(3))
        ELDEPT1 = (-1 * TLOICO(4))
        ELEFT2 = (-1 * TLOICO(7))
        ELDEPT2 = (-1 * TLOICO(8))
        YEFT2 = (-1 * TLOICO(7))
        YDEPT2 = (-1 * TLOICO(8))
        UEFT2 = (-1 * TLOICO(9))
        UDEPT2 = (-1 *  TLOICO(10))
      ENDIF

      IFLAGS = INT(VAR0(20))
      RRS = VAR0(21)
      EFMXS = VAR0(22)
      DEPMXS = VAR0(23)
      EFMNS = VAR0(24)
      DEPMNS = VAR0(25)
      X01S = VAR0(26)
      X02S = VAR0(27)
      FINS = VAR0(28)
      EFLIMS = VAR0(29)
      DEPS = VAR0(30)
      PLASS = VAR0(31)

      RR3 = (ELEFT1 - ELEFT2)/(ELDEPT1 - ELDEPT2)
      M3 = ICOMP(3) + 1
      EFS = SIG0(M3)
      VAREFS = DSIGT(M3)
      VARDPS =VAREFS / RR3
C
C   APPEL DES LOIS DE COMPORTEMENT
C
      VARDP0 = VARDPS
C        WRITE (6,*) 'RR entree=',RRS
C        WRITE (6,*) 'EF entree=',EFS
C        WRITE (6,*) 'DEP entree=',DEPS
C        WRITE (6,*) 'VARDEP entree=', VARDPS
C        WRITE (6,*) 'IFLAG entree=' , IFLAGS
      IF (ABS(VARDP0).GT.1.E-9)THEN
        CALL DTAI(IFLAGS,IDP(3),ELEFT1,ELDEPT1,ELEFT2,ELDEPT2,
     1               YEFT1,YDEPT1,YEFT2,YDEPT2,UEFT1,UDEPT1,
     2               UEFT2,UDEPT2,EFS,VARDPS,DEPS,EFLIMS,
     3               DEPMXS,DEPMNS,EFMXS,EFMNS,X01S,X02S,FINS,RRS)
        VARF(20) = IFLAGS
        VARF(21) = RRS
        VARF(22) = EFMXS
        VARF(23) = DEPMXS
        VARF(24) = EFMNS
        VARF(25) = DEPMNS
        VARF(26) = X01S
        VARF(27) = X02S
        VARF(28) = FINS
        VARF(29) = EFLIMS
        VARF(30) = DEPS
        SIGF(M3) = EFS
C        WRITE (6,*) 'RR sortie=',RRS
C        WRITE (6,*) 'EF sortie=',EFS
C        WRITE (6,*) 'DEP sortie=',DEPS
C        WRITE (6,*) 'VARDEP sortie=', VARDPS
C        WRITE (6,*) 'IFLAG sortie=' , IFLAGS
        DEPE = EFS / RR3
        VARDEP = DEPS - DEPE
C        WRITE (6,*) 'VARDEP PLAST sortie=' , VARDEP
        IF(M3.EQ.2)THEN
          DD(2) = DD(2) + VARDEP - PLASS
          DD(5) = DD(5) + (VARDEP - PLASS) / XLUNG
        ELSE
          DD(3) = DD(3) + VARDEP - PLASS
          DD(4) = DD(4) + (VARDEP - PLASS) / XLUNG
        END IF
        VARF(31) = VARDEP
      ELSE
        DO II = 20,31
          VARF(II) = VAR0(II)
        ENDDO
      END IF
C
C MISE A JOUR DES VARIABLES INTERNES
C
300   CONTINUE
      DEFP(2) = DEFP(2) + DD(2)
      DEFP(3) = DEFP(3) + DD(3)
      DEFP(5) = DEFP(5) + DD(4)
      DEFP(6) = DEFP(6) + DD(5)
      VARF(1) = VAR0(1) + SQRT(DD(1)**2 + DD(2)**2 + DD(3)**2)
C
C MISE A JOUR DE L'INDICE D'ERREUR
C
      IF(IDP(1).NE.0) KERRE = -1
      IF(IDP(2).NE.0) KERRE = KERRE - 2
      IF(IDP(3).NE.0) KERRE = KERRE - 4

      RETURN
      END

 
