Télécharger trachis.procedur

Retour à la liste

Numérotation des lignes :

  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 '<nom_comp> <t = temps><nunit>'
  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.  
  288.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales