C DOHMAS    SOURCE    CHAT      05/01/12    22:53:45     5004

C=======================================================================
C=                            D O H M A S                              =
C=                            -----------                              =
C=                                                                     =
C=  Fonction :                                                         =
C=  ----------                                                         =
C=  Calcul de la matrice de Hooke (elasticite lineaire) dans le cas    =
C=  des materiaux isotropes                                            =
C=                                                                     =
C=  Parametres :  (E)=Entree  (S)=Sortie                               =
C=  ------------                                                       =
C=   VELA     (E)   Valeurs des parametres elastiques du materiau      =
C=   MATE     (E)   Chaine contenant le type du materiau               =
C=   IFOU     (E)   Mode de calcul (cf. IFOUR de CCOPTIO)              =
C=   LHOOK    (S)   Dimension de la matrice de Hooke                   =
C=   KCAS     (E)   =1 si on veut la matrice de Hooke associee au mode =
C=                  de calcul (non necessairement inversible)          =
C=                  =2 si on veut la matrice de Hooke complete pour    =
C=                  l'inverser par la suite (matrice de souplesse)     =
C=   DDHOOK   (S)   Matrice de Hooke dans le repere GLOBAL             =
C=   IRET     (S)   =1 si option existante , =0 sinon                  =
C=======================================================================

      SUBROUTINE DOHMAS (VELA,MATE,IFOU,LHOOK,KCAS,DDHOOK,IRET)

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

      PARAMETER (XUnDemi=0.5,XUn=1.)

      DIMENSION VELA(*),DDHOOK(LHOOK,*)
      CHARACTER*(*) MATE

      IRET=1
C= ERREUR si le materiau n'est pas massif ISOTROPE ou POREUX (isotrope)
      IF (MATE.NE.'ISOTROPE'.AND.MATE.NE.'POREUX  ') THEN
        IRET=0
        RETURN
      ENDIF

C= Initialisation de la matrice de Hooke
      CALL ZERO(DDHOOK,LHOOK,LHOOK)

C= Recuperation des module d'Young et coefficient de Poisson
      YOU=VELA(1)
      XNU=VELA(2)

C= -> Contraintes planes avec KCAS=1
      IF (IFOU.EQ.-2.AND.KCAS.EQ.1) THEN
        AUX=YOU/(XUn-XNU*XNU)
        AUX1=AUX*XNU
        DDHOOK(1,1)=AUX
        DDHOOK(1,2)=AUX1
        DDHOOK(2,1)=AUX1
        DDHOOK(2,2)=AUX
        DDHOOK(4,4)=XUnDemi*YOU/(XUn+XNU)

C= -> Deformations planes, Axisymetrie et Contraintes planes avec KCAS=2
      ELSE IF (IFOU.EQ.-1.OR.IFOU.EQ.0.OR.IFOU.EQ.-3.OR.
     .         (IFOU.EQ.-2.AND.KCAS.EQ.2)) THEN
        AUX0=YOU/((XUn+XNU)*(XUn-XNU-XNU))
        AUX=AUX0*(XUn-XNU)
        AUX1=AUX0*XNU
        DDHOOK(1,1)=AUX
        DDHOOK(2,1)=AUX1
        DDHOOK(3,1)=AUX1
        DDHOOK(1,2)=AUX1
        DDHOOK(2,2)=AUX
        DDHOOK(3,2)=AUX1
        DDHOOK(1,3)=AUX1
        DDHOOK(2,3)=AUX1
        DDHOOK(3,3)=AUX
        DDHOOK(4,4)=XUnDemi*YOU/(XUn+XNU)

C= -> Serie de Fourier et 3D
      ELSE IF (IFOU.EQ.1.OR.IFOU.EQ.2) THEN
        AUX0=YOU/((XUn+XNU)*(XUn-XNU-XNU))
        AUX=AUX0*(XUn-XNU)
        AUX1=AUX0*XNU
        GEGE=XUnDemi*YOU/(XUn+XNU)
        DDHOOK(1,1)=AUX
        DDHOOK(2,1)=AUX1
        DDHOOK(3,1)=AUX1
        DDHOOK(1,2)=AUX1
        DDHOOK(2,2)=AUX
        DDHOOK(3,2)=AUX1
        DDHOOK(1,3)=AUX1
        DDHOOK(2,3)=AUX1
        DDHOOK(3,3)=AUX
        DDHOOK(4,4)=GEGE
        DDHOOK(5,5)=GEGE
        DDHOOK(6,6)=GEGE

C= -> Modes de calcul 1D
      ELSE IF (IFOU.GE.3.AND.IFOU.LE.15) THEN
        IF (IFOU.EQ.6.AND.KCAS.EQ.1) THEN
          DDHOOK(1,1)=YOU
        ELSE IF ((IFOU.EQ.4.OR.IFOU.EQ.8).AND.KCAS.EQ.1) THEN
          AUX=YOU/(XUn-XNU*XNU)
          AUX1=AUX*XNU
          DDHOOK(1,1)=AUX
          DDHOOK(2,1)=AUX1
          DDHOOK(1,2)=AUX1
          DDHOOK(2,2)=AUX
        ELSE IF ((IFOU.EQ.5.OR.IFOU.EQ.10.OR.IFOU.EQ.13).AND.
     .           KCAS.EQ.1) THEN
          AUX=YOU/(XUn-XNU*XNU)
          AUX1=AUX*XNU
          DDHOOK(1,1)=AUX
          DDHOOK(3,1)=AUX1
          DDHOOK(1,3)=AUX1
          DDHOOK(3,3)=AUX
        ELSE
          AUX0=YOU/((XUn+XNU)*(XUn-XNU-XNU))
          AUX=AUX0*(XUn-XNU)
          AUX1=AUX0*XNU
          DDHOOK(1,1)=AUX
          DDHOOK(2,1)=AUX1
          DDHOOK(3,1)=AUX1
          DDHOOK(1,2)=AUX1
          DDHOOK(2,2)=AUX
          DDHOOK(3,2)=AUX1
          DDHOOK(1,3)=AUX1
          DDHOOK(2,3)=AUX1
          DDHOOK(3,3)=AUX
        ENDIF

C= -> Cas non prevus actuellement
      ELSE
        IRET=0
      ENDIF

      RETURN
      END



