C CAPA4     SOURCE    FANDEUR   11/07/19    21:15:20     7042

C=======================================================================
C=                            C A P A 4                                =
C=                            ---------                                =
C=                                                                     =
C=  Fonction :                                                         =
C=  ----------                                                         =
C=   Calcul, au point de Gauss (iGau) considere, du jacobien (DJAC),   =
C=   des fonctions de forme (FORME) et de leurs derivees (SHP)         =
C=                                                                     =
C=  Parametres :  (E)=Entree  (S)=Sortie                               =
C=  ------------                                                       =
C=   iGau    (E)  Numero du point de Gauss considere                   =
C=   NBNN    (E)  Nombre de NOEUDS de l'element                        =
C=   XE      (E)  COORDONNEES des noeuds de l'element (repere GLOBAL)  =
C=   SHPTOT  (E)  Fonctions de FORME et leurs DERIVEES par rapport aux =
C=                coordonnees de REFERENCE (Qsi,Eta,Dzeta)             =
C=   SHP     (S)  Fonctions de FORME et leurs DERIVEES par rapport aux =
C=                coordonnees REELLES (X,Y,Z)                          =
C=   FORME   (S)  Fonctions de FORME dans la geometrie REELLE          =
C=   DJAC    (S)  JACOBIEN au point de Gauss considere                 =
C=                                                                     =
C=  Denis ROBERT, le 17 fevrier 1988.                                  =
C=======================================================================

      SUBROUTINE CAPA4 (NEF,iGau,NBNN,XE,SHPTOT,SHP,FORME,DJAC)

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


-INC PPARAM
-INC CCOPTIO
-INC CCREEL

C= Quelques constantes (2.Pi et 4.Pi)
      PARAMETER (X2Pi= 6.283185307179586476925286766559D0)
      PARAMETER (X4Pi=12.566370614359172953850573533118D0)

      DIMENSION XE(3,*),FORME(*),SHPTOT(6,NBNN,*),SHP(6,*)

C ====================
C  1 - Initialisation
C ====================
C*OF  CALL ZERO(FORME,1,NBNN)

C ============================================
C  2 - Cas des elements MASSIFS 2D PLAN ou 3D
C ============================================
      IF (IFOMOD.EQ.-1.OR.IFOMOD.EQ.2) THEN
        iFin=IDIM+1
        DO j=1,NBNN
          FORME(j)=SHPTOT(1,j,iGau)
          SHP(1,j)=FORME(j)
          DO i=2,iFin
            SHP(i,j)=SHPTOT(i,j,iGau)
          ENDDO
        ENDDO
        CALL JACOBI(XE,SHP,IDIM,NBNN,DJAC)

C ================================================
C  3 - Cas des elements MASSIFS 2D AXISYMETRIQUES
C ================================================
      ELSE IF (IFOMOD.EQ.0) THEN
        DO i=1,NBNN
          FORME(i)=SHPTOT(1,i,iGau)
          SHP(1,i)=FORME(i)
          SHP(2,i)=SHPTOT(2,i,iGau)
          SHP(3,i)=SHPTOT(3,i,iGau)
        ENDDO
        CALL JACOBI(XE,SHP,IDIM,NBNN,DJAC)
        CALL DISTRR(XE,SHP,NBNN,RR)
        DJAC=X2Pi*DJAC*RR

C =================================
C  4 - Cas des elements MASSIFS 1D
C =================================
      ELSE IF (IFOMOD.EQ.3.OR.IFOMOD.EQ.4.OR.IFOMOD.EQ.5) THEN
C =====
C  4.1 - Cas generique
C =====
        DO i=1,NBNN
          FORME(i)=SHPTOT(1,i,iGau)
          SHP(1,i)=FORME(i)
          SHP(2,i)=SHPTOT(2,i,iGau)
        ENDDO
        CALL JACOBI(XE,SHP,IDIM,NBNN,DJAC)
C =====
C  4.2 - Cas particulier des modes axisymetriques et spherique 1D
C =====
        IF (IFOMOD.EQ.4 .OR. IFOMOD.EQ.5) THEN
          CALL DISTRR(XE,SHP,NBNN,RR)
          IF (IFOMOD.EQ.5) THEN
            DJAC=X4Pi*DJAC*RR*RR
          ELSE
            DJAC=X2Pi*DJAC*RR
          ENDIF
        ENDIF

C ==============================================
C  5 - Cas des elements MASSIFS en mode FOURIER -> ERREUR
C ==============================================
      ELSE IF (IFOMOD.EQ.1) THEN
        CALL ERREUR(251)
      ENDIF

      RETURN
      END


