Download poelm2.eso

Back to the list

   1 : C POELM2    SOURCE    CHAT      05/01/13    02:16:26     5004           
   2 :       SUBROUTINE POELM2(MAIL,KRIPO1,PONBEL,
   3 :      $     LSTPL,
   4 :      $     IMPR,IRET)
   5 :       IMPLICIT INTEGER(I-N)
   6 :       IMPLICIT REAL*8 (A-H,O-Z)
   7 : C***********************************************************************
   8 : C NOM         : POELM2
   9 : C DESCRIPTION : Maillage + tableau de repérage de points + liste
  10 : C               d'entiers (ponbl2) => liste indexée d'entiers (un
  11 : C               point)->(numéro des éléments du maillage le contenant).   
  12 : C 
  13 : C         Construit une liste indexée LSTPL (type LSTIND)
  14 : C         * Nombre de multiplets = nb d'éléments de PONBEL ;
  15 : C         * chaque multiplet i : numéros des éléments de 
  16 : C           MAIL contenant un point dont le numéro n 
  17 : C           est tel que KRIPO1(n)=i. 
  18 : C       (Le nombre de ces éléments est PONBEL(i), cf. ponbl2).
  19 : C
  20 : C LANGAGE     : ESOPE
  21 : C AUTEUR      : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF)
  22 : C               mél : gounand@semt2.smts.cea.fr
  23 : C***********************************************************************
  24 : C APPELES (ESOPE)  : OOOETA
  25 : C APPELE PAR       : MAKPRM
  26 : C***********************************************************************
  27 : C SYNTAXE GIBIANE    : -
  28 : C ENTREES            :
  29 : C ENTREES/SORTIES    : -
  30 : C SORTIES            : LSTPL (type LSTIND)
  31 : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  32 : C***********************************************************************
  33 : C VERSION    : v1, 20/05/99, version initiale
  34 : C HISTORIQUE : v1, 20/05/99, création
  35 : C HISTORIQUE :
  36 : C HISTORIQUE :
  37 : C***********************************************************************
  38 : C Prière de PRENDRE LE TEMPS de compléter les commentaires
  39 : C en cas de modification de ce sous-programme afin de faciliter
  40 : C la maintenance !
  41 : C***********************************************************************
  42 : -INC CCOPTIO
  43 : -INC SMELEME
  44 :       POINTEUR MAIL.MELEME
  45 :       POINTEUR SOUMAI.MELEME
  46 : -INC SMLENTI
  47 :       POINTEUR PONBEL.MLENTI
  48 :       POINTEUR KRIPO1.MLENTI
  49 : *
  50 : *     Segment LSTIND (liste séquentielle indexée)
  51 : *
  52 :       SEGMENT LSTIND
  53 :       INTEGER IDX(NBM+1)
  54 :       INTEGER IVAL(NBTVAL)
  55 :       ENDSEGMENT
  56 : *
  57 : *     LISTE SEQUENTIELLE INDEXEE D'ENTIERS
  58 : *
  59 : *     NBL      : NOMBRE DE MULTIPLETS
  60 : *     NBTVAL   : NOMBRE TOTAL DE VALEURS 
  61 : *     IDX(I)   : INDICE DE LA PREMIERE VALEUR DU IEME 
  62 : *                MULTIPLET DANS LE TABLEAU IVAL
  63 : *     IVAL(IDX(I) -> IDX(I+1)-1) : VALEURS DU IEME MULTIPLET
  64 : *
  65 : *-INC SLSTIND
  66 :       POINTEUR LSTPL.LSTIND
  67 :       POINTEUR ICOUR.LSTIND
  68 : *
  69 :       INTEGER IMPR,IRET
  70 :       INTEGER MAETA,KRETA,POETA,SMETA
  71 :       INTEGER INBEL,INBM,INBNO,INBSOU,IDEPA,IDXCOU
  72 :       INTEGER  NBEL, NBM, NBNO,NBSOUS
  73 :       INTEGER NBTVAL,NLOCP1,NPONB,NUELMA,NUMNO
  74 : *
  75 : * Executable statements
  76 : *
  77 :       IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans poelm2.eso' 
  77 :       CALL OOOETA(PONBEL,POETA)
  78 :       IF (POETA.NE.1) SEGACT PONBEL
  79 :       NPONB=PONBEL.LECT(/1)
  80 : C   On initialise le segment LSTPL
  81 : C              et le segment ICOUR
  82 : C     dans ICOUR, seul le tableau IDX nous intéresse
  83 :       NBM=NPONB
  84 :       NBTVAL=0
  85 :       SEGINI LSTPL
  86 :       IDEPA=1
  87 :       DO 2 INBM=1,NBM
  88 :          LSTPL.IDX(INBM)=IDEPA
  89 :          IDEPA=IDEPA+PONBEL.LECT(INBM)
  90 :  2    CONTINUE
  91 :       LSTPL.IDX(NBM+1)=IDEPA
  92 :       IF (POETA.NE.1) SEGDES PONBEL
  93 :       SEGINI,ICOUR=LSTPL
  94 :       NBTVAL=IDEPA-1
  95 :       SEGADJ LSTPL
  95 :       CALL OOOETA(KRIPO1,KRETA)
  96 :       IF (KRETA.NE.1) SEGACT KRIPO1
  97 : *
  98 : *   Parcourons le maillage
  99 : *
 100 :       NUELMA=0
 100 :       CALL OOOETA(MAIL,MAETA)
 101 :       IF (MAETA.NE.1) SEGACT MAIL
 102 :       NBSOUS=MAX(1,MAIL.LISOUS(/1))
 103 :       DO 4 INBSOU=1,NBSOUS
 104 :          IF (NBSOUS.EQ.1) THEN
 105 :             SOUMAI=MAIL
 106 :          ELSE
 107 :             SOUMAI=MAIL.LISOUS(INBSOU)
 107 :             CALL OOOETA(SOUMAI,SMETA)
 108 :             IF (SMETA.NE.1) SEGACT SOUMAI
 109 :          ENDIF
 110 :          NBNO=SOUMAI.NUM(/1)
 111 :          NBEL=SOUMAI.NUM(/2)
 112 :          DO 42 INBEL=1,NBEL
 113 :             NUELMA=NUELMA+1
 114 :             DO 422 INBNO=1,NBNO
 115 :                NUMNO=SOUMAI.NUM(INBNO,INBEL)
 116 :                NLOCP1=KRIPO1.LECT(NUMNO)
 117 :                IF (NLOCP1.NE.0) THEN
 118 :                   IDXCOU=ICOUR.IDX(NLOCP1)
 119 :                   LSTPL.IVAL(IDXCOU)=NUELMA
 120 :                   ICOUR.IDX(NLOCP1)=IDXCOU+1
 121 :                ENDIF
 122 :  422        CONTINUE
 123 :  42      CONTINUE
 124 :          IF (NBSOUS.NE.1.AND.SMETA.NE.1) SEGDES SOUMAI
 125 :  4    CONTINUE
 126 :       IF (MAETA.NE.1) SEGDES MAIL
 127 :       IF (KRETA.NE.1) SEGDES KRIPO1
 128 :       SEGDES LSTPL
 129 :       SEGSUP ICOUR
 130 : *
 131 : * Normal termination
 132 : *
 133 :       IRET=0
 134 :       RETURN
 135 : *
 136 : * Format handling
 137 : *
 138 : *
 139 : * Error handling
 140 : *
 141 :  9999 CONTINUE
 142 :       IRET=1
 143 :       WRITE(IOIMP,*) 'An error was detected in subroutine poelm2'
 144 :       RETURN
 145 : *
 146 : * End of subroutine POELM2
 147 : *
 148 :       END
 149 : 
 150 :  
 151 :  

© Cast3M 2003 - All rights reserved.
Disclaimer