Download elpoel.eso

Back to the list

   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