1 : C ELPOFA SOURCE CHAT 05/01/12 23:37:47 5004 2 : SUBROUTINE ELPOFA(MCLAS,MCLPO1,MCENT,MFACEL,MFACEP,MELPOE,MCENEL) 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 DERNIER 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 et de MFACEP en commun avec 13 : C l'élément 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 : ELCONT : les éléments du contour de MCLAS et leur 19 : C centre 20 : C POINB2 : maillage de points -> LISTENTI de 21 : C nb d'éléments auxquels ils appartiennent 22 : C POELE2 : maillage de points -> MLELEM contenant les 23 : C points et les centres d'éléments auxquels 24 : C ils appartiennent. 25 : C ELENB2 : maillage de points -> LISTENTI de 26 : C nb d'éléments adjacents (ayant un 27 : C point du maillage de points en 28 : C commun) à des éléments repérés par 29 : C leur centre. 30 : C ELELE2 : maillage de points -> MLELEM contenant 31 : C les centres des éléments, et, pour 32 : C chaque centre, les centres des éléments 33 : C adjacents. 34 : C LE2ME2 : MLELEM (liste indexée d'éléments) 35 : C -> MELEME 36 : C APPELES (E/S) : - 37 : C APPELES (BLAS) : - 38 : C APPELES (CALCUL) : - 39 : C APPELE PAR : LEKTAB 40 : C*********************************************************************** 41 : C SYNTAXE GIBIANE : - 42 : C ENTREES : MCLAS (type MELEME) : maillage de classe de 43 : C points (sommet, face) par 44 : C élément (MMAIL,ELTFA) 45 : C MCLPO1 (type MELEME) : maillage de points 46 : C correspondant à MCLAS 47 : C MCENT (type MELEME) : maillage des points 48 : C centre 49 : C MFACEL (type MELEME) : maillage de connectivité 50 : C face-centre-face 51 : C MFACEP (type MELEME) : maillage de connectivité 52 : C sommets-centre de face 53 : C ENTREES/SORTIES : - 54 : C SORTIES : MELPOE (type MELEME) : maillage de 55 : C connectivités 56 : C élément-(point)-élément 57 : C*********************************************************************** 58 : C VERSION : v1, 08/10/98, version initiale 59 : C HISTORIQUE : v1, 08/10/98, création 60 : C HISTORIQUE : Modif, R. MOREL and A. BECCANTINI, 11.04.2000 61 : C HISTORIQUE : 62 : C*********************************************************************** 63 : C Prière de PRENDRE LE TEMPS de compléter les commentaires 64 : C en cas de modification de ce sous-programme afin de faciliter 65 : C la maintenance ! 66 : C*********************************************************************** 67 : -INC CCOPTIO 68 : -INC SMELEME 69 : POINTEUR MCLAS.MELEME 70 : POINTEUR MCLPO1.MELEME 71 : POINTEUR MCENT.MELEME 72 : POINTEUR MCONT.MELEME 73 : POINTEUR MCCEN.MELEME 74 : POINTEUR MFACEL.MELEME 75 : POINTEUR MFACEP.MELEME 76 : POINTEUR MELPOE.MELEME 77 : POINTEUR MCENEL.MELEME 78 : -INC SMLENTI 79 : POINTEUR PONBEL.MLENTI 80 : POINTEUR ELNBEL.MLENTI 81 : * 82 : * Segment MLELEM 83 : * 84 : SEGMENT MLELEM 85 : INTEGER INDEX(NBL+1) 86 : INTEGER LESPOI(NBTPOI) 87 : ENDSEGMENT 88 : * 89 : * LISTE SEQUENTIELLE INDEXEE D'ELEMENTS 90 : * 91 : * NBL : NOMBRE D'ELEMENTS 92 : * NBTPOI : NOMBRE TOTAL DE POINTS REFERENCEES 93 : * INDEX(I) : INDICE DU 1ER POINT DU IEME ELEMENT 94 : * DANS LE TABLEAU LESPOI 95 : * LESPOI(INDEX(I) -> INDEX(I+1)-1) : NUMERO DES NOEUDS 96 : * DU IEME ELEMENT 97 : * 98 : POINTEUR LEPOEL.MLELEM 99 : POINTEUR LEELEL.MLELEM 100 : C 101 : C**** Variables de COOPTIO 102 : C 103 : C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR 104 : C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ 105 : C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES 106 : C & ,IECHO, IIMPI, IOSPI 107 : C & ,IDIM 108 : C & ,MCOORD 109 : C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE 110 : C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU 111 : C & ,NORINC,NORVAL,NORIND,NORVAD 112 : C & ,NUCROU, IPSAUV 113 : * 114 : INTEGER ILISOU, NBSOUS 115 : * 116 : * Executable statements 117 : * 118 : * 119 : * On commence par appeler ELCONT pour avoir les éléments du contour 120 : * de MCLAS et leur centre : en entree : les connectivités FACE, FACEL, 121 : * FACEP ; en sortie : le maillage MCONT de faces du contour et le 122 : * maillage MCCEN des centres de ces faces. 123 : * 124 : * In ELCONT: new temporary object MCONT.MAILLAGE (SEGINI) 125 : * MCENT.MAILLAGE (SEGINI) 126 : * 126 : CALL ELCONT(MFACEL,MFACEP,MCONT,MCCEN) 127 : IF (IERR.NE.0) GOTO 9999 128 : * 129 : * Pour dimensionner le tableau LESPOI et remplir le tableau 130 : * INDEX du segment LEPOEL (type MLELEM), on construit d'abord : 131 : * PONBEL(NOPOI1) 132 : * NOPOI1 : indice du point considéré dans MCLPO1 133 : * PONBEL(NOPOI1) : nombre d'éléments de MCLAS et MCONT 134 : * contenant le point considéré 135 : * 136 : * In POIBE2 : new temporary object PONBEL.MLENTI (SEGINI) 137 : * 137 : CALL POINB2(MCLAS,MCONT,MCLPO1,PONBEL) 138 : IF (IERR.NE.0) GOTO 9999 139 : * 140 : * On construit la liste séquentielle indexée d'éléments LEPOEL 141 : * (type MLELEM). 142 : * NOPOI1 : indice du point considéré dans MCLPO1 143 : * LEPOEL.LESPOI(LEPOEL.INDEX(NOPOI1)) : 144 : * contient le numéro du point considéré 145 : * LEPOEL.LESPOI(LEPOEL.INDEX(NOPOI1)+1 -> LEPOEL.INDEX(NOPOI1+1)-1) : 146 : * contient les numéro des points centre des éléments 147 : * contenant le point considéré (!) 148 : * 149 : * In POELE2 : new temporary object LEPOEL.MLELEM (SEGINI) 150 : * 150 : CALL POELE2(MCLAS,MCONT,MCLPO1,MCENT,MCCEN,PONBEL,LEPOEL) 151 : IF (IERR.NE.0) GOTO 9999 152 : SEGSUP PONBEL 153 : * 154 : * On doit créer l'équivalent de PONBEL pour les centres 155 : * On construit ELNBEL(NOCENT) 156 : * NOCENT : indice du centre de l'élément considéré dans MCENT 157 : * ELNBEL(NOCENT) : nombre d'éléments partageant (au moins) 158 : * un point de MCLPO1 avec l'élément considéré. 159 : * 160 : * In ELENB2 : SEGINI ELNBEL 161 : * 161 : CALL ELENB2(MCLAS,MCLPO1,MCENT,LEPOEL, 162 : $ ELNBEL) 163 : IF (IERR.NE.0) GOTO 9999 164 : * 165 : * On construit la liste séquentielle indexée d'éléments LEELEL 166 : * (type MLELEM). 167 : * NOCENT : indice du centre de l'élément considéré dans MCENT 168 : * LEELEL.LESPOI(LEELEL.INDEX(NOCENT)) : 169 : * contient le numéro du centre de l'élément considéré 170 : * LEELEL.LESPOI(LEPOEL.INDEX(NOCENT)+1 -> LEPOEL.INDEX(NOCENT+1)-1) : 171 : * contient les numéro des points centre des éléments 172 : * qui ont un point de MCLPO1 en commun avec l'élément 173 : * considéré (!) 174 : * 175 : * In ELELE2 : new temporary object LEELEL.MLELEM (SEGINI) 176 : * 176 : CALL ELELE2(MCLAS,MCLPO1,MCENT,LEPOEL,ELNBEL,LEELEL) 177 : IF (IERR.NE.0) GOTO 9999 178 : * 179 : * A partir de LEELEL, on peut construire la structure MELEME 180 : * correspondante : elle est constituée d'éléments de type POLY. 181 : * En gros, on regroupe les éléments qui ont le meme nombre de points. 182 : * 183 : * In LE2ME2 : new object MELPOE.MELEME (SEGINI-SEGDES) 184 : * 184 : CALL LE2ME2(LEELEL, 185 : $ MELPOE,MCENEL) 186 : IF (IERR.NE.0) GOTO 9999 187 : * 188 : * Suppressions d'objets temporaires 189 : * 190 : SEGSUP ELNBEL 191 : SEGSUP LEPOEL 192 : SEGSUP LEELEL 193 : IPT1 = MCCEN 194 : SEGACT IPT1 195 : NBSOUS = IPT1.LISOUS 196 : IF(NBSOUS .EQ. 0)THEN 197 : SEGSUP IPT1 198 : ELSE 199 : DO ILISOU = 1, NBSOUS 200 : IPT2 = IPT1.LISOUS(ILISOU) 201 : SEGSUP IPT2 202 : ENDDO 203 : SEGSUP IPT1 204 : ENDIF 205 : IPT1 = MCONT 206 : SEGACT IPT1 207 : NBSOUS = IPT1.LISOUS 208 : IF(NBSOUS .EQ. 0)THEN 209 : SEGSUP IPT1 210 : ELSE 211 : DO ILISOU = 1, NBSOUS 212 : IPT2 = IPT1.LISOUS(ILISOU) 213 : SEGSUP IPT2 214 : ENDDO 215 : SEGSUP IPT1 216 : ENDIF 217 : * 218 : * Normal termination 219 : * 220 : 9999 CONTINUE 221 : RETURN 222 : * 223 : * End of subroutine ELPOFA 224 : * 225 : END 226 : 227 : 228 : 229 : 230 :
© Cast3M 2003 - All rights reserved.
Disclaimer