Download trachis.procedur

Back to the list

   1 : * TRACHIS   PROCEDUR  CHAT      12/08/07    21:15:14     7481           
   2 : **********************************************************************
   3 : 'DEBP' TRACHIS
   4 :        TAB2*'TABLE' NOMT*'MOT' LIGNE*'MAILLAGE'
   5 :        LIINDT/'LISTENTI' LIT/'LISTREEL' LICOMP/'LISTMOTS'
   6 :        LICOMP2/'LISTMOTS' TNOMCOMP/'TABLE' ;
   7 : 
   8 : **********************************************************************
   9 : *
  10 : *  Pour une fonction (x,t) donnée et pour une ligne donnée,
  11 : *  on construit une table contenant les évolutions à différents
  12 : *  temps et différentes composantes.
  13 : *
  14 : **********************************************************************
  15 : *
  16 : *  Syntaxe :
  17 : *  ---------
  18 : *
  19 : *    TAB1 = TRACHIS TAB2 MOT1 GEO1 ('PREF' MOT2) ('UNIT' MOT3 (FLOT1))
  20 : *
  21 : *                   (| LENTI1 |) (LMOTS1) (| LMOTS2 |)  ;
  22 : *                    | LREEL1 |            | TAB3   |
  23 : *
  24 : *
  25 : **********************************************************************
  26 : *
  27 : *  Auteur : F. Auriol, TTMF (1998)
  28 : *
  29 : * -----------------------
  30 : *
  31 : *  Modifié : P. Maugis, MTMS 8 oct. 2004
  32 : *
  33 : * -----------------------
  34 : *
  35 : *  Modifié : P. Maugis, LSCE le 07 août 2007
  36 : *    - précision des noms humains de composantes par une table,
  37 : *      ce qui permet d'avoir plus de 4 caractères
  38 : *    - récupération de la liste des composantes d'après le dernier champ
  39 : *      fourni plutôt que le premier, qui est parfois bidon.
  40 : *    - recours à CONVT pour l'écriture avec unité de temps
  41 : *
  42 : ************************************************************************
  43 : *
  44 : *  Entrée :
  45 : *  --------
  46 : *
  47 : *      TAB2     : Table de données issue d'un calcul DARCY ou CHIMIE
  48 : *                 contenant les indices 'TEMPS' et NOMT,
  49 : *                 auxquels on trouve, aux indices entiers les temps et
  50 : *                 le champ point que l'on souhaite explorer à ces temps-là.
  51 : *
  52 : *      MOT1     : Nom de l'indice de TAB2 indiquant les CHPOs à suivre
  53 : *                 (type MOT)
  54 : *
  55 : *      GEO1     : MAILLAGE de la ligne (SEG2) selon laquelle visualiser
  56 : *                 l'évolution en fonction du temps.
  57 : *
  58 : *      MOT2     : Nom humain du champ (type MOT, Défaut = NOMT)
  59 : *
  60 : *      LENTI1   : Liste des indices des temps à utiliser
  61 : *                 (type LISTENTI, Défaut = tous)
  62 : *
  63 : *      LREEL1   : Liste des temps à utiliser (Défaut = tous), doivent
  64 : *                 correspondre à ceux de TAB2.
  65 : *
  66 : *      LMOTS1   : Liste des composantes des chpos à utiliser (Défaut = toutes)
  67 : *
  68 : *      LMOTS2   : Liste noms humains correspondants (Défaut = LICOMP) [ Obsolète
  69 : *                 ou bien :
  70 : *      TAB3     : Table contenant, pour chaque indice entier de
  71 : *                 composante, le nom humain correspondant (type MOT,
  72 : *                 défaut = nom de la composante)
  73 : *
  74 : *      MOT3     : Unité de temps à faire figurer en suffixe de légende
  75 : *                 (facultatif, type MOT, possibles=us,ms,s,h,j,a), voir CONVT.
  76 : *
  77 : *      FLOT1    : valeur en secondes de l'unité de temps dans laquelle
  78 : *                 sont données les valeurs de TAB2.'TEMPS' (défaut=1)
  79 : *
  80 : *  Sortie :
  81 : *  --------
  82 : *
  83 : *    Table contenant les évolutions le long de la ligne pour
  84 : *    différentes composantes et pour les différents temps.
  85 : *    Indicée par des entiers (indice de la ligne), elle contient pour
  86 : *    chaque cas une table à trois indices :
  87 : *
  88 : *      . 'VALEUR' : L'évolution en fonction du temps le long de la ligne
  89 : *                   pour la composante courante
  90 : *      . 'LEGEND1': Préfixe de la légende pour toutes les courbes
  91 : *      . 'LEGEND2': Suffixe de cette légende (variable)
  92 : *
  93 : ************************************************************************
  94 : 
  95 : *  Vérifications d'usage :
  96 : *  -----------------------
  97 :    'SI' ( 'NON' ('EXISTE' TAB2 'TEMPS')) ;
  98 :       'ERREUR' ' Il manque l indice TEMPS dans la table ' ;
  99 :       'QUITTER' TRACHIS ;
 100 :    'FINSI' ;
 101 :    'SI' ( 'NON' ('EXISTE' TAB2 NOMT )) ;
 102 :       'ERREUR' ('CHAINE' ' la table ne contient pas l indice ' NOMT ) ;
 103 :       'QUITTER' TRACHIS ;
 104 :    'FINSI' ;
 105 : 
 106 : *  Lecture des mots :
 107 :    nomt2 = 'MOT' nomt ;
 108 :    'OUBLIER' nunit ;
 109 :    valunit = 1. ;
 110 :    'REPETER' bcl1 ;
 111 :       'ARGUMENT' MOT1/'MOT' ;
 112 :       'SI' ('NON' ('EXISTE' mot1)) ;
 113 :          'QUITTER' bcl1 ;
 114 :       'FINSI' ;
 115 :       'SI' ('EGA' MOT1 'UNIT') ;
 116 :          'ARGUMENT' nunit*'MOT' ;
 117 :          'ARGUMENT' FLOT1/'FLOTTANT' ;
 118 :          'SI' ('EXISTE' FLOT1) ;
 119 :             valunit = FLOT1 ;
 120 :          'FINSI' ;
 121 :          'ITERER' bcl1 ;
 122 :       'FINSI' ;
 123 :       'SI' ('EGA' MOT1 'PREF') ;
 124 :          'ARGUMENT' NOMT2*'MOT' ;
 125 :          'ITERER' bcl1 ;
 126 :       'FINSI' ;
 127 :       'ERREUR' 'Mot' MOT1 'inconnu. On attend PREF ou UNIT' ;
 128 :    'FIN' bcl1 ;
 129 : 
 130 : *  liste des couleurs :
 131 : *  --------------------
 132 :    licoul = 'MOTS' 'DEFAUT' 'BLEU' 'ROUGE' 'ROSE' 'JAUNE' 'VERT' 'TURQ'
 133 :                  'AZUR' 'ORANGE' 'VIOLET' 'OCEAN' 'CYAN' 'OLIVE' 'GRIS';
 134 :    nc     = 'DIME' licoul ;
 135 : 
 136 : *  Initialisation liste des composantes
 137 : *  ------------------------------------
 138 : *  Premier et dernier indices.
 139 : *  NBTP1 = Nb de temps dans la table donnée
 140 :    TBINDI = 'INDEX' ( TAB2.NOMT ) ;
 141 :    INDI0  = TBINDI . 1 ;
 142 :    NBTP1  = 'DIME' TBINDI ;
 143 :    INDIF  = TBINDI . NBTP1 ;
 144 : 
 145 :    'SI' ('EXISTE' LICOMP) ;
 146 :       NBCOMP = 'DIME' LICOMP ;
 147 :    'SINON' ;
 148 :       LICOMP = 'EXTR' ( TAB2.NOMT. INDIF ) 'COMP' ;
 149 :       NBCOMP = 'DIME' LICOMP ;
 150 :    'FINSI' ;
 151 : 
 152 : *  Initialisation légende de chaque composante (par défaut la composante)
 153 : *  -------------------------------------------
 154 : *  Gestion (obsolètes) de la fourniture d'un LISTMOT, qui tronque
 155 : *  l'information aux 4 premières lettres
 156 :    'SI' ('EXISTE' LICOMP2) ;
 157 :       'SI'('EXISTE' TNOMCOMP) ;
 158 :          'ERREUR' 'Double spécification des légendes de composantes' ;
 159 :       'FINSI' ;
 160 :      'SI' ('NEG' ('DIME' LICOMP2) NBCOMP) ;
 161 :        'ERREUR' 'Mauvaise longueur liste des légendes de composantes' ;
 162 :      'FINSI' ;
 163 : 
 164 :       TNOMCOMP= 'TABLE' ;
 165 :       'REPETER' BOUB NBCOMP ;
 166 :          I = &BOUB ;
 167 :          TNOMCOMP.I = 'EXTR' LICOMP2 I ;
 168 :       'FIN' BOUB ;
 169 :    'SINON' ;
 170 :       LICOMP2 = LICOMP ;
 171 :    'FINSI' ;
 172 : 
 173 : *  Gestion normale par table
 174 :    'SI' ('NON' ('EXISTE' TNOMCOMP)) ;
 175 :       TNOMCOMP= 'TABLE' ;
 176 :    'FINSI' ;
 177 :    'REPETER' BOUB NBCOMP ;
 178 :       I = &BOUB ;
 179 :       'SI' ('NON' ( 'EXISTE' TNOMCOMP  I )) ;
 180 :          TNOMCOMP.I = 'EXTR' LICOMP I ;
 181 :       'FINSI' ;
 182 :    'FIN' BOUB ;
 183 : 
 184 : *  Initialisation liste des indices et des temps :
 185 : *  -----------------------------------------------
 186 : *  NBTP2 = nombre de temps à prendre en compte.
 187 :    'SI' ('EXISTE' LIINDT);
 188 : *     si on fournit une liste des indices, on construit la liste des
 189 : *     temps correspondants.
 190 :       NBTP2   = 'DIME' LIINDT ;
 191 :       LIT     = 'PROG'  ;
 192 :       'REPETER' BOU7 NBTP2 ;
 193 :          J    = &bou7 ;
 194 :          I    = 'EXTR' LIINDT J ;
 195 :          LIT  = LIT 'ET' ('PROG' TAB2.'TEMPS'.I) ;
 196 :       'FIN' BOU7 ;
 197 :    'SINON'  ;
 198 :       'SI' ('EXISTE' LIT);
 199 : *        si on fournit une liste des temps, on construit la liste des
 200 : *        indices correspondants :
 201 :          NBTP2   ='DIME' LIT ;
 202 :          LIINDT  = 'LECT' ;
 203 :          'REPETER' BOU8 NBTP2 ;
 204 :             J  = &BOU8 ;
 205 :             VT = 'EXTR' LIT J ;
 206 :             'REPETER' BOU9 NBTP1 ;
 207 :                I   = &BOU9 ;
 208 :                III = TBINDI.I ;
 209 :                'SI' (VT 'EGA' TAB2.'TEMPS'.III) ;
 210 :                   'QUITTER' BOU9 ;
 211 :                'FINSI' ;
 212 :             'FIN' BOU9 ;
 213 : *           si on ne l'a pas trouvé, erreur :
 214 :             'SI' ('NEG' i &bou9);
 215 :                'ERREUR' 'un temps donné ne correspond à aucun indice';
 216 :                'QUITTER' TRACHIT ;
 217 :             'FINSI' ;
 218 :             LIINDT  = LIINDT 'ET' ('LECT' III) ;
 219 :          'FIN' BOU8 ;
 220 :       'SINON' ;
 221 : *        on n'a donné ni liste d'indices, ni liste des temps, donc on
 222 : *        les prend tous par défaut.
 223 :          NBTP2   = NBTP1 ;
 224 :          LIINDT  = 'LECT' ;
 225 :          LIT     = 'PROG' ;
 226 :          'REPETER' BOUA NBTP2 ;
 227 :             I       = &boua ;
 228 :             I1      = TBINDI.I ;
 229 :             LIINDT  = LIINDT 'ET' ('LECT' I1) ;
 230 :             LIT     = LIT 'ET' ('PROG' (TAB2.'TEMPS'.I1)) ;
 231 :          'FIN' BOUA ;
 232 :       'FINSI' ;
 233 :    'FINSI' ;
 234 : 
 235 : *  Création des listes de valeur du chpo pour chaque composante
 236 : *  ------------------------------------------------------------
 237 : *  K est l'indice de l'évolution, IC est l'indice de la couleur attribuée.
 238 :    K  = 0 ;
 239 :    TBR = 'TABLE' ;
 240 :    'REPETER' BOU1 NBTP2 ;
 241 : *     pour chaque indice de temps à traiter :
 242 :       J = &BOU1 ;
 243 :       I = 'EXTR' LIINDT J ;
 244 : 
 245 :       'REPETER' BOU2 NBCOMP ;
 246 : *        pour chaque composante du chpo
 247 :          L     = &bou2 ;
 248 :          NOM5  = 'EXTR' LICOMP L ;
 249 : 
 250 : *        Choix de la couleur de l'évolution
 251 :          IC    = (@MOD K nc) + 1 ;
 252 :          COUI  = 'MOT' ('EXTR' licoul ic) ;
 253 : 
 254 : *        Construction de l'évolution
 255 :          ev1   = 'EVOL' COUI 'CHPO' (TAB2.NOMT.I) NOM5 LIGNE ;
 256 : *        on retire les commentaires éventuels de points (les petits taquets) :
 257 :          ev1   = 'EXTR' ev1 'COURBE' 1 ;
 258 : 
 259 : *        stockage
 260 :          K     = K + 1 ;
 261 :          TBR.K = 'TABLE' ;
 262 :          TBR.K.'VALEUR' = ev1 ;
 263 : 
 264 : *        Légende de la courbe (apparaitra à droite)
 265 : *        se présente sous la forme ' '
 266 :          tps   = TAB2.'TEMPS'.I ;
 267 :          'SI' ('EXISTE' nunit) ;
 268 :             NO3 = 'CHAINE' 't=' (CONVT (TPS*valunit) nunit);
 269 : *tc la ligne suivante etait un FINSI! remplacement par un SINON
 270 :          'SINON' ;
 271 :             NO3 = 'CHAINE' 't=' (CONVT (TPS*valunit)) ;
 272 :          'FINSI' ;
 273 :          TBR.K.'LEGEND2' = 'MOT' NO3 ;
 274 :          NO2   = 'EXTR' LICOMP2 L ;
 275 :          'SI' ('NEG' NO2 '    ') ;
 276 :             TBR.K.'LEGEND2' = 'CHAINE' NO2 ' ' TBR.K.'LEGEND2' ;
 277 :          'FINSI' ;
 278 : 
 279 : *        Adjonction préfixe constant :
 280 :          TBR.K.'LEGEND1' = 'MOT' NOMT2 ;
 281 :          
 282 :       'FIN' BOU2 ;
 283 :    'FIN' BOU1 ;
 284 : 
 285 : 'FINP' TBR ;
 286 :  
 287 :  

© Cast3M 2003 - All rights reserved.
Disclaimer