1 #!\bin/sh -e
  2 
  3 
  4 #====================================================
  5 # TP5 : les chemins et l'information qu'ils portent #
  6 #====================================================
  7 
  8 # Voir le TP1 pour la prise en main du système d'exploitation EDIX.
  9 # Les commandes suivantes sont identiques à celles du début du TP1.
 10 
 11 . /home/lafrier/star-build/local/etc/stardis.profile
 12 mkdir TP5
 13 cd TP5
 14 
 15 # Ce TP porte sur les chemins et les différentes informations qu'ils portent
 16 
 17 
 18 #=============================================================
 19 # TP5 - Partie 1 : les chemins permettent l'analyse physique #
 20 #=============================================================
 21 #
 22 #
 23 # Partie 1.1 : visualisation des chemins
 24 # --------------------------------------
 25 #
 26 # On reprend les images infrarouges du papier [Bati2023]. Il s'agit de deux
 27 # fermes, dont l'une possède une isolation par l'intérieur, et l'autre par
 28 # l'extérieur.
 29 
 30 feh ${DEMONSTRATEUR_2}/Figures/tp5_isolation_1_970x824x3000.png
 31 feh ${DEMONSTRATEUR_2}/Figures/tp5_isolation_2_970x824x3000.png
 32 
 33 # Etes-vous capable de déterminer laquelle correspond à quelle isolation ?
 34 
 35 # Pas de panique si vous n'êtes pas thermicien :
 36 # visualiser les chemins va vous aider à répondre à cette question !
 37 # Les chemins permettre l'interprêtation physique.
 38 
 39 ls ${DEMONSTRATEUR_2}/data/ferme_roffiac
 40 
 41 # Beaucoup de stl pour décrire ces deux scènes. Seuls les paramètres dans
 42 # les fichiers interieur.txt et exterieur.txt sont changés.
 43 
 44 diff ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_interieure.txt \
 45   ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_exterieure.txt
 46 
 47 # On voit que les propriétés physiques des murs sont différentes dans les
 48 # deux cas.
 49 
 50 # On va maintenant ouvrir la scène sous Paraview, soit à l'aide du script
 51 # suivant ou bien avec la procédure ci-après :
 52 
 53 paraview ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/paraview_open_scene.py &
 54 
 55 # Sous EDIX, Vous pouvez agrandir la fenêtre en faisant "Alt + H" ou "Alt + L".
 56 
 57 # Alternative :
 58 # paraview
 59 # File > open > sélectionner l'ensemble des fichiers commençant par S_ du
 60 #   dossier ${DEMONSTRATEUR_2}/data/ferme_roffiac (ce sont les solides).
 61 # Cliquer sur "Apply"
 62 # Par interaction avec la souris, faire bouger la caméra pour dezoomer, par
 63 # exemple.
 64 # Pour chacun des éléments, on va les rendre transparents pour voir dans la
 65 # maison :
 66 #  - S_mur_ext
 67 #  - S_mur_milieu
 68 #  - S_mur_int
 69 # Cliquer sur l'élément dans l'onglet "Pipeline Browser".
 70 # Dans les "Properties", changer la coloration de "STLSolidLabelling" vers
 71 # "Solid Color".
 72 # Dans "Display (Geometry Representation", régler l'opacité vers 0.2.
 73 
 74 # Vous visualisez l'intérieur de la maison, composée de deux pièces avec un
 75 # radiateur dans la pièce en bas. Il y a trois épaisseurs de murs dont seul
 76 # les bords sont affichés par souci de visualisation.
 77 # Dans les descriptions physiques du système, deux épaisseurs de mur auront
 78 # les mêmes propriétés et le dernier mur sera l'isolant.
 79 
 80 # Comme dans le TP1, vous allez maintenant générer puis visualiser des chemins
 81 # qui basculent d'un mode de tranfert thermique à un autre.
 82 
 83 # D'abord, on génère des chemins dans le système isolé par l'intérieur :
 84 
 85 mkdir chemins_isolation_interieure
 86 cd chemins_isolation_interieure
 87 stardis -M ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_interieure.txt \
 88   -p 0,0,1.5 -n 60 -e -D all,chemin_
 89 
 90 # Voir que des fichiers vtk décrivant les chemins ont été produits :
 91 
 92 ls
 93 
 94 # Idem pour l'isolation par l'extérieur :
 95 
 96 cd ..
 97 mkdir chemins_isolation_exterieure
 98 cd chemins_isolation_exterieure
 99 stardis -M ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_exterieure.txt \
100   -p 0,0,1.5 -n 60 -e -D all,chemin_
101 
102 # Dans paraview, charger quelques chemins pour les visualiser :
103 # File > Open
104 # Sélectionner le(s) chemin(s) dans l'arborescence
105 # Cliquer sur  le bouton "Apply" à gauche
106 
107 # Les chemins servent à estimer la température au niveau du point sonde placé
108 # au centre de la pièce du bas. Les chemins partent donc de cette position.
109 # Ils s'arrêtent sur l'une des sources :
110 #  - le radiateur à température imposée,
111 #  - la face du dessous du sol dont la température est imposé,
112 #  - l'environnement : avec une température radiative imposée et une
113 #    température de fluide connue.
114 # Les différentes couleurs du chemins indiquent les modes de transfert
115 # thermique.
116 # Attention, dans le cas de la convection, la visualisation par une ligne
117 # droite n'est pas la plus adaptée. En effet, lorsque le chemin part en
118 # convection, on réalise un échantillonnage uniforme d'une position sur la
119 # cavité, ainsi qu'un tirage d'une durée.
120 
121 # On va maintenant visualiser ces chemins grâce à des images. On reproduit ici
122 # les résultats du papier Siggraph 2023.
123 
124 cd ..
125 echo "Les scripts suivants vont lancer puis fermer des fenêtres paraview."
126 echo "Sous EDIX, pour que l'image ait la bonne forme, il faut basculer" \
127   "l'environnement de bureau en mode flottant."
128 echo ">>> C'est-à-dire : cliquer sur le symbole" \
129   "\"[]=\" pour qu'il devienne \"><>\"."
130 
131 pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
132   --data chemins_isolation_interieure/ --interior \
133   --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ --path_indices $( seq 5 )
134 mv iso_interieure.png iso_interieure_peu_chemins.png
135 feh iso_interieure_peu_chemins.png
136 
137 pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
138   --data chemins_isolation_interieure/ --interior \
139   --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ --path_indices $( seq 59 )
140 mv iso_interieure.png iso_interieure_tous_chemins.png
141 feh iso_interieure_tous_chemins.png
142 
143 pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
144   --data chemins_isolation_exterieure/ --exterior \
145   --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ --path_indices $( seq 5 )
146 mv iso_exterieure.png iso_exterieure_peu_chemins.png
147 feh iso_exterieure_peu_chemins.png
148 
149 pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
150   --data chemins_isolation_exterieure/ --exterior \
151   --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ --path_indices $( seq 59 )
152 mv iso_exterieure.png iso_exterieure_tous_chemins.png
153 feh iso_exterieure_tous_chemins.png
154 
155 # Donner dans l'énoncé les analyses qu'on peut faire en visualisant ces chemins.
156 # TODO: les lister ici en attendant.
157 # Vous pouvez fermer paraview.
158 
159 
160 #==============================================================
161 # Partie 1.2 : animation temporelle des chemins avec paraview #
162 #==============================================================
163 
164 # Pour réaliser des animations temporelles, il faut que les fichiers vtk
165 # décrivant les chemins portent de l'information temporelle sur les sommets.
166 # Pour cela, il faut exécuter stardis en renseignant un temps d'observation
167 # (pas au stationnaire).
168 
169 stardis -M ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_interieure.txt \
170   -p 0,0,1.5,10000 -n 20 -e -D all,chemin_
171 
172 # On va maintenant réaliser l'animation temporelle des chemins.
173 # Cela peut prendre un peu de temps avant de vous redonner la main.
174 
175 pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
176   --data . --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ \
177   --path_indices 15 --interior --animation
178 
179 # Jouer la simulation à la main :
180 
181 feh images_animation/*
182 
183 # Utiliser les flèches (droite et gauche) pour jouer le temps.
184 
185 # Attention, comme déjà dit, il y a un souci de représentation de la convection.
186 
187 # TODO: note aux développeurs du TP :
188 # La convection impacte le calcul des temps min et max, donc du pas de temps
189 # global. On peut difficilement s'appuyer sur ce critère pour déterminer le
190 # nombre d'images. Il faudrait faire en sorte que deux images successives
191 # affichent les positions avant / après convection.
192 
193 
194 #=================================================================
195 # TP4 - Partie 2 : estimation de sensibilité le long des chemins #
196 #=================================================================
197 
198 # TODO
199 # On dit que les calculs de sensibilités sont hyper importants, avec des
200 # thèses en entier sur ce sujet. Principe : utilisation du même chemin pour
201 # porter de nouvelles informations. Quelques explications.
202 # Voir la thèse de Nada pour plus de détails.
203 # Or ce n'est pas dans le stardis actuel (à l'heure où ce TP est écrit).
204 # On va donc hacker Stardis pour cela !
205 
206 # On ne commente pas le hack, on fait passer le message que hacker c'est
207 # facile !
208 
209 # Annonce de principe : Amaury
210 # Exercice : refaire les maths pour dériver la sensibilité à la température
211 # (pour le propagateur ensuite) puis la sensibilité à h.
212 # Recopier les lignes de code qui sont dans la thèse pour vérification.
213 # Vidéo de Nada qui fait une lecture commentée de cette partie de sa thèse
214 # (Nada redit ce qui a été dit avant, elle lit sa thèse).
215 
216 
217 #================================================
218 # TP4 - Partie 3 : propagateur au sens de Green #
219 #================================================
220 
221 # TODO
222 # Donner une explication du concept dans l'énoncé du TP.
223 # On peut donc réaliser une simulation de MC et sauvegarder l'identifiant des
224 # sources atteintes en fin de chemin. Ca nous donne des porportions des chemins
225 # ayant atteint une certaine source. Une fois le calcul achevé, on peut changer
226 # la valeur de température associée à cette source pour recalculer la
227 # température du point sonde par exemple.
228 
229 # Partie 3.1 : version officielle avec star-green
230 # -----------------------------------------------
231 
232 mkdir propagateur
233 cd propagateur
234 
235 # Calcul du propagateur :
236 
237 stardis -M  ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_interieure.txt \
238   -p 0,0,1.5,10000 -n 10000 -G resultat.green
239 
240 # Observer que resultat.green a été créé :
241 
242 ls
243 
244 # Que faire avec ce propagateur ?
245 
246 man sgreen
247 
248 # On a deux exemples d'appels à cet exécutable dans la partie "EXAMPLES" de
249 # la documentation.
250 
251 # Le premier nous permet d'identifier la contribution de chaque source :
252 
253 sgreen -g resultat.green -s resultat.html
254 firefox-bin resultat.html &
255 
256 # Sous EDIX, firefox s'ouvre dans l'onglet 9.
257 # Comment lire ce fichier ?
258 #  - List of variables
259 #    D'abord des informations sur les sources dans la scène (température
260 #    initiales, températures imposées) vs les variables qui n'en sont pas.
261 #  - Formula of the Monte-Carlo estimate
262 #    L'expression de la température comme une espérance faisant intervenir
263 #    ces sources (on y retrouve les proportions de chemins ayant atteint
264 #    chacune de ces sources repérées en gras).
265 #    Ici vous observez que la température estimée est 293.924K.
266 #  - Counts, etc
267 #    On a ensuite une description de la scène utilisée pour générer la green.
268 
269 # Deuxième exemple : on veut maintenant changer les températures de certaines
270 # sources dans le système. Ici on prend l'exemple la température du radiateur.
271 # On a vu tout à l'heure dans le man qu'il faut spécifier ces nouvelles
272 # valeurs de sources dans un fichier. Son format est décrit dans la doc
273 # suivante :
274 
275 man sgreen-input
276 
277 # Là encore, vous retrouvez la mécanique des grammaires, comme dans le TP1.
278 # On vous fourni un exemple où on change la température du radiateur.
279 
280 echo "RADIATEUR.T=290" > maison_change_radiateur.txt
281 cat maison_change_radiateur.txt
282 sgreen -g resultat.green -a maison_change_radiateur.txt
283 
284 # on voit que la température est plus faible ! (286.962K contre 293.924K)
285 # Vous noterez la rapidité du calcul par rapport à relancer un calcul
286 # Monte-Carlo complet !
287 # Un point d'attention, c'est la taille de ce fichier.
288 
289 # TODO
290 # Parler d'espace mémoire, pour montrer la question de recherche : que doit-on
291 # stocker ?
292 # Attention, il y a les informations nécessaires en théorie et la pratique
293 # dans sgreen.
294 
295 # Exercice : 
296 # En vous aidant du manuel, changez maintenant la température radiative de
297 # l'environnement. Vous ne devriez voir aucun changement : pourquoi ?
298 
299 # La correction est "cachée" à la fin du fichier
300 
301 # TODO
302 # Futur exercice : faire la même chose en variant cette fois un flux.
303 # Problème : il n'y a pas de flux imposé dans la scène pour le moment.
304 # echo "XXXXX.VP=XXXX" > maison_change_puissance_volumique.txt
305 # cat maison_change_puissance_volumique.txt
306 # sgreen -g resultat.green -a maison_change_radiateur.txt
307 
308 
309 
310 # Partie 3.2 : version interactive
311 # --------------------------------
312 
313 # Pour la version interactive, on bascule sur une version hackée de stardis.
314 
315 # Ce code implémente le propagateur au sens de green sur une image (qui
316 # n'était pas dans la version officielle de stardis à ce moment là).
317 # Il permet aussi de changer a posteriori le temps d'observation, ce qui
318 # n'entre pas dans le cadre "du propagateur au sens de Green", c'est une autre
319 # idée. Afin de stocker moins d'informations sur les chemins dans ce cas, des
320 # contraintes additionnelles sont ajoutées : aucun flux imposé, aucune
321 # puissance volumique, température initiale homogène.
322 
323 # On va donc utiliser un code spécifique,
324 
325 echo "Ouvrir un nouveau terminal (Alt + Entrée sous EDIX)" \
326   "par exemple dans un nouveau bureau"
327 . ${DEMONSTRATEUR_2}/libs/code_siggraph2023/local/etc/stardis.profile
328 echo "Se déplacer dans le répertoire souhaité via la commande \"cd\""
329 adresse="${DEMONSTRATEUR_2}/libs/code_siggraph2023/build/dep-stardis-0.2"
330 cp -r ${adress}/src/stardis/replay_house/scene scene_qt_house
331 cd scene_qt_house
332 
333 # Construire le propagateur sur une image pour une seule réalisation par
334 # pixel :
335 
336 stardis -V 3 -M exterieur.txt \
337   -R spp=1:img=650x650:fov=30:pos=-20,-43,7.8:tgt=0,0,4.5:up=0,0,1 \
338   -g 650x650x1.green,write
339 
340 # Réévaluer le propagateur pour de nouvelles conditions limites :
341 
342 replay_house -V 3 -M exterieur.txt -R file=file.ht -g 650x650x1.green,read
343 
344 # Vous pouvez manipuler aussi le temps d'observation ici.
345 # Attention, ça sort du contexte habituel de la green.
346 
347 # Sous EDIX, vous pouvez déplacer la fenêtre en pressant Alt et en cliquant
348 # sur la figure puis la faisant glisser. Pour quitter, faire Ctrl + C dans le
349 # terminal qui a lancé l'exécutable.
350 
351 # On peut aussi charger un fichier avec plus de réalisations par pixel :
352 
353 replay_house -V 3 -M exterieur.txt -R file=file.ht \
354   -g ${DEMONSTRATEUR_2}/data/replay_house_650x650x100_code_v0.2.green,read
355 
356 # Observations :
357 #  - Le second slider permet de contrôler la température du radiateur de la
358 #    pièce du bas. En l'augmentant ou le diminuant, vous voyez principalement
359 #    l'impact sur la température équivalente des murs de la pièce du bas,
360 #    mais aussi de la toiture. Remettez la température de radiateur au maximum
361 #    après vos expérimentations. 
362 #  - On peut également jouer sur le temps d'observation, au stationnaire ou
363 #    bien à un temps d'observation plus court. La température initiale dans la
364 #    scène est homogène, à 280K, ce qui ne correspond pas à un scénario
365 #    réaliste (idem pour le radiateur plus froid que la pièce d'ailleurs).
366 #    Dans les premiers instants, on voit que la température de la toiture
367 #    augmente rapidement grâce au rayonnement de l'environnement. On voit
368 #    ensuite la température équivalente des murs augmenter progressivement.
369 
370 # Il n'est pas possible de changer les propriétés des matériaux comme la
371 # conductivité, le coefficient d'échange convectif ou l'émissivité, pour cela
372 # il faudra d'autres stratégies, cf exercice 4 sur Monte-Carlo Symbolique.
373 
374 # Correction exercice propagateur 
375 # -------------------------------
376 
377 man sgreen-input
378 
379 # Lire la grammaire comme :
380 # ⟨settings⟩            ::=     [⟨affectation⟩ ...]
381 # le terme affectation sera remplacé par :
382 # (affectation⟩         ::=     ⟨val⟩ = ⟨value⟩
383 # Ici il y a une coquille dans le manuel,
384 # ⟨val⟩                 ::=     ⟨description-name⟩.⟨field⟩
385 #                               |     AMBIENT # Ambient radiative temperature
386 # ici, la barre signifiant "ou bien", on utilise la règle (val) ::= AMBIENT
387 # ⟨value⟩               ::=     real
388 #
389 # Autre option : lire la section "EXAMPLES"
390 
391 echo "AMBIENT=200" > maison_change_tamb.txt
392 sgreen -g resultat.green -a maison_change_tamb.txt
393 
394 
395 #=================================
396 # TP5 - Partie 4 : MC symbolique #
397 #=================================
398 
399 # TODO
400 # Introduit-on la problématique de piégeage ici ?
401 # Couplage avec code déterministe, permet de ne pas relancer MC complet.
402 
403 # On prépare un contenu (ex video d'Antoine) et un jour on met un vrai exercice.