C MFDKT2    SOURCE    PV        07/11/23    21:17:52     5978
      SUBROUTINE MFDKT2 (X,Y,XEL,HDXY)
************************************************************************
*
*                             M F D K T 2
*                             -----------
*
* FONCTION:
* ---------
*
*     CALCUL EN 1 POINT DE L'ELEMENT "DKT" DES DERIVEES SELON "X" ET "Y"
*     DE LA FONCTION DE FORME DE LA DEFLEXION.
*     (UTILE EN CAS D'EXCENTREMENT DE L'ELEMENT, POUR LE CALCUL DE LA
*     MATRICE-MASSE DUE A LA FLEXION)
*
* PARAMETRES:   (E)=ENTREE   (S)=SORTIE   (+ = CONTENU DANS UN COMMUN)
* -----------
*
*     X, Y    (E)  COORDONNEES REDUITES DU POINT DE L'ELEMENT.
*     XEL     (E)  COORDONNEES LOCALES DES NOEUDS DE L'ELEMENT
*                  (1 NOEUD PAR COLONNE).
*     HDXY    (S)  DERIVEES DE LA FONCTION DE FORME DE LA DEFLEXION
*                  (RANGEMENT "Z1", "TETAX1", "TETAY1", "Z2", ...).
*                  HDXY(1..9) = DERIVEE PAR RAPPORT A "X",
*                  HDXY(10..18) = DERIVEE PAR RAPPORT A "Y".
*
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL *8 (a-h,o-z)
      REAL*8 X,Y,XEL(3,3),HDXY(18)
*
* VARIABLES:
* ----------
*
      REAL*8 Z,A,C
*
* CONSTANTES:
* -----------
*
      REAL*8 O1,O2,O3,O6
      PARAMETER (O1=1.D0, O2=2.D0, O3=3.D0, O6=6.D0)
*
* AUTEUR, DATE DE CREATION:
* -------------------------
*
*     PASCAL MANIGOT     11 JUIN 1987
*     P.M. 14/02/90: RECTIFICATION ET REMISE EN FORME DU PASSAGE DANS
*                    LE REPERE GEOMETRIQUE LOCAL X-Y.
*
* LANGAGE:
* --------
*
*     FORTRAN77 + EXTENSION: DECLARATION "REAL*8".
*
************************************************************************
*
      Z = O1-X-Y
*
*     DERIVEES PAR RAPPORT A "X":
*
      A = Y*(Z-X)
      HDXY(1) = O6*Z*(Z-O1) + O2*A
      HDXY(2) = Z*(Z-O2*X) + A/O2
      HDXY(3) = -O2*Z*Y + A/O2
      HDXY(4) = O6*X*(O1-X) + O2*A
      HDXY(5) = O3*(X**2) - O2*X - A
      HDXY(6) = O2*X*Y + A/O2
      HDXY(7) = O2*A
      HDXY(8) = Y**2 + A/O2
      HDXY(9) = -A
*
*     DERIVEES PAR RAPPORT A "Y":
*
      A = X*(Z-Y)
      HDXY(10) = O6*Z*(Z-O1) + O2*A
      HDXY(11) = -O2*Z*X + A/O2
      HDXY(12) = Z*(Z-O2*Y) + A/O2
      HDXY(13) = O2*A
      HDXY(14) = - A
      HDXY(15) = X**2 + A/O2
      HDXY(16) = O6*Y*(O1-Y) + O2*A
      HDXY(17) = O2*X*Y + A/O2
      HDXY(18) = O3*(Y**2) - O2*Y - A
*
*     PASSAGE DANS LE REPERE X,Y (DIRECTION "X" = COTE 1-2).
*
      X21=XEL(1,2)-XEL(1,1)
      X31=XEL(1,3)-XEL(1,1)
      Y31=XEL(2,3)-XEL(2,1)
      X31Y31 = X31 / Y31
      X31X21 = X31 / X21
      X21Y31 = X21 / Y31
*
      DO 100 IDX=0,6,3
         IDY = 9 + IDX
         HDXY(IDY+1) = HDXY(IDY+1)/Y31 - HDXY(IDX+1)*X31Y31/X21
         HDXY(IDX+1) = HDXY(IDX+1)/X21
         C = HDXY(IDX+2)*X31Y31 + HDXY(IDX+3)*X31X21*X31Y31
     &     - HDXY(IDY+2)*X21Y31 - HDXY(IDY+3)*X31Y31
         HDXY(IDY+2) = HDXY(IDY+3) - HDXY(IDX+3)*X31X21
         HDXY(IDY+3) = C
         C = HDXY(IDX+3)/X21Y31
         HDXY(IDX+3) = - HDXY(IDX+2) - HDXY(IDX+3)*X31X21
         HDXY(IDX+2) = C
  100    CONTINUE
*     END DO
*
      END


