C CREPG SOURCE GOUNAND 06/08/04 21:15:11 5520 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 CCOPTIO -INC SMELEME POINTEUR SFAVOL.MELEME * CBEGININCLUDE SMCHAEL SEGMENT MCHAEL POINTEUR IMACHE(N1).MELEME POINTEUR ICHEVA(N1).MCHEVA ENDSEGMENT SEGMENT MCHEVA REAL*8 VELCHE(NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM) ENDSEGMENT SEGMENT LCHEVA POINTEUR LISCHE(NBCHE).MCHEVA ENDSEGMENT CENDINCLUDE SMCHAEL POINTEUR JCOOR.MCHEVA POINTEUR FFFAC.MCHEVA POINTEUR DFFFAC.MCHEVA POINTEUR JXCOPG.MCHEVA POINTEUR JXPOPG.MCHEVA INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM CBEGININCLUDE SELREF SEGMENT ELREF CHARACTER*(LNNOM) NOMLRF CHARACTER*(LNFORM) FORME CHARACTER*(LNTYPL) TYPEL CHARACTER*(LNESP) ESPACE INTEGER DEGRE REAL*8 XCONOD(NDIMEL,NBNOD) INTEGER NPQUAF(NBDDL) INTEGER NUMCMP(NBDDL) INTEGER QUENOD(NBDDL) INTEGER ORDDER(NDIMEL,NBDDL) POINTEUR MBPOLY.POLYNS ENDSEGMENT SEGMENT ELREFS POINTEUR LISEL(0).ELREF ENDSEGMENT CENDINCLUDE SELREF POINTEUR LRFFAC.ELREF CBEGININCLUDE SFALRF SEGMENT FALRF CHARACTER*(LNNFA) NOMFA INTEGER NUQUAF(NBLRF) POINTEUR ELEMF(NBLRF).ELREF ENDSEGMENT SEGMENT FALRFS POINTEUR LISFA(0).FALRF ENDSEGMENT CENDINCLUDE SFALRF POINTEUR MYFALS.FALRFS CBEGININCLUDE SPOGAU SEGMENT POGAU CHARACTER*(LNNPG) NOMPG CHARACTER*(LNTPG) TYPMPG CHARACTER*(LNFPG) FORLPG INTEGER NORDPG REAL*8 XCOPG(NDLPG,NBPG) REAL*8 XPOPG(NBPG) ENDSEGMENT SEGMENT POGAUS POINTEUR LISPG(0).POGAU ENDSEGMENT CENDINCLUDE SPOGAU POINTEUR PGFAC.POGAU CBEGININCLUDE SFAPG SEGMENT FAPG CHARACTER*(LNNFAP) NOMFAP INTEGER NBQUAF(NBMPG) POINTEUR MPOGAU(NBMPG).POGAU ENDSEGMENT SEGMENT FAPGS POINTEUR LISFPG(0).FAPG ENDSEGMENT CENDINCLUDE SFAPG POINTEUR MYFPGS.FAPGS CBEGININCLUDE SIQUAF SEGMENT IQUAF INTEGER NUMQUF REAL*8 XCONQR(NDIMQR,NBNOQR) INTEGER NUCENT POINTEUR LFACE.MELEME ENDSEGMENT SEGMENT IQUAFS POINTEUR LISQRF(NBQRF).IQUAF ENDSEGMENT CENDINCLUDE 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.VELCHE(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.VELCHE(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.VELCHE(/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.VELCHE(1,IDDLFA,1,IDIMQR,1,IBELFV)* $ FFFAC.VELCHE(1,IDDLFA,1,1,IPGFAC,1) JXCOPG.VELCHE(1,1,1,IDIMQR,IPGFAC,IBELFV)= $ JXCOPG.VELCHE(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.VELCHE(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.VELCHE(1,1,1,1,IPGFAC,1)= $ PGFAC.XPOPG(IPGFAC) *! $ JDTJAF.VELCHE(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