Download quepoi.eso

Back to the list

   1 : C QUEPOI    SOURCE    PV        13/04/16    21:15:22     7765           
   2 :       SUBROUTINE QUEPOI(ICHP1,IPSG,INDIC,NBCOMP,NOMTOT)
   3 : C-----------------------------------------------------------------------
   4 : C On teste le champoint ICHP1 afin de vérifier :
   5 : C   1) qu'il est non partitionné
   6 : C   2) qu'il a le bon nombre de composantes et/ou les bonnes composantes
   7 : C   3) que son support géométrique est IPSG
   8 : C Si INDIC vaut 1 en entrée, on modifie, si besoin, l'ordonnencement
   9 : C des infos du CHPO afin d'imposer le SPG de pointeur IPSG. Si INDIC
  10 : C vaut 0, des supports différents générent INDIC=-4 mais on n'imprime
  11 : C pas de message d'erreur.
  12 : C-----------------------------------------------------------------------
  13 : C
  14 : C---------------------------
  15 : C Parametres Entree/Sortie :
  16 : C---------------------------
  17 : C
  18 : C E/  ICHP1  : Champoint à tester
  19 : C E/  IPSG   : Maillage de référence, en général de type POI1
  20 : C E/S INDIC  : En entrée,
  21 : C                  0 On ne fait que vérifier le support géométrique,
  22 : C                  1 On impose le pointeur du support géométrique.
  23 : C              En sortie,
  24 : C                 -4 si les spgs sont différents (points différents),
  25 : C                 -3 si le nom des composantes sont incorrects,
  26 : C                 -2 si le nombre de composantes est incorrect,
  27 : C                 -1 si le champoint est partitionné,
  28 : C                  0 si les spgs sont identiques,
  29 : C                  1 si les points sont identiques.
  30 : C E/S NBCOMP : En entrée,
  31 : C                 >0 si on teste le nombre de compoantes,
  32 : C                  0 si on veut recuperer les noms de composantes,
  33 : C                 -1 si on ne veut faire aucun test.
  34 : C              En sortie,
  35 : C                 nombre de composantes du CHPO.
  36 : C E/S NOMTOT : En entrée,
  37 : C                 noms des composantes à tester (si NBCOMP > 0),
  38 : C                 remplir NOMTOT(1)='    ' dans l'appelant sinon.
  39 : C              En sortie,
  40 : C                 noms des composantes du CHPO (si NBCOMP = 0),
  41 : C                 non rempli sinon.
  42 : C
  43 : C-----------------------------------------------------------------------
  44 : C ATTENTION: TOUJOURS initialiser NOMTOT(dim) dans le prg appelant
  45 : C                   (dim=1 si NBCOMP=0, dim=NBCOMP sinon)
  46 : C-----------------------------------------------------------------------
  47 : C
  48 : C Langage : ESOPE + FORTRAN77
  49 : C
  50 : C Auteurs : F.AURIOL 09/93
  51 : C
  52 : C-----------------------------------------------------------------------
  53 :       IMPLICIT INTEGER(I-N)
  54 :       IMPLICIT REAL*8 (A-H,O-Z)
  55 :       CHARACTER*4 NOMTOT(*)
  56 : C
  57 : -INC CCOPTIO
  58 : -INC SMELEME
  59 : -INC SMCHPOI
  60 : -INC SMCOORD
  61 :       SEGMENT IBEXIS
  62 :             INTEGER IEXIS(NBPTS)
  63 :       ENDSEGMENT
  64 : C
  65 :       ININI = INDIC
  66 : C
  67 : C- Test si le CHPO est partitionné
  68 : C
  69 :       MCHPOI = ICHP1
  70 :       SEGACT MCHPOI
  71 :       NSOUPO = IPCHP(/1)
  72 :       IF (NSOUPO.NE.1) THEN
  73 :          INDIC = -1
  74 :          MOTERR(1:8) = 'CHAMPOIN'
  74 :          CALL ERREUR(132)
  75 :          SEGDES MCHPOI
  76 :          RETURN
  77 :       ENDIF
  78 : C
  79 : C- Test/Récupération du nom des composantes
  80 : C
  81 :       MSOUPO = IPCHP(1)
  82 :       SEGDES MCHPOI
  83 :       SEGACT MSOUPO
  84 :       NBCOM1 = NBCOMP
  85 :       NBCOMP = NOCOMP(/2)
  86 :       IF (NBCOM1.GT.-1) THEN
  87 :          IF (NBCOM1.EQ.0) THEN
  88 :             DO 5 ICOMP=1,NBCOMP
  89 :                NOMTOT(ICOMP) = NOCOMP(ICOMP)
  90 :  5          CONTINUE
  91 :          ELSE
  92 :             IF (NBCOM1.NE.NBCOMP) THEN
  93 :                INDIC = -2
  94 :                MOTERR(1:8)  = ' QUEPOI '
  95 :                MOTERR(9:16) = 'CHAMPOIN'
  96 :                INTERR(1)   = NBCOM1
  97 :                INTERR(2)   = NBCOMP
  97 :                CALL ERREUR(699)
  98 :                SEGDES MSOUPO
  99 :                RETURN
 100 :             ENDIF
 101 :             IF (NOMTOT(1).NE.'    ') THEN
 102 :                DO 10 ICOMP=1,NBCOMP
 102 :                   CALL PLACE(NOMTOT,NBCOMP,IPOS,NOCOMP(ICOMP))
 103 :                   IF (IPOS.EQ.0) THEN
 104 :                      INDIC = -3
 105 :                      MOTERR(1:4) = NOCOMP(ICOMP)
 105 :                      CALL ERREUR(197)
 106 :                      SEGDES MSOUPO
 107 :                      RETURN
 108 :                   ENDIF
 109 :  10            CONTINUE
 110 :             ENDIF
 111 :          ENDIF
 112 :       ENDIF
 113 : C
 114 : C- Récupération des infos du MSOUPO utilisées
 115 : C
 116 :       IPT2   = IGEOC
 117 :       MPOVAL = IPOVAL
 118 :       SEGDES MSOUPO
 119 : C
 120 : C- Transforme le maillage en POI1 si maillage quelconque
 121 : C- Le maillage POI1 de pointeur IPT1 est actif au retour de CHANGE
 122 : C
 123 :       MELEME = IPSG
 124 :       SEGACT MELEME
 125 :       IPT1   = MELEME
 126 :       NBSOUS = LISOUS(/1)
 127 :       IF ((NBSOUS.NE.0).OR.(ITYPEL.NE.1)) THEN
 127 :          CALL CHANGE(IPT1,1)
 128 :          IF (IERR.NE.0) RETURN
 129 :       ENDIF
 130 : C
 131 : C- Si égalité des pointeurs INDIC=0
 132 : C
 133 :       IF (IPT2.EQ.IPT1) THEN
 134 :          INDIC = 0
 135 :          SEGDES IPT1
 136 :          RETURN
 137 :       ENDIF
 138 : C
 139 : C- Dans le cas d'un MELEME de POI1 création d'un CHPO de support
 140 : C- géométrique le POI1 en question.
 141 : C
 142 :       IF (ININI.EQ.1) THEN
 143 :          N  = IPT1.NUM(/2)
 144 :          NC = NBCOMP
 145 :          SEGINI MPOVA1
 146 :       ENDIF
 147 : C
 148 : C- Recherche si les points du MELEME de type POI1 sont dans le CHPO
 149 : C- et ordonnencement si INDIC=1
 150 : C
 151 :       NUMPT1 = IPT1.NUM(/2)
 152 :       SEGACT IPT2
 153 :       NUMPT2 = IPT2.NUM(/2)
 154 :       IF (NUMPT1.NE.NUMPT2) GOTO 110
 155 :       NBPTS=XCOOR(/1)/(IDIM+1)
 156 :       SEGINI IBEXIS
 157 :       DO 20 IEL=1,NBPTS
 158 :            IEXIS(IEL)=0
 159 :  20   CONTINUE
 160 :       DO 30 IEL=1,NUMPT1
 161 :            NOE = IPT1.NUM(1,IEL)
 162 :            IEXIS(NOE)=IEL
 163 :  30   CONTINUE
 164 :       IF (ININI.NE.1) THEN
 165 :             DO 15 IP=1,NUMPT2
 166 :                NOE=IPT2.NUM(1,IP)
 167 :                IF(IEXIS(NOE).EQ.0)GO TO 110
 168 :  15         CONTINUE
 169 :       ELSE
 170 :          SEGACT MPOVAL
 171 :             DO 60 IP=1,NUMPT2
 172 :                NOE=IPT2.NUM(1,IP)
 173 :                IEL=IEXIS(NOE)
 174 :                IF(IEL.EQ.0)GO TO 110
 175 :                   DO 50 NC1=1,NC
 176 :                      MPOVA1.VPOCHA(IEL,NC1) = VPOCHA(IP,NC1)
 177 :  50               CONTINUE
 178 :  60         CONTINUE
 179 :       ENDIF
 180 :       SEGSUP IBEXIS
 181 : C
 182 : C- Traitement si points identiques
 183 : C
 184 :       IF (ININI.EQ.1) THEN
 185 :          segact mpoval*mod
 186 :          DO 100 IEL=1,NUMPT1
 187 :             DO 90 NC1=1,NC
 188 :                VPOCHA(IEL,NC1) = MPOVA1.VPOCHA(IEL,NC1)
 189 :  90         CONTINUE
 190 :  100     CONTINUE
 191 :          SEGDES MPOVAL
 192 :          SEGSUP MPOVA1
 193 :          SEGACT MSOUPO*MOD
 194 :          IGEOC = IPT1
 195 :          SEGDES MSOUPO
 196 :       ENDIF
 197 :       INDIC = 1
 198 :       GOTO 120
 199 : C
 200 : C- Traitement si supports géométriques différents
 201 : C
 202 :  110  CONTINUE
 203 :       INDIC = -4
 204 :       IF (ININI.EQ.1) THEN
 205 :          SEGSUP MPOVA1
 206 :          MOTERR(1:8)  = 'CHAMPOIN'
 207 :          MOTERR(9:16) = 'MAILLAGE'
 208 :          INTERR(1)    = 1
 208 :          CALL ERREUR(698)
 209 :       ENDIF
 210 : C
 211 : C- Ménage
 212 : C
 213 :  120  CONTINUE
 214 :       SEGDES IPT2
 215 :       SEGDES IPT1
 216 : *
 217 :       RETURN
 218 :       END
 219 :  
 220 :  
 221 :  
 222 :  
 223 :  

© Cast3M 2003 - All rights reserved.
Disclaimer