C TCOND5    SOURCE    CHAT      05/01/13    03:34:19     5004

C=======================================================================
C=                            T C O N D 5                              =
C=                            -----------                              =
C=                                                                     =
C=  Fonction :                                                         =
C=  ----------                                                         =
C=   Calcul, au point de Gauss (iGau) considere, du jacobien (DJAC),   =
C=   des fonctions de forme et de leurs derivees (SHP), de la matrice  =
C=   gradient des fonctions de forme (derivation par rapport aux coor- =
C=   donnees reelles x,y,z ou r,theta,z)                               =
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=   NDIM    (E)  Nombre de lignes de la matrice GRADIENT              =
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=   GRAD    (S)  Matrice GRADIENT par rapport aux coordonnees REELLES =
C=   DJAC    (S)  JACOBIEN au point de Gauss considere                 =
C=                                                                     =
C=  Denis ROBERT, le 7 janvier 1988.                                   =
C=======================================================================

      SUBROUTINE TCOND5 (iGau,NBNN,NDIM,XE,SHPTOT,SHP,GRAD,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)

      REAL*8 XE(3,*),SHPTOT(6,NBNN,*),SHP(6,*),GRAD(NDIM,*)

C ====================
C  1 - Initialisation
C ====================
C*OF  CALL ZERO(GRAD,NDIM,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
          DO i=1,iFin
            SHP(i,j)=SHPTOT(i,j,iGau)
          ENDDO
        ENDDO
        CALL JACOBI(XE,SHP,IDIM,NBNN,DJAC)
        DO j=1,NBNN
          DO i=1,NDIM
            GRAD(i,j)=SHP(i+1,j)
          ENDDO
        ENDDO
C ================================================
C  3 - Cas des elements MASSIFS 2D AXISYMETRIQUES
C ================================================
      ELSE IF (IFOMOD.EQ.0) THEN
        DO j=1,NBNN
          SHP(1,j)=SHPTOT(1,j,iGau)
          SHP(2,j)=SHPTOT(2,j,iGau)
          SHP(3,j)=SHPTOT(3,j,iGau)
        ENDDO
        CALL JACOBI(XE,SHP,IDIM,NBNN,DJAC)
        CALL DISTRR(XE,SHP,NBNN,RR)
        DJAC=X2Pi*DJAC*RR
        DO j=1,NBNN
          GRAD(1,j)=SHP(2,j)
          GRAD(2,j)=SHP(3,j)
        ENDDO
C ==============================================
C  4 - Cas des elements MASSIFS en mode FOURIER
C ==============================================
      ELSE IF (IFOMOD.EQ.1) THEN
        DO j=1,NBNN
          SHP(1,j)=SHPTOT(1,j,iGau)
          SHP(2,j)=SHPTOT(2,j,iGau)
          SHP(3,j)=SHPTOT(3,j,iGau)
        ENDDO
        CALL JACOBI(XE,SHP,IDIM,NBNN,DJAC)
        CALL DISTRR(XE,SHP,NBNN,RR)
        IF (NIFOUR.EQ.0) THEN
          DJAC=X2Pi*DJAC*RR
        ELSE
          DJAC=XPi*DJAC*RR
        ENDIF
        DNN=NIFOUR/RR
        DO j=1,NBNN
          GRAD(1,j)=SHP(2,j)
          GRAD(2,j)=DNN*SHP(1,j)
          GRAD(3,j)=SHP(3,j)
        ENDDO
C =================================
C  5 - Cas des elements MASSIFS 1D
C =================================
      ELSE IF (IFOMOD.EQ.3.OR.IFOMOD.EQ.4.OR.IFOMOD.EQ.5) THEN
        DO j=1,NBNN
          SHP(1,j)=SHPTOT(1,j,iGau)
          SHP(2,j)=SHPTOT(2,j,iGau)
        ENDDO
        CALL JACOBI(XE,SHP,IDIM,NBNN,DJAC)
C= Traitement des modes axisymetriques et spherique 1D
        IF (IFOMOD.EQ.4) THEN
          CALL DISTRR(XE,SHP,NBNN,RR)
          DJAC=X2Pi*DJAC*RR
        ELSE IF (IFOMOD.EQ.5) THEN
          CALL DISTRR(XE,SHP,NBNN,RR)
          DJAC=X4Pi*DJAC*RR*RR
        ENDIF
        DO j=1,NBNN
          GRAD(1,j)=SHP(2,j)
        ENDDO
      ENDIF

      RETURN
      END



