$$$$ TRACHIS * TRACHIS PROCEDUR CHAT 12/08/07 21:15:14 7481 ********************************************************************** 'DEBP' TRACHIS TAB2*'TABLE' NOMT*'MOT' LIGNE*'MAILLAGE' LIINDT/'LISTENTI' LIT/'LISTREEL' LICOMP/'LISTMOTS' LICOMP2/'LISTMOTS' TNOMCOMP/'TABLE' ; ********************************************************************** * * Pour une fonction (x,t) donnée et pour une ligne donnée, * on construit une table contenant les évolutions à différents * temps et différentes composantes. * ********************************************************************** * * Syntaxe : * --------- * * TAB1 = TRACHIS TAB2 MOT1 GEO1 ('PREF' MOT2) ('UNIT' MOT3 (FLOT1)) * * (| LENTI1 |) (LMOTS1) (| LMOTS2 |) ; * | LREEL1 | | TAB3 | * * ********************************************************************** * * Auteur : F. Auriol, TTMF (1998) * * ----------------------- * * Modifié : P. Maugis, MTMS 8 oct. 2004 * * ----------------------- * * Modifié : P. Maugis, LSCE le 07 août 2007 * - précision des noms humains de composantes par une table, * ce qui permet d'avoir plus de 4 caractères * - récupération de la liste des composantes d'après le dernier champ * fourni plutôt que le premier, qui est parfois bidon. * - recours à CONVT pour l'écriture avec unité de temps * ************************************************************************ * * Entrée : * -------- * * TAB2 : Table de données issue d'un calcul DARCY ou CHIMIE * contenant les indices 'TEMPS' et NOMT, * auxquels on trouve, aux indices entiers les temps et * le champ point que l'on souhaite explorer à ces temps-là. * * MOT1 : Nom de l'indice de TAB2 indiquant les CHPOs à suivre * (type MOT) * * GEO1 : MAILLAGE de la ligne (SEG2) selon laquelle visualiser * l'évolution en fonction du temps. * * MOT2 : Nom humain du champ (type MOT, Défaut = NOMT) * * LENTI1 : Liste des indices des temps à utiliser * (type LISTENTI, Défaut = tous) * * LREEL1 : Liste des temps à utiliser (Défaut = tous), doivent * correspondre à ceux de TAB2. * * LMOTS1 : Liste des composantes des chpos à utiliser (Défaut = toutes) * * LMOTS2 : Liste noms humains correspondants (Défaut = LICOMP) [ Obsolète * ou bien : * TAB3 : Table contenant, pour chaque indice entier de * composante, le nom humain correspondant (type MOT, * défaut = nom de la composante) * * MOT3 : Unité de temps à faire figurer en suffixe de légende * (facultatif, type MOT, possibles=us,ms,s,h,j,a), voir CONVT. * * FLOT1 : valeur en secondes de l'unité de temps dans laquelle * sont données les valeurs de TAB2.'TEMPS' (défaut=1) * * Sortie : * -------- * * Table contenant les évolutions le long de la ligne pour * différentes composantes et pour les différents temps. * Indicée par des entiers (indice de la ligne), elle contient pour * chaque cas une table à trois indices : * * . 'VALEUR' : L'évolution en fonction du temps le long de la ligne * pour la composante courante * . 'LEGEND1': Préfixe de la légende pour toutes les courbes * . 'LEGEND2': Suffixe de cette légende (variable) * ************************************************************************ * Vérifications d'usage : * ----------------------- 'SI' ( 'NON' ('EXISTE' TAB2 'TEMPS')) ; 'ERREUR' ' Il manque l indice TEMPS dans la table ' ; 'QUITTER' TRACHIS ; 'FINSI' ; 'SI' ( 'NON' ('EXISTE' TAB2 NOMT )) ; 'ERREUR' ('CHAINE' ' la table ne contient pas l indice ' NOMT ) ; 'QUITTER' TRACHIS ; 'FINSI' ; * Lecture des mots : nomt2 = 'MOT' nomt ; 'OUBLIER' nunit ; valunit = 1. ; 'REPETER' bcl1 ; 'ARGUMENT' MOT1/'MOT' ; 'SI' ('NON' ('EXISTE' mot1)) ; 'QUITTER' bcl1 ; 'FINSI' ; 'SI' ('EGA' MOT1 'UNIT') ; 'ARGUMENT' nunit*'MOT' ; 'ARGUMENT' FLOT1/'FLOTTANT' ; 'SI' ('EXISTE' FLOT1) ; valunit = FLOT1 ; 'FINSI' ; 'ITERER' bcl1 ; 'FINSI' ; 'SI' ('EGA' MOT1 'PREF') ; 'ARGUMENT' NOMT2*'MOT' ; 'ITERER' bcl1 ; 'FINSI' ; 'ERREUR' 'Mot' MOT1 'inconnu. On attend PREF ou UNIT' ; 'FIN' bcl1 ; * liste des couleurs : * -------------------- licoul = 'MOTS' 'DEFAUT' 'BLEU' 'ROUGE' 'ROSE' 'JAUNE' 'VERT' 'TURQ' 'AZUR' 'ORANGE' 'VIOLET' 'OCEAN' 'CYAN' 'OLIVE' 'GRIS'; nc = 'DIME' licoul ; * Initialisation liste des composantes * ------------------------------------ * Premier et dernier indices. * NBTP1 = Nb de temps dans la table donnée TBINDI = 'INDEX' ( TAB2.NOMT ) ; INDI0 = TBINDI . 1 ; NBTP1 = 'DIME' TBINDI ; INDIF = TBINDI . NBTP1 ; 'SI' ('EXISTE' LICOMP) ; NBCOMP = 'DIME' LICOMP ; 'SINON' ; LICOMP = 'EXTR' ( TAB2.NOMT. INDIF ) 'COMP' ; NBCOMP = 'DIME' LICOMP ; 'FINSI' ; * Initialisation légende de chaque composante (par défaut la composante) * ------------------------------------------- * Gestion (obsolètes) de la fourniture d'un LISTMOT, qui tronque * l'information aux 4 premières lettres 'SI' ('EXISTE' LICOMP2) ; 'SI'('EXISTE' TNOMCOMP) ; 'ERREUR' 'Double spécification des légendes de composantes' ; 'FINSI' ; 'SI' ('NEG' ('DIME' LICOMP2) NBCOMP) ; 'ERREUR' 'Mauvaise longueur liste des légendes de composantes' ; 'FINSI' ; TNOMCOMP= 'TABLE' ; 'REPETER' BOUB NBCOMP ; I = &BOUB ; TNOMCOMP.I = 'EXTR' LICOMP2 I ; 'FIN' BOUB ; 'SINON' ; LICOMP2 = LICOMP ; 'FINSI' ; * Gestion normale par table 'SI' ('NON' ('EXISTE' TNOMCOMP)) ; TNOMCOMP= 'TABLE' ; 'FINSI' ; 'REPETER' BOUB NBCOMP ; I = &BOUB ; 'SI' ('NON' ( 'EXISTE' TNOMCOMP I )) ; TNOMCOMP.I = 'EXTR' LICOMP I ; 'FINSI' ; 'FIN' BOUB ; * Initialisation liste des indices et des temps : * ----------------------------------------------- * NBTP2 = nombre de temps à prendre en compte. 'SI' ('EXISTE' LIINDT); * si on fournit une liste des indices, on construit la liste des * temps correspondants. NBTP2 = 'DIME' LIINDT ; LIT = 'PROG' ; 'REPETER' BOU7 NBTP2 ; J = &bou7 ; I = 'EXTR' LIINDT J ; LIT = LIT 'ET' ('PROG' TAB2.'TEMPS'.I) ; 'FIN' BOU7 ; 'SINON' ; 'SI' ('EXISTE' LIT); * si on fournit une liste des temps, on construit la liste des * indices correspondants : NBTP2 ='DIME' LIT ; LIINDT = 'LECT' ; 'REPETER' BOU8 NBTP2 ; J = &BOU8 ; VT = 'EXTR' LIT J ; 'REPETER' BOU9 NBTP1 ; I = &BOU9 ; III = TBINDI.I ; 'SI' (VT 'EGA' TAB2.'TEMPS'.III) ; 'QUITTER' BOU9 ; 'FINSI' ; 'FIN' BOU9 ; * si on ne l'a pas trouvé, erreur : 'SI' ('NEG' i &bou9); 'ERREUR' 'un temps donné ne correspond à aucun indice'; 'QUITTER' TRACHIT ; 'FINSI' ; LIINDT = LIINDT 'ET' ('LECT' III) ; 'FIN' BOU8 ; 'SINON' ; * on n'a donné ni liste d'indices, ni liste des temps, donc on * les prend tous par défaut. NBTP2 = NBTP1 ; LIINDT = 'LECT' ; LIT = 'PROG' ; 'REPETER' BOUA NBTP2 ; I = &boua ; I1 = TBINDI.I ; LIINDT = LIINDT 'ET' ('LECT' I1) ; LIT = LIT 'ET' ('PROG' (TAB2.'TEMPS'.I1)) ; 'FIN' BOUA ; 'FINSI' ; 'FINSI' ; * Création des listes de valeur du chpo pour chaque composante * ------------------------------------------------------------ * K est l'indice de l'évolution, IC est l'indice de la couleur attribuée. K = 0 ; TBR = 'TABLE' ; 'REPETER' BOU1 NBTP2 ; * pour chaque indice de temps à traiter : J = &BOU1 ; I = 'EXTR' LIINDT J ; 'REPETER' BOU2 NBCOMP ; * pour chaque composante du chpo L = &bou2 ; NOM5 = 'EXTR' LICOMP L ; * Choix de la couleur de l'évolution IC = (@MOD K nc) + 1 ; COUI = 'MOT' ('EXTR' licoul ic) ; * Construction de l'évolution ev1 = 'EVOL' COUI 'CHPO' (TAB2.NOMT.I) NOM5 LIGNE ; * on retire les commentaires éventuels de points (les petits taquets) : ev1 = 'EXTR' ev1 'COURBE' 1 ; * stockage K = K + 1 ; TBR.K = 'TABLE' ; TBR.K.'VALEUR' = ev1 ; * Légende de la courbe (apparaitra à droite) * se présente sous la forme ' ' tps = TAB2.'TEMPS'.I ; 'SI' ('EXISTE' nunit) ; NO3 = 'CHAINE' 't=' (CONVT (TPS*valunit) nunit); *tc la ligne suivante etait un FINSI! remplacement par un SINON 'SINON' ; NO3 = 'CHAINE' 't=' (CONVT (TPS*valunit)) ; 'FINSI' ; TBR.K.'LEGEND2' = 'MOT' NO3 ; NO2 = 'EXTR' LICOMP2 L ; 'SI' ('NEG' NO2 ' ') ; TBR.K.'LEGEND2' = 'CHAINE' NO2 ' ' TBR.K.'LEGEND2' ; 'FINSI' ; * Adjonction préfixe constant : TBR.K.'LEGEND1' = 'MOT' NOMT2 ; 'FIN' BOU2 ; 'FIN' BOU1 ; 'FINP' TBR ;