Télécharger @vecoul.procedur

Retour à la liste

Numérotation des lignes :

  1. * @VECOUL PROCEDUR GOUNAND 13/01/22 21:15:08 7678
  2. * @VECOUL PROCEDUR AG143209 10/09/29 21:15:01 6769
  3. * @VECOUL PROCEDUR AG143209 10/08/31 00:00:00 0000
  4. ************************************************************************
  5. * Procedure qui construit un objet VCTOT1 (type VECTEUR)
  6. * de couleur variable en fonction de sa norme
  7. * à partir d'un champs de vecteur CH1 (type CHPOINT).
  8. *
  9. * L'objet VCTOT1 est constitué de 10 sous-vecteurs de couleurs
  10. * 'VIOL' 'AZUR' 'BLEU' 'TURQ' 'OCEA' 'VERT' 'OLIV' 'JAUN' 'ORAN' 'ROUG'
  11. * qui correspondent a 10 intervalles de la plage de la norme
  12. * (échelle linéaire dans le sens croissant).
  13. *
  14. * Les composantes des sous-vecteurs de couleurs sont renommées pour
  15. * permettre l'affichage de la valeur moyenne de la norme du vecteur
  16. * associée à sa couleur lors du tracé graphique.
  17. *
  18. * Il est possible d'extraire un pourcentage (VRED1 x 100) %
  19. * (si VRED1 dans [0,1]) ou un nombre donné VRED1 (si VRED1 > 1) de ces
  20. * vecteurs : aléatoirement si MOT1 = ALTR, régulièrement sinon.
  21. *
  22. * Postraitement TRAC VCTOT1 MAILLAGE ;
  23. *
  24. * Syntaxe :
  25. * ---------
  26. * VCTOT1 = @VECOUL CH1 AMPL1 CH1 (LMOT1) (MOT1) (VRED1) ;
  27. *
  28. * Entrée :
  29. * ---------
  30. * CH1 : Champs de vecteur (type CHPOINT)
  31. * AMPL1 : Facteur d'amplification (FLOTTANT) OBLIGATOIRE
  32. * LMOT1 : Préciser les noms de composantes voulues (type LISTMOTS)
  33. * MOT1 : Extraction aléatoire si MOT1 = ALTR, régulière sinon
  34. * VRED1 : Pourcentage ([0,1]) ou nombre (>1) de vecteurs
  35. * extraits (type FLOTTANT)
  36. *
  37. * Sortie :
  38. * ---------
  39. * VCTOT1 : Vecteur (VECTEUR) composé de 10 sous-type vecteur de
  40. * différentes couleurs.
  41. *
  42. ************************************************************************
  43. * Remarques :
  44. * - Le facteur d'amplification AMPL1 est une entrée obligatoire
  45. * - Si VRED1 < 0., on extrait 100 %
  46. * - Extraire un faible pourcentage sur un petit nombre de
  47. * vecteurs peut fournir un résultat vide avec l'option
  48. * aléatoire (MOT1 = ALTR) alors qu'au moins 1 vecteurs par
  49. * couleur est extrait avec l'option régulière (gounand:
  50. * cette dernière remarque n'est plus valable.
  51. * 03/12/2012 : recodage et améliorations robustesse par S. Gounand
  52. * ajout LMOT1 et possibilité de donner le nombre de
  53. * vecteurs voulus, à la place du pourcentage.
  54. ************************************************************************
  55. 'DEBPROC' @VECOUL CH1*'CHPOINT' AMPL1*'FLOTTANT' ;
  56. vdim = 'VALEUR' 'DIME' ;
  57. 'SI' ('NON' ('DANS' ('LECT' vdim) ('LECT' 2 3))) ;
  58. cherr = 'CHAINE' 'This procedure only works in 2 or 3 dimensions' ;
  59. 'ERREUR' cherr ;
  60. 'FINSI' ;
  61. * Lecture des noms de composantes comme pour l'opérateur VECT
  62. 'ARGUMENT' LMOT1/'LISTMOTS' ;
  63. llmot = 'EXISTE' LMOT1 ;
  64. 'SI' llmot ;
  65. vmot = 'DIME' lmot1 ;
  66. 'SI' ('NEG' vmot vdim) ;
  67. cherr = 'CHAINE' 'The given LISTMOTS is not of dimension ' vdim ;
  68. 'ERREUR' cherr ;
  69. 'FINSI' ;
  70. 'FINSI' ;
  71. *
  72. 'ARGUMENT' MOT1/'MOT' VRED1/'FLOTTANT' ;
  73. * Tests lecture MOT1 et VRED1
  74. * Sinon options par defaut
  75. lred = 'EXISTE' vred1 ;
  76. 'SI' lred ;
  77. * Vérif
  78. lred = ('>EG' vred1 0.) ;
  79. 'FINSI' ;
  80. lalea = 'EGA' MOT1 'ALTR' ;
  81. * Extraction des noms des composantes de CH1 (2D ou 3D)
  82. 'SI' llmot ;
  83. LICP1 = LMOT1 ;
  84. 'SINON' ;
  85. * Problème potentiel si CH1 contient d'autres composantes que celles
  86. * de vitesses
  87. LICP1 = 'EXTRAIRE' CH1 'COMP' ;
  88. vlicp1 = 'DIME' LICP1 ;
  89. 'SI' ('NEG' vlicp1 vdim) ;
  90. cherr = 'CHAINE'
  91. 'The given CHPOINT hasnt got ' vdim ' component names.' ;
  92. 'LISTE' LICP1 ;
  93. 'ERREUR' cherr ;
  94. 'FINSI' ;
  95. 'FINSI' ;
  96. * Calcul de la norme
  97. N2 = 'PSCA' CH1 CH1 LICP1 LICP1 ;
  98. N1 = '**' N2 0.5 ;
  99. * Extraction min max de la norme
  100. MINI1 = 'MINI' N1 ;
  101. MAXI1 = 'MAXI' N1 ;
  102. * Pas de decoupage de la norme pour les couleurs (10)
  103. * Attention si MINI1=MAXI1 LPAS ne sera que de dimension 2...
  104. DNN1 = (MAXI1 '-' MINI1) '/' 10.D0 ;
  105. LPAS = 'PROG' MINI1 'PAS' DNN1 MAXI1 ;
  106. *'LISTE' lpas ;
  107. *
  108. * Table des couleurs de la norme
  109. * de la valeur mini (Violet) a la valeur maxi (Rouge)
  110. TAB1 = 'TABLE' ;
  111. TAB1 . 1 = 'MOT' 'VIOL' ;
  112. TAB1 . 2 = 'MOT' 'AZUR' ;
  113. TAB1 . 3 = 'MOT' 'BLEU' ;
  114. TAB1 . 4 = 'MOT' 'TURQ' ;
  115. TAB1 . 5 = 'MOT' 'OCEA' ;
  116. TAB1 . 6 = 'MOT' 'VERT' ;
  117. TAB1 . 7 = 'MOT' 'OLIV' ;
  118. TAB1 . 8 = 'MOT' 'JAUN' ;
  119. TAB1 . 9 = 'MOT' 'ORAN' ;
  120. TAB1 . 10 = 'MOT' 'ROUG' ;
  121. *
  122. * Réduction éventuelle du champ
  123. *
  124. geop1 = 'EXTRAIRE' N1 'MAIL' ;
  125. nnoe = 'NBEL' geop1 ;
  126. *debug 'MESSAGE' ('CHAINE' 'nbno=' nnoe) ;
  127. 'SI' lred ;
  128. 'SI' ('&lt;EG' vred1 1.5D0) ;
  129. nncib = 'ENTIER' ('+' ('*' nnoe vred1) 0.5) ;
  130. 'SINON' ;
  131. nncib = 'ENTIER' ('+' vred1 0.5) ;
  132. 'FINSI' ;
  133. *debug 'MESSAGE' ('CHAINE' 'nbno cible=' nncib) ;
  134. nncib = 'MINIMUM' ('LECT' nnoe nncib) ;
  135. vred1f = '/' ('FLOTTANT' nncib) ('FLOTTANT' nnoe) ;
  136. *debug 'MESSAGE' ('CHAINE' 'vred1f=' vred1f) ;
  137. 'SI' lalea ;
  138. resu1 = 'BRUI' 'BLAN' 'UNIF' 0.5 0.5 geop1 ;
  139. geop1 = 'POINT' RESU1 'EGSUPE' ('-' 1. VRED1F) ;
  140. 'SINON' ;
  141. vpas = '/' ('FLOTTANT' nnoe) ('FLOTTANT' nncib) ;
  142. lelem1 = 'ENTIER' ('PROG' 1.5 'PAS' vpas 'NPAS' ('-' nncib 1)) ;
  143. geop1 = 'ELEM' geop1 lelem1 ;
  144. 'FINSI' ;
  145. N1 = 'REDU' N1 geop1 ;
  146. CH1 = 'REDU' CH1 geop1 ;
  147. 'FINSI' ;
  148. nred = 'NBEL' geop1 ;
  149. *debug 'MESSAGE' ('CHAINE' 'nbno apres red=' nred) ;
  150. *
  151. VCTOT1 = 'VIDE' 'VECTEUR' ;
  152. nnotot = 0 ;
  153. * Boucle de decoupage (10 couleurs ou 2 si MAXI1=MINI1)
  154. *NBOU1 = 10 ;
  155. NBOU1 = '-' ('DIME' LPAS) 1 ;
  156. 'REPETER' BOU1 NBOU1 ;
  157. INDI1 = &BOU1 ;
  158. BAS1 = 'EXTRAIRE' LPAS INDI1 ;
  159. SUP1 = 'EXTRAIRE' LPAS ('+' INDI1 1) ;
  160. MAILN1 = 'EXTRAIRE' N1 'MAIL' ;
  161. MAIL1 = 'POIN' N1 'EGINFE' SUP1 ;
  162. nmail1 = 'NBEL' MAIL1 ;
  163. *debug 'MESSAGE' ('CHAINE' 'nbno bou1=' INDI1 ' mail1=' nmail1) ;
  164. nnotot = '+' nnotot nmail1 ;
  165. mred = 'DIFF' MAIL1 MAILN1 ;
  166. N1 = 'REDU' N1 mred ;
  167. * Norme moyenne de la couleur pour trace
  168. MOY1 = (SUP1 + BAS1) * 0.5D0 ;
  169. * Extraction de la valeur de la norme (sans exposant) pour trace
  170. fMOY1 = 'CHAIN' 'FORMAT' '(1pE8.2)' MOY1 ;
  171. fMOY1_1 = 'EXTRAIRE' fMOY1 1 4 ;
  172. fMOY1_2 = 'EXTRAIRE' fMOY1 5 8 ;
  173. CHM1 = 'REDU' CH1 MAIL1 ;
  174. * Changement du nom des composantes pour afficher la valeur de la norme
  175. 'SI' ('EGA' vdim 3) ;
  176. LIST2 = 'MOTS' fMOY1_1 fMOY1_2 ' ' ;
  177. 'SINON' ;
  178. LIST2 = 'MOTS' fMOY1_1 fMOY1_2 ;
  179. 'FINSI' ;
  180. CHM2 = 'NOMC' LICP1 LIST2 CHM1 ;
  181. * Fabrication vecteur élémentaire de couleur TAB1.INDI1
  182. VCW1 = 'VECT' CHM2 AMPL1 LIST2 (TAB1 . INDI1) ;
  183. * Assemblage vecteur total
  184. VCTOT1 = VCTOT1 ET VCW1 ;
  185. 'FIN' BOU1 ;
  186. *debug 'MESSAGE' ('CHAINE' 'nnotot=' nnotot) ;
  187. 'SI' ('NEG' nnotot nred) ;
  188. 'ERREUR' 5 ;
  189. 'FINSI' ;
  190. *
  191. 'FINPROC' VCTOT1 ;
  192. *
  193. ********************************************************************
  194.  
  195.  
  196.  
  197.  
  198.  

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