C DDIS      SOURCE    CB215821  26/10/26    21:15:25     12682          
C   SUBROUTINE DDIS : L'INITIALISATION ET L'APPEL DES LOI DE COMPORTEMENT
C=========================================================================
       SUBROUTINE DDIS(NSTRS,CMATE,N2EL,N2PTEL,WTRAV,MFR,IFOU,IB,
     1           IGAU,EPAIST,MELE,NPINT,NBPGAU,NBGMAT,NELMAT,SECT,
     2      LHOOK,CRIGI,NMATT,INDLEG,IPWRKG,WRKGL,WRK0,WRK1,KERRE)
C
      IMPLICIT INTEGER(I-N)
       IMPLICIT REAL*8(A-H,O-Z)
C

-INC PPARAM
-INC CCOPTIO
-INC SMCOORD
C
***********************************************************************
*        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
* MFR   = 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
*
**********************************************************************
C
       DIMENSION ICOMP(3),DD(5),IDP(3),CRIGI(12)
C
      SEGMENT WRK0
       REAL*8 XMAT(NCXMAT)
      ENDSEGMENT
C
      SEGMENT WRK1
        REAL*8 DDHOOK(LHOOK,LHOOK),SIG0(NSTRS),DEPST(NSTRS)
        REAL*8 SIGF(NSTRS),VAR0(NVARI),VARF(NVARI)
        REAL*8 DEFP(NSTRS),XCAR(ICARA)
      ENDSEGMENT
C
       SEGMENT WRKGL
         REAL*8 TLOICO(NBLOI)
       ENDSEGMENT
C
       SEGMENT IPWRKG
         POINTEUR IPOL(3).WRKGL
       ENDSEGMENT
C
      SEGMENT WTRAV
        REAL*8 DDAUX(LHOOK,LHOOK),VALMAT(NUMAT)
        REAL*8 VALCAR(NUCAR),DSIGT(NSTRS)
        REAL*8 TXR(IDIM,IDIM),DDHOMU(LHOOK,LHOOK)
        REAL*8 XLOC(3,3),XGLOB(3,3)
        REAL*8 D1HOOK(LHOOK,LHOOK),ROTHOO(LHOOK,LHOOK)
      ENDSEGMENT
C
C
       CHARACTER*8 CMATE
C
C   INITIALISATIONS
C
       JJ=0
       DO 40 II = 1,3
       IDP(II) = 0
       ICOMP(II) = 0
40     CONTINUE
       DO 41 II = 1,5
       DD(II) = 0.0
41     CONTINUE
       XLUNG = SQRT((XCOOR(1)-XCOOR(5))**2 + (XCOOR(2)-XCOOR(6))**2 +
     1               (XCOOR(3)-XCOOR(7))**2)
C
C    RECUPERATION DES COURBES ET DECODAGE DE INDLEG
C
       DO 55 II = 1,2
          IF(INDLEG.GE.100)THEN
             ICOMP(3) = ICOMP(3) + 1
             INDLEG = INDLEG - 100
          END IF
55     CONTINUE
       DO 56 II = 1,2
          IF(INDLEG.GE.10)THEN
             ICOMP(2) = ICOMP(2) + 1
             INDLEG = INDLEG - 10
          END IF
56     CONTINUE
       IF(INDLEG.GE.1) ICOMP(1) = 1
C
C CALCUL DE L'INCREMENT DE CONTRAINTES
C
       CALL CALSIG(DEPST,DDAUX,NSTRS,CMATE,VALMAT,VALCAR,
     1     N2EL,N2PTEL,MFR,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
          GOTO 998
       ENDIF
*
C
C
C   RECUPERATION DES EFFORTS PRECEDANTS ET DES INCREMENTS
C
       DO 57 II = 1,6
       SIGF(II) = SIG0(II) + DSIGT(II)
57     CONTINUE
C
C
C   COMPRESSION
C
C   RECUPERATION DE LA LOI DE COMPORTEMENT ET VARIABLES INT.
C
       IF (ICOMP(1).EQ.0)THEN
          GO TO 100
       ELSE
          JJ=JJ+1
          NBLOI  = IPOL(JJ).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 51 II = 2,10
             VARF(II) = VAR0(II)
51           CONTINUE
          END IF
       END IF
C
C
C   FLEXION
C
C   RECUPERATION DE LA LOI DE COMPORTEMENT ET VARIABLES INT.
C
100     IF (ICOMP(2).EQ.0)THEN
             GO TO 200
        ELSE
          JJ=JJ+1
          NBLOI = IPOL(JJ).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 52 II = 11,19
             VARF(II) = VAR0(II)
52           CONTINUE
          END IF
       END IF
C
C
C   CISAILLEMENT
C
C   RECUPERATION DE LA LOI DE COMPORTEMENT ET VARIABLES INT.
C
200     IF(ICOMP(3).EQ.0)THEN
                 GO TO 300
        ELSE
          JJ= JJ+1
          NBLOI = IPOL(JJ).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 53 II = 20,31
             VARF(II) = VAR0(II)
53           CONTINUE
          END IF
       END IF
C
C MISE A JOUR DES VARIABLES INTERNES
C
300    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
C
 998   RETURN
       END

 
 
