Download trachit.procedur

Back to the list

   1 : * TRACHIT   PROCEDUR  JC220346  12/09/12    21:15:09     7501           
   2 : **********************************************************************
   3 : 'DEBPROC' TRACHIT
   4 :           TAB2*'TABLE' NOMT*'MOT' LIGNE*'MAILLAGE'
   5 :           LIINDT/'LISTENTI' LIT/'LISTREEL' LICOMP/'LISTMOTS'
   6 :           TNOMCOMP/'TABLE' TNOMPT/'TABLE' ;
   7 : 
   8 : **********************************************************************
   9 : *
  10 : *  Pour une fonction (x,t) donnée et pour un maillage de points donnés,
  11 : *  on construit une table contenant les évolutions en ces points au
  12 : *  cours du temps, pour les différentes composantes.
  13 : *
  14 : *
  15 : **********************************************************************
  16 : *
  17 : *  Syntaxe :
  18 : *  ---------
  19 : *
  20 : *    TAB1 = TRACHIT TAB2 MOT1 GEO1
  21 : *
  22 : *                   (| LENTI1 |) (LMOTS1) (TAB3) (TAB4) (('PREF') MOT2)
  23 : *                   (| LREEL1 |)
  24 : *
  25 : **********************************************************************
  26 : *
  27 : *  Auteur : F. Auriol, TTMF (1998)
  28 : *
  29 : * -----------------------
  30 : *
  31 : *  Modifié : P. Maugis, MTMS 24 août 1999
  32 : *
  33 : * -----------------------
  34 : *
  35 : *  Modifié : P. Maugis, LSCE le 07 août 2007
  36 : *    - récupération de la liste des composantes d'après le dernier champ
  37 : *      fourni plutôt que le premier, qui est parfois bidon.
  38 : *
  39 : ************************************************************************
  40 : *
  41 : *  Entrée :
  42 : *  --------
  43 : *
  44 : *      TAB2     : Table de données issue d'un calcul DARCY ou CHIMIE
  45 : *                 contenant les indices 'TEMPS' et NOMT,
  46 : *                 auxquels on trouve, aux indices entiers les temps et
  47 : *                 le champ point que l'on souhaite explorer à ces temps-là.
  48 : *
  49 : *      NOMT     : Nom de l'indice de TAB2 indiquant les CHPOs à suivre
  50 : *                 (type MOT)
  51 : *
  52 : *      LIGNE    : MAILLAGE des points où l'on souhaite visualiser
  53 : *                 l'évolution en fonction du temps.
  54 : *
  55 : *      NOMT2    : Nom humain du champ (type MOT, Défaut = NOMT)
  56 : *
  57 : *      LIINDT   : Liste des indices des temps à utiliser
  58 : *                 (type LISTENTI, Défaut = tous)
  59 : *
  60 : *      LIT      : Liste des temps à utiliser (Défaut = tous), doivent
  61 : *                 correspondre à ceux de TAB2.
  62 : *
  63 : *      LICOMP   : Liste des composantes des chpos à utiliser (Défaut = toutes)
  64 : *
  65 : *      TNOMCOMP : Table de SOUSTYPE 'NOM_COMPOSANTE' contenant, pour
  66 : *                 chaque indice entier de composante, le nom humain
  67 : *                 correspondant (type MOT, défaut = nom de la composante)
  68 : *
  69 : *      TNOMPT   : Table de SOUSTYPE 'NOM_POINT' contenant, pour
  70 : *                 chaque indice entier de point, le texte que l'on
  71 : *                 souhaite mettre (type MOT, défaut = 'PT' N° du point)
  72 : *
  73 : *  Sortie :
  74 : *  --------
  75 : *
  76 : *    Table contenant les évolutions aux points choisis au cours du
  77 : *    temps, pour les différentes composantes.
  78 : *    Indicée par des entiers (indice du point), elle contient pour
  79 : *    chaque cas une table à trois indices :
  80 : *
  81 : *      . 'VALEUR' : L'évolution en fonction du temps au point courant
  82 : *                   pour la composante courante
  83 : *      . 'LEGEND1': Préfixe de la légende pour toutes les courbes
  84 : *      . 'LEGEND2': Suffixe de cette légende (variable)
  85 : *
  86 : ************************************************************************
  87 : *
  88 : *   Remarques
  89 : *   ---------
  90 : *
  91 : *    LES SOUSTYPES DE TNOMCOMP ET TNOMPT SONT OBLIGATOIRES SI ON NE
  92 : *    DONNE QU'UNE SEULE TABLE.
  93 : *
  94 : ************************************************************************
  95 : 
  96 : *  Vérifications d'usage :
  97 : *  -----------------------
  98 :    'SI' ( 'NON' ('EXISTE' TAB2 'TEMPS') ) ;
  99 :       'ERREUR' ' Il manque l indice TEMPS dans la table ' ;
 100 :       'QUITTER' TRACHIT ;
 101 :    'FINSI' ;
 102 :    'SI' ( 'NON' ('EXISTE' TAB2 NOMT) ) ;
 103 :       'ERREUR' ('CHAINE' ' la table ne contient pas l indice ' NOMT ) ;
 104 :       'QUITTER' TRACHIT ;
 105 :    'FINSI' ;
 106 : 
 107 : *  Lecture des mots :
 108 :    nomt2 = 'MOT' nomt ;
 109 :    'REPETER' bcl1 ;
 110 :       'ARGUMENT' MOT1/'MOT' ;
 111 :       'SI' ('NON' ('EXISTE' mot1)) ;
 112 :          'QUITTER' bcl1 ;
 113 :       'FINSI' ;
 114 :       'SI' ('EGA' MOT1 'PREF') ;
 115 :          'ARGUMENT' NOMT2*'MOT' ;
 116 :       'SINON' ;
 117 : *       comme il n'y a pas d'ambiguïté, on accepte aussi un mot seul,
 118 : *       s'il est le dernier argument
 119 :         NOMT2 = MOT1 ;
 120 : *       'ERREUR' 'Mot' MOT1 'inconnu. On attend PREF' ;
 121 :       'FINSI' ;
 122 :    'FIN' bcl1 ;
 123 : 
 124 : *  On différencie TNOMCOMP et TNOMPT par leur sous-type :
 125 : *  par défaut on a affaire à la table des noms de composante.
 126 :    'SI' (('EXISTE' TNOMCOMP) 'ET' ('EXISTE' TNOMPT));
 127 :      'SI' ( ('NON' ('EXISTE' TNOMCOMP 'SOUSTYPE')) 'OU'
 128 :             ('NON' ('EXISTE' TNOMPT   'SOUSTYPE')) ) ;
 129 :        'ERREUR' 'Il faut préciser le soustype des tables de noms' ;
 130 :      'FINSI' ;
 131 :      'SI' ('EGA' TNOMCOMP.'SOUSTYPE' 'NOM_POINT') ;
 132 :        TB      = TNOMPT ;
 133 :        TNOMPT  = TNOMCOMP ;
 134 :        TNOMCOMP= TB  ;
 135 :      'SINON' ;
 136 :        'SI' ('NEG' TNOMCOMP.'SOUSTYPE' 'NOM_COMPOSANTE') ;
 137 :          'ERREUR' 'Il faut préciser le soustype des tables de noms' ;
 138 :        'FINSI' ;
 139 :      'FINSI' ;
 140 :    'FINSI' ;
 141 : 
 142 :    'SI' (('EXISTE' TNOMCOMP) 'ET' ('NON' ('EXISTE' TNOMPT))) ;
 143 :      'SI' ('EXISTE' TNOMCOMP 'SOUSTYPE');
 144 :        'SI' ('EGA' TNOMCOMP.'SOUSTYPE' 'NOM_POINT');
 145 :          TNOMPT  = TNOMCOMP;
 146 :          'OUBLIER' TNOMCOMP;
 147 :        'SINON' ;
 148 :          'SI' ('NEG' TNOMCOMP.'SOUSTYPE' 'NOM_COMPOSANTE');
 149 :            'ERREUR'
 150 :            'L indice SOUSTYPE vaut soit NOM_POINT, soit NOM_COMPOSANTE';
 151 :          'FINSI' ;
 152 :        'FINSI' ;
 153 :      'FINSI' ;
 154 :    'FINSI' ;
 155 : 
 156 : *  liste des couleurs :
 157 : *  --------------------
 158 :    licoul = 'MOTS' 'DEFAUT' 'BLEU' 'ROUGE' 'ROSE' 'JAUNE' 'VERT' 'TURQ'
 159 :                  'AZUR' 'ORANGE' 'VIOLET' 'OCEAN' 'CYAN' 'OLIVE' 'GRIS';
 160 :    ncoul  = 'DIME' licoul ;
 161 : 
 162 : *  Initialisation liste des composantes
 163 : *  ------------------------------------
 164 : *  Premier et dernier indices.
 165 : *  NBTP1 = Nb de temps dans la table donnée
 166 :    TBINDI = 'INDEX' ( TAB2.NOMT ) ;
 167 :    INDI0  = TBINDI . 1 ;
 168 :    NBTP1  = 'DIME' TBINDI ;
 169 :    INDIF  = TBINDI . NBTP1 ;
 170 : 
 171 :    'SI' ('EXISTE' LICOMP) ;
 172 :       NBCOMP = 'DIME' LICOMP ;
 173 :    'SINON' ;
 174 :       LICOMP = 'EXTR' ( TAB2.NOMT. INDIF ) 'COMP' ;
 175 :       NBCOMP = 'DIME' LICOMP ;
 176 :    'FINSI' ;
 177 : 
 178 : *  Initialisation légende de chaque composante (par défaut la composante)
 179 : *  -------------------------------------------
 180 :    'SI' ('NON' ('EXISTE' TNOMCOMP)) ;
 181 :       TNOMCOMP= 'TABLE' ;
 182 :    'FINSI' ;
 183 :    'REPETER' BOUB NBCOMP ;
 184 :       I = &BOUB ;
 185 :       'SI' ('NON' ( 'EXISTE' TNOMCOMP  I )) ;
 186 :          TNOMCOMP.I = 'MOT' ('EXTR' LICOMP I) ;
 187 :       'FINSI' ;
 188 :    'FIN' BOUB ;
 189 : 
 190 : *  initialisation légende de chaque point (par défaut est le N° du point)
 191 : *  --------------------------------------
 192 :    NBPT = 'NBNO' LIGNE ;
 193 :    'SI' ('NON' ( 'EXISTE' TNOMPT)) ;
 194 :      TNOMPT  = 'TABLE' ;
 195 :    'FINSI' ;
 196 :    'REPETER' BOUB NBPT ;
 197 :      I = &boub ;
 198 :      'SI' ('NON' ( 'EXISTE' TNOMPT  I )) ;
 199 :        TNOMPT.I = 'CHAINE' 'PT ' I ;
 200 :      'FINSI' ;
 201 :    'FIN' BOUB ;
 202 : 
 203 : *  Initialisation liste des indices et des temps :
 204 : *  -----------------------------------------------
 205 : *  NBTP2 = nombre de temps à prendre en compte.
 206 :    'SI' ('EXISTE' LIINDT);
 207 : *     si on fournit une liste des indices, on construit la liste des
 208 : *     temps correspondants.
 209 :       NBTP2   = 'DIME' LIINDT ;
 210 :       LIT     = 'PROG'  ;
 211 :       'REPETER' BOU7 NBTP2 ;
 212 :          J    = &bou7 ;
 213 :          I    = 'EXTR' LIINDT J ;
 214 :          LIT  = LIT 'ET' ('PROG' TAB2.'TEMPS'.I) ;
 215 :       'FIN' BOU7 ;
 216 :    'SINON'  ;
 217 :       'SI' ('EXISTE' LIT);
 218 : *        si on fournit une liste des temps, on construit la liste des
 219 : *        indices correspondants :
 220 :          NBTP2   ='DIME' LIT ;
 221 :          LIINDT  = 'LECT' ;
 222 :          'REPETER' BOU8 NBTP2 ;
 223 :             J  = &BOU8 ;
 224 :             VT = 'EXTR' LIT J ;
 225 :             'REPETER' BOU9 NBTP1 ;
 226 :                I   = &BOU9 ;
 227 :                III = TBINDI.I ;
 228 :                'SI' (VT 'EGA' TAB2.'TEMPS'.III) ;
 229 :                   'QUITTER' BOU9 ;
 230 :                'FINSI' ;
 231 :             'FIN' BOU9 ;
 232 : *           si on ne l'a pas trouvé, erreur :
 233 :             'SI' ('NEG' i &bou9);
 234 :                'ERREUR' 'un temps donné ne correspond à aucun indice';
 235 :                'QUITTER' TRACHIT ;
 236 :             'FINSI' ;
 237 :             LIINDT  = LIINDT 'ET' ('LECT' III) ;
 238 :          'FIN' BOU8 ;
 239 :       'SINON' ;
 240 : *        on n'a donné ni liste d'indices, ni liste des temps, donc on
 241 : *        les prend tous par défaut.
 242 :          NBTP2   = NBTP1 ;
 243 :          LIINDT  = 'LECT' ;
 244 :          LIT     = 'PROG' ;
 245 :          'REPETER' BOUA NBTP2 ;
 246 :             I       = &boua ;
 247 :             I1      = TBINDI.I ;
 248 :             LIINDT  = LIINDT 'ET' ('LECT' I1) ;
 249 :             LIT     = LIT 'ET' ('PROG' (TAB2.'TEMPS'.I1)) ;
 250 :          'FIN' BOUA ;
 251 :       'FINSI' ;
 252 :    'FINSI' ;
 253 : 
 254 : *  Création des listes de valeur du chpo pour chaque composante et pour chaque p
 255 : *  -----------------------------------------------------------------------------
 256 : *  K est l'indice de l'évolution
 257 :    TBR = 'TABLE' ;
 258 :    'REPETER' BOU1 NBTP2 ;
 259 : *     pour chaque indice de temps à traiter :
 260 :       J = &BOU1 ;
 261 :       I = 'EXTR' LIINDT J ;
 262 :       K = 0 ;
 263 : 
 264 :       'REPETER' BOU3 NBPT ;
 265 : *        pour chaque point du maillage donné
 266 :          LM  = &bou3 ;
 267 :          PPC = 'POINT' LIGNE LM ;
 268 :          'REPETER' BOU2 NBCOMP ;
 269 : *           pour chaque composante du chpo
 270 :             L = &bou2 ;
 271 :             K = K + 1 ;
 272 :             'SI' ('NON' ('EXISTE' TBR K));
 273 :                TBR.K = 'TABLE' ;
 274 :                TBR.K.'VALEUR' = 'PROG';
 275 :             'FINSI' ;
 276 :             NOM5 = 'MOT' ('EXTR' LICOMP L) ;
 277 :             VV   = 'EXTR' TAB2.NOMT.I NOM5 PPC ;
 278 :             TBR.K.'VALEUR' = TBR.K.'VALEUR' 'ET' ('PROG' VV) ;
 279 :          'FIN' BOU2 ;
 280 :       'FIN' BOU3 ;
 281 :    'FIN' BOU1 ;
 282 : 
 283 : *  K est l'indice de l'évolution, IC est l'indice de la couleur attribuée.
 284 :    K  = 0 ;
 285 :    IC = 0 ;
 286 :    'REPETER' BOU6 NBPT ;
 287 : *     pour chaque point du maillage donné
 288 :       LM = &bou6 ;
 289 : 
 290 :       'REPETER' BOU5 NBCOMP ;
 291 : *        pour chaque composante du chpo
 292 :          L    = &bou5 ;
 293 :          NOM5 = 'MOT' ('EXTR' LICOMP L) ;
 294 :          K    = K + 1 ;
 295 :          IC   = IC + 1 ;
 296 : 
 297 : *        Choix de la couleur de l'évolution
 298 :          IC    = (@MOD K ncoul) + 1 ;
 299 :          COUI  = 'MOT' ('EXTR' licoul ic) ;
 300 : 
 301 : *        Construction et ordonnancement de l'évolution
 302 :          ev1 = 'EVOL' COUI 'MANU' 'TEMPS' LIT
 303 :                       ('CHAINE' K) TBR.K.'VALEUR' ;
 304 :          ev1 = 'ORDONNER' ev1 ;
 305 :          TBR.K.'VALEUR' = ev1 ;
 306 : 
 307 : *        Légende de la courbe (apparaitra à droite)
 308 : *        se présente sous la forme  
 309 :          NO2   = 'MOT' TNOMCOMP.L ;
 310 :          NO3   = 'MOT' TNOMPT.LM ;
 311 :          MOMO1 = 'CHAINE' NO2 ' ' NO3 ;
 312 :          TBR.K.'LEGEND2'= 'MOT' MOMO1 ;
 313 : 
 314 : *        Adjonction préfixe constant :
 315 :          TBR.K.'LEGEND1' = 'MOT' NOMT2 ;
 316 : 
 317 :       'FIN' BOU5 ;
 318 :    'FIN' BOU6 ;
 319 : 
 320 : 'FINP' TBR ;
 321 : 
 322 : 
 323 :  

© Cast3M 2003 - All rights reserved.
Disclaimer