1 : C ELPOEL SOURCE CHAT 06/03/29 21:20:10 5360 2 : SUBROUTINE ELPOEL(MCLAS,MCLPO1,MCENT,MELPOE) 3 : IMPLICIT INTEGER(I-N) 4 : IMPLICIT REAL*8 (A-H,O-Z) 5 : C*********************************************************************** 6 : C NOM : ELPOEL 7 : C DESCRIPTION : Construit le MELEME de correspondance 8 : C Elément-(Point)-Elément 9 : C Les éléments du MELEME sont de type POLY. Ils ont pour 10 : C premier point le point centre de l'élément considéré. 11 : C Les points suivants sont les points centre des éléments 12 : C qui ont un point de MCLPO1 en commun avec l'élément 13 : C considéré. 14 : C LANGAGE : ESOPE 15 : C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF) 16 : C mél : gounand@semt2.smts.cea.fr 17 : C*********************************************************************** 18 : C APPELES : POINBL : maillage de points -> LISTENTI de 19 : C nb d'éléments auxquels ils appartiennent 20 : C POELEM : maillage de points -> MLELEM contenant les 21 : C points et les centres d'éléments auxquels 22 : C ils appartiennent. 23 : C ELENBL : maillage de points -> LISTENTI de 24 : C nb d'éléments adjacents (ayant un 25 : C point du maillage de points en 26 : C commun) à des éléments repérés par 27 : C leur centre. 28 : C ELELEM : maillage de points -> MLELEM contenant 29 : C les centres des éléments, et, pour 30 : C chaque centre, les centres des éléments 31 : C adjacents. 32 : C LE2MEL : MLELEM (liste indexée d'éléments) 33 : C -> MELEME 34 : C APPELES (E/S) : - 35 : C APPELES (BLAS) : - 36 : C APPELES (CALCUL) : - 37 : C APPELE PAR : LEKTAB 38 : C*********************************************************************** 39 : C SYNTAXE GIBIANE : - 40 : C ENTREES : MCLAS (type MELEME) : maillage de classe de 41 : C points (sommet, face) par 42 : C élément (MMAIL,ELTFA) 43 : C MCLPO1 (type MELEME) : maillage de points 44 : C correspondant à MCLAS 45 : C MCENT (type MELEME) : maillage des points 46 : C centre 47 : C ENTREES/SORTIES : - 48 : C SORTIES : MELPOE (type MELEME) : maillage de 49 : C connectivités 50 : C élément-(point)-élément 51 : C CODE RETOUR (IRET) : - 52 : C*********************************************************************** 53 : C VERSION : v1, 08/10/98, version initiale 54 : C HISTORIQUE : v1, 08/10/98, création 55 : C HISTORIQUE : 56 : C HISTORIQUE : 57 : C*********************************************************************** 58 : C Prière de PRENDRE LE TEMPS de compléter les commentaires 59 : C en cas de modification de ce sous-programme afin de faciliter 60 : C la maintenance ! 61 : C*********************************************************************** 62 : -INC CCOPTIO 63 : -INC SMELEME 64 : POINTEUR MCLAS.MELEME 65 : POINTEUR MCLPO1.MELEME 66 : POINTEUR MCENT.MELEME 67 : POINTEUR MELPOE.MELEME 68 : -INC SMLENTI 69 : POINTEUR PONBEL.MLENTI 70 : POINTEUR ELNBEL.MLENTI 71 : * 72 : * Segment MLELEM 73 : * 74 : SEGMENT MLELEM 75 : INTEGER INDEX(NBL+1) 76 : INTEGER LESPOI(NBTPOI) 77 : ENDSEGMENT 78 : * 79 : * LISTE SEQUENTIELLE INDEXEE D'ELEMENTS 80 : * 81 : * NBL : NOMBRE D'ELEMENTS 82 : * NBTPOI : NOMBRE TOTAL DE POINTS REFERENCEES 83 : * INDEX(I) : INDICE DU 1ER POINT DU IEME ELEMENT 84 : * DANS LE TABLEAU LESPOI 85 : * LESPOI(INDEX(I) -> INDEX(I+1)-1) : NUMERO DES NOEUDS 86 : * DU IEME ELEMENT 87 : * 88 : POINTEUR LEPOEL.MLELEM 89 : POINTEUR LEELEL.MLELEM 90 : INTEGER IMPR,IRET 91 : * 92 : * Executable statements 93 : * 94 : IMPR=IIMPI 95 : IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans elpoel.eso' 96 : * 97 : * Pour dimensionner le tableau LESPOI et remplir le tableau 98 : * INDEX du segment LEPOEL (type MLELEM), on construit d'abord : 99 : * PONBEL(NOPOI1) 100 : * NOPOI1 : indice du point considéré dans MCLPO1 101 : * PONBEL(NOPOI1) : nombre d'éléments de MCLAS 102 : * contenant le point considéré 103 : * 104 : * In PONBEL : new temporary object PONBEL.MLENTI (SEGINI) 105 : * 105 : CALL POINBL(MCLAS,MCLPO1, 106 : $ PONBEL,IMPR,IRET) 107 : IF (IRET.NE.0) GOTO 9999 108 : * 109 : * On construit la liste séquentielle indexée d'éléments LEPOEL 110 : * (type MLELEM). 111 : * NOPOI1 : indice du point considéré dans MCLPO1 112 : * LEPOEL.LESPOI(LEPOEL.INDEX(NOPOI1)) : 113 : * contient le numéro du point considéré 114 : * LEPOEL.LESPOI(LEPOEL.INDEX(NOPOI1)+1 -> LEPOEL.INDEX(NOPOI1+1)-1) : 115 : * contient les numéro des points centre des éléments 116 : * contenant le point considéré (!) 117 : * 118 : * In POELEM : new temporary object LEPOEL.MLELEM (SEGINI) 119 : * 119 : CALL POELEM(MCLAS,MCLPO1,MCENT,PONBEL, 120 : $ LEPOEL,IMPR,IRET) 121 : IF (IRET.NE.0) GOTO 9999 122 : SEGSUP PONBEL 123 : * 124 : * On doit créer l'équivalent de PONBEL pour les centres 125 : * On construit ELNBEL(NOCENT) 126 : * NOCENT : indice du centre de l'élément considéré dans MCENT 127 : * ELNBEL(NOCENT) : nombre d'éléments partageant (au moins) 128 : * un point de MCLPO1 avec l'élément considéré. 129 : * 130 : * In ELENBL : SEGINI ELNBEL 130 : CALL ELENBL(MCLAS,MCLPO1,MCENT,LEPOEL, 131 : $ ELNBEL,IMPR,IRET) 132 : IF (IRET.NE.0) GOTO 9999 133 : * 134 : * On construit la liste séquentielle indexée d'éléments LEELEL 135 : * (type MLELEM). 136 : * NOCENT : indice du centre de l'élément considéré dans MCENT 137 : * LEELEL.LESPOI(LEELEL.INDEX(NOCENT)) : 138 : * contient le numéro du centre de l'élément considéré 139 : * LEELEL.LESPOI(LEPOEL.INDEX(NOCENT)+1 -> LEPOEL.INDEX(NOCENT+1)-1) : 140 : * contient les numéro des points centre des éléments 141 : * qui ont un point de MCLPO1 en commun avec l'élément 142 : * considéré (!) 143 : * 144 : * In ELELEM : new temporary object LEELEL.MLELEM (SEGINI) 145 : * 145 : CALL ELELEM(MCLAS,MCLPO1,MCENT,LEPOEL,ELNBEL, 146 : $ LEELEL,IMPR,IRET) 147 : IF (IRET.NE.0) GOTO 9999 148 : * 149 : * Quelques suppressions 150 : * 151 : SEGSUP ELNBEL 152 : SEGSUP LEPOEL 153 : * 154 : * A partir de LEELEL, on peut construire la structure MELEME 155 : * correspondante : elle est constituée d'éléments de type POLY. 156 : * En gros, on regroupe les éléments qui ont le meme nombre de points. 157 : * 158 : * In LE2MEL : new object MELPOE.MELEME (SEGINI-SEGDES) 159 : * 159 : CALL LE2MEL(LEELEL, 160 : $ MELPOE,IMPR,IRET) 161 : IF (IRET.NE.0) GOTO 9999 162 : * 163 : * Suppressions d'objets temporaires 164 : * 165 : SEGSUP LEELEL 166 : * 167 : * Normal termination 168 : * 169 : RETURN 170 : * 171 : * Format handling 172 : * 173 : 4000 FORMAT (A,'(1..',I8,')') 174 : 5000 FORMAT (8(1X,I8)) 175 : * 176 : * Error handling 177 : * 178 : 9999 CONTINUE 179 : WRITE(IOIMP,*) 'An error was detected in subroutine elpoel' 179 : call erreur(21) 180 : MELPOE=0 181 : RETURN 182 : * 183 : * End of subroutine ELPOEL 184 : * 185 : END 186 : 187 : 188 : 189 :
© Cast3M 2003 - All rights reserved.
Disclaimer