C CREPG     SOURCE    GOUNAND   21/06/02    21:15:33     11022          
      SUBROUTINE CREPG(IQUVOL,SFAVOL,METING,MYFALS,MYFPGS,
     $     JXCOPG,JXPOPG,
     $     IMPR,IRET)
      IMPLICIT REAL*8 (A-H,O-Z)
      IMPLICIT INTEGER (I-N)
C***********************************************************************
C NOM         : CREPG
C DESCRIPTION : Création des points de Gauss
C               pour des faces de l'élément de référence.
C
C
C LANGAGE     : ESOPE
C AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
C               mél : gounand@semt2.smts.cea.fr
C***********************************************************************
C APPELES          :
C APPELES (E/S)    :
C APPELES (BLAS)   :
C APPELES (CALCUL) :
C APPELE PAR       :
C***********************************************************************
C SYNTAXE GIBIANE    :
C ENTREES            :
C ENTREES/SORTIES    :
C SORTIES            :
C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
C***********************************************************************
C VERSION    : v1, 20/12/2002, version initiale
C HISTORIQUE : v1, 20/12/2002, création
C HISTORIQUE :
C HISTORIQUE :
C***********************************************************************
C Prière de PRENDRE LE TEMPS de compléter les commentaires
C en cas de modification de ce sous-programme afin de faciliter
C la maintenance !
C***********************************************************************

-INC PPARAM
-INC CCOPTIO
-INC SMELEME
      POINTEUR SFAVOL.MELEME
*
-INC TNLIN      
*-INC SMCHAEL
      POINTEUR JCOOR.MCHEVA
      POINTEUR FFFAC.MCHEVA
      POINTEUR DFFFAC.MCHEVA
      POINTEUR JXCOPG.MCHEVA
      POINTEUR JXPOPG.MCHEVA
      INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM
*-INC SELREF
      POINTEUR LRFFAC.ELREF
*-INC SFALRF
      POINTEUR MYFALS.FALRFS
*-INC SPOGAU
      POINTEUR PGFAC.POGAU
*-INC SFAPG
      POINTEUR MYFPGS.FAPGS
*-INC SIQUAF
      POINTEUR IQUVOL.IQUAF
*
      INTEGER IMPR,IRET
*
      INTEGER IBELFV,IBNOQR,IDDLFA,IDIMQR,IPGFAC,ITYFAC
      INTEGER NBELFV,       NDDLFA,NDIMQR,NPGFAC
      REAL*8 VAL
      CHARACTER*4 METING,MYDIS2
*
* Executable statements
*
      IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans crepg.eso'
*
* 1ere étape : on crée les degrés de liberté de la transformation
*              géométrique (cf. mkcoor.eso)
*
*   On suppose que les transformations géométriques sur les
*   éléments de référence sont LINEAIRES. On suppose également que
*   le déterminant de la matrice jacobienne de la tranformation
*   face de référence -> face d'un élément volumique de référence
*   est CONSTANT => règle d'intégration numérique à 1 point de Gauss
      MYDIS2='LINE'
*
      SEGACT IQUVOL
      NDIMQR=IQUVOL.XCONQR(/1)
      SEGACT SFAVOL
      ITYFAC=SFAVOL.ITYPEL
      CALL KEEF(ITYFAC,MYDIS2,
     $     MYFALS,
     $     LRFFAC,
     $     IMPR,IRET)
      IF (IRET.NE.0) GOTO 9999
      SEGACT LRFFAC
      NDDLFA=LRFFAC.NPQUAF(/1)
      NBELFV=SFAVOL.NUM(/2)
      NBLIG=1
      NBCOL=NDDLFA
      N2LIG=1
      N2COL=NDIMQR
      NBPOI=1
      NBELM=NBELFV
      SEGINI JCOOR
      DO IBELFV=1,NBELFV
         DO IDDLFA=1,NDDLFA
            IBNOQR=SFAVOL.NUM(LRFFAC.NPQUAF(IDDLFA),IBELFV)
            DO IDIMQR=1,NDIMQR
               JCOOR.WELCHE(1,IDDLFA,1,IDIMQR,1,IBELFV)=
     $              IQUVOL.XCONQR(IDIMQR,IBNOQR)
*               write(ioimp,*) 'face=',IBELFV
*               write(ioimp,*) 'coord espace=',IDIMQR
*               write(ioimp,*) 'ddlfa=',IDDLFA
*               write(ioimp,*)
*     $              'VALEUR=',JCOOR.WELCHE(1,IDDLFA,1,IDIMQR,1,IBELFV)
*               write(ioimp,*)  ' '
            ENDDO
         ENDDO
      ENDDO
      SEGDES SFAVOL
      SEGDES IQUVOL
*
* 2ème étape : - on crée les fonctions de forme et leurs dérivées
*                pour la transformation géométrie face -> volume
*              - on récupère coordonnées et poids des points de
*                Gauss pour la méthode METING sur la face de
*                référence
*              - pour chaque face de l'élément de référence volumique
*                on construit les coordonnées des points de Gauss
*                attenant à l'aide de la transformation géométrique
*
      CALL KEPG(ITYFAC,METING,
     $     MYFPGS,
     $     PGFAC,
     $     IMPR,IRET)
      IF (IRET.NE.0) GOTO 9999
*
* In KFNREF : SEGINI FFFAC
* In KFNREF : SEGINI DFFFAC
*
      CALL KFNREF(LRFFAC,PGFAC,
     $     FFFAC,DFFFAC,
     $     IMPR,IRET)
      IF (IRET.NE.0) GOTO 9999
      SEGDES LRFFAC
C      write(ioimp,*) 'Fonctions de formes sur la face'
C      CALL PRCHVA(FFFAC,6,IRET)
      IF (IRET.NE.0) GOTO 9999
      SEGACT FFFAC
      NPGFAC=FFFAC.WELCHE(/5)
      NBLIG=1
      NBCOL=1
      N2LIG=1
      N2COL=NDIMQR
      NBPOI=NPGFAC
      NBELM=NBELFV
      SEGINI JXCOPG
      DO IBELFV=1,NBELFV
         DO IPGFAC=1,NPGFAC
            DO IDIMQR=1,NDIMQR
               DO IDDLFA=1,NDDLFA
                  VAL=JCOOR.WELCHE(1,IDDLFA,1,IDIMQR,1,IBELFV)*
     $                  FFFAC.WELCHE(1,IDDLFA,1,1,IPGFAC,1)
                  JXCOPG.WELCHE(1,1,1,IDIMQR,IPGFAC,IBELFV)=
     $                 JXCOPG.WELCHE(1,1,1,IDIMQR,IPGFAC,IBELFV)+
     $                 VAL
               ENDDO
*               write(ioimp,*) 'face=',IBELFV
*               write(ioimp,*) 'no point gauss=',IPGFAC
*               write(ioimp,*) 'coord espace=',IDIMQR
*               write(ioimp,*)
*     $              'VALEUR=',JXCOPG.WELCHE(1,1,1,IDIMQR,IPGFAC,IBELFV)
*               write(ioimp,*)  ' '
            ENDDO
         ENDDO
      ENDDO
      SEGSUP JCOOR
      SEGDES JXCOPG
*      SEGDES FFFAC
      SEGSUP FFFAC
      SEGSUP DFFFAC
*
* 3ème étape : Poids
*
      SEGACT PGFAC
      NBLIG=1
      NBCOL=1
      N2LIG=1
      N2COL=1
      NBPOI=NPGFAC
      NBELM=1
      SEGINI JXPOPG
      DO IPGFAC=1,NPGFAC
         JXPOPG.WELCHE(1,1,1,1,IPGFAC,1)=
     $           PGFAC.XPOPG(IPGFAC)
*!     $           JDTJAF.WELCHE(1,1,1,1,IPGFAC,IBELFV)*
*!     $           PGFAC.XPOPG(IPGFAC)
      ENDDO
      SEGDES JXPOPG
      SEGDES PGFAC
*
* Normal termination
*
      IRET=0
      RETURN
*
* Format handling
*
*
* Error handling
*
 9999 CONTINUE
      IRET=1
      WRITE(IOIMP,*) 'An error was detected in subroutine crepg'
      RETURN
*
* End of subroutine CREPG
*
      END


 
