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