elpoel
C ELPOEL SOURCE CHAT 06/03/29 21:20:10 5360 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 premier 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 en commun avec l'élément C 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 : POINBL : maillage de points -> LISTENTI de C nb d'éléments auxquels ils appartiennent C POELEM : maillage de points -> MLELEM contenant les C points et les centres d'éléments auxquels C ils appartiennent. C ELENBL : 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 ELELEM : maillage de points -> MLELEM contenant C les centres des éléments, et, pour C chaque centre, les centres des éléments C adjacents. C LE2MEL : 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 ENTREES/SORTIES : - C SORTIES : MELPOE (type MELEME) : maillage de C connectivités C élément-(point)-élément C CODE RETOUR (IRET) : - C*********************************************************************** C VERSION : v1, 08/10/98, version initiale C HISTORIQUE : v1, 08/10/98, 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 MCLAS.MELEME POINTEUR MCLPO1.MELEME POINTEUR MCENT.MELEME POINTEUR MELPOE.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 INTEGER IMPR,IRET * * Executable statements * IMPR=IIMPI IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans elpoel.eso' * * 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 * contenant le point considéré * * In PONBEL : new temporary object PONBEL.MLENTI (SEGINI) * $ PONBEL,IMPR,IRET) IF (IRET.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 POELEM : new temporary object LEPOEL.MLELEM (SEGINI) * $ LEPOEL,IMPR,IRET) IF (IRET.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 ELENBL : SEGINI ELNBEL $ ELNBEL,IMPR,IRET) IF (IRET.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 ELELEM : new temporary object LEELEL.MLELEM (SEGINI) * $ LEELEL,IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * * Quelques suppressions * SEGSUP ELNBEL SEGSUP LEPOEL * * 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 LE2MEL : new object MELPOE.MELEME (SEGINI-SEGDES) * $ MELPOE,IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * * Suppressions d'objets temporaires * SEGSUP LEELEL * * Normal termination * RETURN * * Format handling * 4000 FORMAT (A,'(1..',I8,')') 5000 FORMAT (8(1X,I8)) * * Error handling * 9999 CONTINUE WRITE(IOIMP,*) 'An error was detected in subroutine elpoel' MELPOE=0 RETURN * * End of subroutine ELPOEL * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales