C ELPOFA SOURCE CHAT 05/01/12 23:37:47 5004 SUBROUTINE ELPOFA(MCLAS,MCLPO1,MCENT,MFACEL,MFACEP,MELPOE,MCENEL) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C*********************************************************************** C NOM : ELPOEL C DESCRIPTION : Construit le MELEME de correspondance C Elément-(Point)-Elément C Les éléments du MELEME sont de type POLY. Ils ont pour C DERNIER point le point centre de l'élément considéré. C Les points suivants sont les points centre des éléments C qui ont un point de MCLPO1 et de MFACEP en commun avec C l'élément considéré. C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : ELCONT : les éléments du contour de MCLAS et leur C centre C POINB2 : maillage de points -> LISTENTI de C nb d'éléments auxquels ils appartiennent C POELE2 : maillage de points -> MLELEM contenant les C points et les centres d'éléments auxquels C ils appartiennent. C ELENB2 : maillage de points -> LISTENTI de C nb d'éléments adjacents (ayant un C point du maillage de points en C commun) à des éléments repérés par C leur centre. C ELELE2 : maillage de points -> MLELEM contenant C les centres des éléments, et, pour C chaque centre, les centres des éléments C adjacents. C LE2ME2 : MLELEM (liste indexée d'éléments) C -> MELEME C APPELES (E/S) : - C APPELES (BLAS) : - C APPELES (CALCUL) : - C APPELE PAR : LEKTAB C*********************************************************************** C SYNTAXE GIBIANE : - C ENTREES : MCLAS (type MELEME) : maillage de classe de C points (sommet, face) par C élément (MMAIL,ELTFA) C MCLPO1 (type MELEME) : maillage de points C correspondant à MCLAS C MCENT (type MELEME) : maillage des points C centre C MFACEL (type MELEME) : maillage de connectivité C face-centre-face C MFACEP (type MELEME) : maillage de connectivité C sommets-centre de face C ENTREES/SORTIES : - C SORTIES : MELPOE (type MELEME) : maillage de C connectivités C élément-(point)-élément C*********************************************************************** C VERSION : v1, 08/10/98, version initiale C HISTORIQUE : v1, 08/10/98, création C HISTORIQUE : Modif, R. MOREL and A. BECCANTINI, 11.04.2000 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 MCLAS.MELEME POINTEUR MCLPO1.MELEME POINTEUR MCENT.MELEME POINTEUR MCONT.MELEME POINTEUR MCCEN.MELEME POINTEUR MFACEL.MELEME POINTEUR MFACEP.MELEME POINTEUR MELPOE.MELEME POINTEUR MCENEL.MELEME -INC SMLENTI POINTEUR PONBEL.MLENTI POINTEUR ELNBEL.MLENTI * * Segment MLELEM * SEGMENT MLELEM INTEGER INDEX(NBL+1) INTEGER LESPOI(NBTPOI) ENDSEGMENT * * LISTE SEQUENTIELLE INDEXEE D'ELEMENTS * * NBL : NOMBRE D'ELEMENTS * NBTPOI : NOMBRE TOTAL DE POINTS REFERENCEES * INDEX(I) : INDICE DU 1ER POINT DU IEME ELEMENT * DANS LE TABLEAU LESPOI * LESPOI(INDEX(I) -> INDEX(I+1)-1) : NUMERO DES NOEUDS * DU IEME ELEMENT * POINTEUR LEPOEL.MLELEM POINTEUR LEELEL.MLELEM C C**** Variables de COOPTIO C C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES C & ,IECHO, IIMPI, IOSPI C & ,IDIM C & ,MCOORD C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU C & ,NORINC,NORVAL,NORIND,NORVAD C & ,NUCROU, IPSAUV * INTEGER ILISOU, NBSOUS * * Executable statements * * * On commence par appeler ELCONT pour avoir les éléments du contour * de MCLAS et leur centre : en entree : les connectivités FACE, FACEL, * FACEP ; en sortie : le maillage MCONT de faces du contour et le * maillage MCCEN des centres de ces faces. * * In ELCONT: new temporary object MCONT.MAILLAGE (SEGINI) * MCENT.MAILLAGE (SEGINI) * CALL ELCONT(MFACEL,MFACEP,MCONT,MCCEN) IF (IERR.NE.0) GOTO 9999 * * Pour dimensionner le tableau LESPOI et remplir le tableau * INDEX du segment LEPOEL (type MLELEM), on construit d'abord : * PONBEL(NOPOI1) * NOPOI1 : indice du point considéré dans MCLPO1 * PONBEL(NOPOI1) : nombre d'éléments de MCLAS et MCONT * contenant le point considéré * * In POIBE2 : new temporary object PONBEL.MLENTI (SEGINI) * CALL POINB2(MCLAS,MCONT,MCLPO1,PONBEL) IF (IERR.NE.0) GOTO 9999 * * On construit la liste séquentielle indexée d'éléments LEPOEL * (type MLELEM). * NOPOI1 : indice du point considéré dans MCLPO1 * LEPOEL.LESPOI(LEPOEL.INDEX(NOPOI1)) : * contient le numéro du point considéré * LEPOEL.LESPOI(LEPOEL.INDEX(NOPOI1)+1 -> LEPOEL.INDEX(NOPOI1+1)-1) : * contient les numéro des points centre des éléments * contenant le point considéré (!) * * In POELE2 : new temporary object LEPOEL.MLELEM (SEGINI) * CALL POELE2(MCLAS,MCONT,MCLPO1,MCENT,MCCEN,PONBEL,LEPOEL) IF (IERR.NE.0) GOTO 9999 SEGSUP PONBEL * * On doit créer l'équivalent de PONBEL pour les centres * On construit ELNBEL(NOCENT) * NOCENT : indice du centre de l'élément considéré dans MCENT * ELNBEL(NOCENT) : nombre d'éléments partageant (au moins) * un point de MCLPO1 avec l'élément considéré. * * In ELENB2 : SEGINI ELNBEL * CALL ELENB2(MCLAS,MCLPO1,MCENT,LEPOEL, $ ELNBEL) IF (IERR.NE.0) GOTO 9999 * * On construit la liste séquentielle indexée d'éléments LEELEL * (type MLELEM). * NOCENT : indice du centre de l'élément considéré dans MCENT * LEELEL.LESPOI(LEELEL.INDEX(NOCENT)) : * contient le numéro du centre de l'élément considéré * LEELEL.LESPOI(LEPOEL.INDEX(NOCENT)+1 -> LEPOEL.INDEX(NOCENT+1)-1) : * contient les numéro des points centre des éléments * qui ont un point de MCLPO1 en commun avec l'élément * considéré (!) * * In ELELE2 : new temporary object LEELEL.MLELEM (SEGINI) * CALL ELELE2(MCLAS,MCLPO1,MCENT,LEPOEL,ELNBEL,LEELEL) IF (IERR.NE.0) GOTO 9999 * * A partir de LEELEL, on peut construire la structure MELEME * correspondante : elle est constituée d'éléments de type POLY. * En gros, on regroupe les éléments qui ont le meme nombre de points. * * In LE2ME2 : new object MELPOE.MELEME (SEGINI-SEGDES) * CALL LE2ME2(LEELEL, $ MELPOE,MCENEL) IF (IERR.NE.0) GOTO 9999 * * Suppressions d'objets temporaires * SEGSUP ELNBEL SEGSUP LEPOEL SEGSUP LEELEL IPT1 = MCCEN SEGACT IPT1 NBSOUS = IPT1.LISOUS IF(NBSOUS .EQ. 0)THEN SEGSUP IPT1 ELSE DO ILISOU = 1, NBSOUS IPT2 = IPT1.LISOUS(ILISOU) SEGSUP IPT2 ENDDO SEGSUP IPT1 ENDIF IPT1 = MCONT SEGACT IPT1 NBSOUS = IPT1.LISOUS IF(NBSOUS .EQ. 0)THEN SEGSUP IPT1 ELSE DO ILISOU = 1, NBSOUS IPT2 = IPT1.LISOUS(ILISOU) SEGSUP IPT2 ENDDO SEGSUP IPT1 ENDIF * * Normal termination * 9999 CONTINUE RETURN * * End of subroutine ELPOFA * END