Download extr23.eso

Back to the list

   1 : C EXTR23    SOURCE    JC220346  12/12/13    21:15:03     7610           
   2 : ************************************************************************
   3 : * NOM         : extr23
   4 : * DESCRIPTION : Extrait les valeurs d'un CHPOINT a une composante pour
   5 : *               les mettre dans un LISTREEL
   6 : ************************************************************************
   7 : * HISTORIQUE :  12/12/2012 : JCARDO : création de la subroutine
   8 : * HISTORIQUE :  13/12/2012 : JCARDO : nouvel argument MLMOTS contenant
   9 : *                                     la liste des composantes à sortir
  10 : * HISTORIQUE :
  11 : ************************************************************************
  12 : * Prière de PRENDRE LE TEMPS DE COMPLÉTER LES COMMENTAIRES
  13 : * en cas de modification de ce sous-programme afin de faciliter
  14 : * la maintenance !
  15 : ************************************************************************
  16 : * APPELÉ PAR : extrai.eso
  17 : ************************************************************************
  18 : * ENTRÉES :: aucune
  19 : * SORTIES :: aucune
  20 : ************************************************************************
  21 : * SYNTAXE (GIBIANE) :
  22 : *
  23 : *          LREEL1 = EXTR 'VALE' (MOT1 | LMOT1) CHPO1 (MAIL1) ;
  24 : *
  25 : ************************************************************************
  26 :       SUBROUTINE EXTR23(ICHPOI,MLMOTS,MELEME,MLREEL)
  27 : *
  28 :       IMPLICIT INTEGER(I-N)
  29 :       IMPLICIT REAL*8(A-H,O-Z)
  30 : *
  31 : -INC CCOPTIO
  32 : -INC SMCHPOI
  33 : -INC SMELEME
  34 : -INC SMLREEL
  35 : -INC SMLMOTS
  36 : *
  37 :       CHARACTER*4 MCO
  38 : *
  39 : *
  40 : *     Création de la liste de réels renvoyée en sortie
  41 :       JG=0
  42 :       SEGINI,MLREEL
  43 : *
  44 : ************************************************************************
  45 : *   G E S T I O N   D E S   C O M P O S A N T E S   M U L T I P L E S
  46 : ************************************************************************
  47 : *
  48 : *     a) SI L'ON N'A PAS FOURNI DE LISTE DE COMPOSANTES
  49 : *     => on verifie que le CHPOINT ne contient qu'une seule composante
  50 : *        =============================================================
  51 :       IF (MLMOTS.NE.0) GOTO 50
  52 :       MCHPOI=ICHPOI
  53 :       SEGACT,MCHPOI
  54 :       NSOUPO=IPCHP(/1)
  55 :       IF (NSOUPO.EQ.0) GOTO 1000
  56 : *     /!\ on suppose que la partition est bien faite,
  57 : *         c'est-à-dire 1 SOUPO = 1 liste de composante unique)
  58 :       IF (NSOUPO.GT.1) GOTO 9
  59 :       MSOUPO=IPCHP(1)
  60 :       SEGACT,MSOUPO
  61 :       IF (NOCOMP(/2).GT.1) GOTO 9
  62 :       GOTO 100
  63 : *
  64 : *     (ERREUR 180 => "Il faut spécifier un champ par point avec une
  65 : *                     seule composante")
  65 :     9 CALL ERREUR(180)
  66 :       RETURN
  67 : *
  68 : *
  69 : *     b) SI ON A SPECIFIE LA LISTE DES COMPOSANTES A SORTIR
  70 : *     => on appelle EXCOPP pour faire le travail
  71 : *        ==================================================
  72 :    50 SEGACT,MLMOTS
  73 :       ICO=0
  74 :       NCO=MOTS(/2)
  75 : *     (label 51 = boucle sur les composantes)
  76 :    51 CONTINUE
  77 :       IF (ICO.EQ.NCO) GOTO 1000
  78 :       ICO=ICO+1
  79 :       MCO=MOTS(ICO)
  79 :       CALL EXCOPP(ICHPOI,MCO,MCHPOI,MCO,0)
  80 :       SEGACT,MCHPOI
  81 :       MSOUPO=IPCHP(1)
  82 :       SEGACT,MSOUPO
  83 : *
  84 : *
  85 : *
  86 : ************************************************************************
  87 : *   G E S T I O N   D E   L ' O R D R E   D U   L I S T R E E L
  88 : ************************************************************************
  89 : *
  90 : *     a) UN MELEME A ETE FOURNI POUR SPECIFIER L'ORDRE DE SORTIE
  91 : *        =======================================================
  92 : *
  93 :   100 CONTINUE
  94 :       IF (MELEME.EQ.0) GOTO 200
  95 : *
  96 : *     On vérifie qu'il est composé uniquement de POI1
  97 :       SEGACT,MELEME
  98 :       IF (LISOUS(/1).GT.0.OR.ITYPEL.NE.1) THEN
  99 :           MOTERR(1:8)='MAILLAGE'
 100 :           MOTERR(9:24)='POI1'
 100 :           CALL ERREUR(1025)
 101 :           RETURN
 102 :       ENDIF
 103 : *
 104 : *     Agrandissement du LISTREEL
 105 :       NP1=NUM(/2)
 106 :       JG=JG+NP1
 107 :       SEGADJ,MLREEL
 108 : *
 109 : *     Remplissage du LISTREEL selon l'ordre demandé
 110 :       IPT1=IGEOC
 111 :       MPOVAL=IPOVAL
 112 :       SEGACT,IPT1,MPOVAL
 113 :       NP2=IPT1.NUM(/2)
 114 :       DO 150 I2=1,NP2
 115 :           DO I3=1,NP1
 116 :               IF (IPT1.NUM(1,I2).EQ.NUM(1,I3)) THEN
 117 :                   PROG(JG-NP1+I3)=VPOCHA(I2,1)
 118 :                   GOTO 150
 119 :               ENDIF
 120 :           ENDDO
 121 :   150 CONTINUE
 122 : *
 123 :       SEGDES,MPOVAL,IPT1,MELEME
 124 :       GOTO 950
 125 : *
 126 : *
 127 : *     b) ON NE S'INTERESSE PAS A L'ORDRE DE SORTIE
 128 : *        => Remplissage du LISTREEL dans l'ordre du VPOCHA
 129 : *        =================================================
 130 : *
 131 :   200 CONTINUE
 132 : *
 133 :       MPOVAL=IPOVAL
 134 :       SEGACT,MPOVAL
 135 :       NP2=VPOCHA(/1)
 136 :       JG=JG+NP2
 137 :       SEGADJ,MLREEL
 138 :       DO I2=1,NP2
 139 :           PROG(JG-NP2+I2)=VPOCHA(I2,1)
 140 :       ENDDO
 141 : *
 142 :       SEGDES,MPOVAL
 143 : *
 144 : *
 145 : *
 146 :   950 CONTINUE
 147 :       IF (MLMOTS.NE.0) THEN
 147 :           CALL DTCHPO(MCHPOI)
 148 :           GOTO 51
 149 :       ELSE
 150 :           SEGDES,MSOUPO
 151 :       ENDIF
 152 : *
 153 : *
 154 :  1000 CONTINUE
 155 :       IF (MLMOTS.EQ.0) THEN
 156 :           SEGDES,MCHPOI
 157 :       ELSE
 158 :           SEGDES,MLMOTS
 159 :       ENDIF
 160 :       SEGDES,MLREEL
 161 : *
 162 : *
 163 :       RETURN
 164 : *
 165 :       END
 166 : *
 167 :  

© Cast3M 2003 - All rights reserved.
Disclaimer