Télécharger @vecoul.procedur

Retour à la liste

Numérotation des lignes :

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

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