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 7 --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 # Si le chemin n'est pas très intéressant, vous pouvez supprimer le dossier
188 # contenant les images et relancer le script avec un path_indices différent
189 # rm -fr images_animation/
190 # pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
191 #  --data . --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ \
192 #  --path_indices 17 --interior --animation
193 
194 # TODO: note aux développeurs du TP :
195 # La convection impacte le calcul des temps min et max, donc du pas de temps
196 # global. On peut difficilement s'appuyer sur ce critère pour déterminer le
197 # nombre d'images. Il faudrait faire en sorte que deux images successives
198 # affichent les positions avant / après convection.
199 
200 
201 #=================================================================
202 # TP4 - Partie 2 : estimation de sensibilité le long des chemins #
203 #=================================================================
204 
205 # TODO
206 # On dit que les calculs de sensibilités sont hyper importants, avec des
207 # thèses en entier sur ce sujet. Principe : utilisation du même chemin pour
208 # porter de nouvelles informations. Quelques explications.
209 # Voir la thèse de Nada pour plus de détails.
210 # Or ce n'est pas dans le stardis actuel (à l'heure où ce TP est écrit).
211 # On va donc hacker Stardis pour cela !
212 
213 # On ne commente pas le hack, on fait passer le message que hacker c'est
214 # facile !
215 
216 # Annonce de principe : Amaury
217 # Exercice : refaire les maths pour dériver la sensibilité à la température
218 # (pour le propagateur ensuite) puis la sensibilité à h.
219 # Recopier les lignes de code qui sont dans la thèse pour vérification.
220 # Vidéo de Nada qui fait une lecture commentée de cette partie de sa thèse
221 # (Nada redit ce qui a été dit avant, elle lit sa thèse).
222 
223 
224 #================================================
225 # TP4 - Partie 3 : propagateur au sens de Green #
226 #================================================
227 
228 # TODO
229 # Donner une explication du concept dans l'énoncé du TP.
230 # On peut donc réaliser une simulation de MC et sauvegarder l'identifiant des
231 # sources atteintes en fin de chemin. Ca nous donne des porportions des chemins
232 # ayant atteint une certaine source. Une fois le calcul achevé, on peut changer
233 # la valeur de température associée à cette source pour recalculer la
234 # température du point sonde par exemple.
235 
236 # Partie 3.1 : version officielle avec star-green
237 # -----------------------------------------------
238 
239 mkdir propagateur
240 cd propagateur
241 
242 # Calcul du propagateur :
243 
244 stardis -M  ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_interieure.txt \
245   -p 0,0,1.5,10000 -n 10000 -G resultat.green
246 
247 # Observer que resultat.green a été créé :
248 
249 ls
250 
251 # Que faire avec ce propagateur ?
252 
253 man sgreen
254 
255 # On a deux exemples d'appels à cet exécutable dans la partie "EXAMPLES" de
256 # la documentation.
257 
258 # Le premier nous permet d'identifier la contribution de chaque source :
259 
260 sgreen -g resultat.green -s resultat.html
261 firefox-bin resultat.html &
262 
263 # Sous EDIX, firefox s'ouvre dans l'onglet 9.
264 # Comment lire ce fichier ?
265 #  - List of variables
266 #    D'abord des informations sur les sources dans la scène (température
267 #    initiales, températures imposées) vs les variables qui n'en sont pas.
268 #  - Formula of the Monte-Carlo estimate
269 #    L'expression de la température comme une espérance faisant intervenir
270 #    ces sources (on y retrouve les proportions de chemins ayant atteint
271 #    chacune de ces sources repérées en gras).
272 #    Ici vous observez que la température estimée est 293.924K.
273 #  - Counts, etc
274 #    On a ensuite une description de la scène utilisée pour générer la green.
275 
276 # Deuxième exemple : on veut maintenant changer les températures de certaines
277 # sources dans le système. Ici on prend l'exemple la température du radiateur.
278 # On a vu tout à l'heure dans le man qu'il faut spécifier ces nouvelles
279 # valeurs de sources dans un fichier. Son format est décrit dans la doc
280 # suivante :
281 
282 man sgreen-input
283 
284 # Là encore, vous retrouvez la mécanique des grammaires, comme dans le TP1.
285 # On vous fourni un exemple où on change la température du radiateur.
286 
287 echo "RADIATEUR.T=290" > maison_change_radiateur.txt
288 cat maison_change_radiateur.txt
289 sgreen -g resultat.green -a maison_change_radiateur.txt
290 
291 # on voit que la température est plus faible ! (286.962K contre 293.924K)
292 # Vous noterez la rapidité du calcul par rapport à relancer un calcul
293 # Monte-Carlo complet !
294 # Un point d'attention, c'est la taille de ce fichier.
295 
296 # TODO
297 # Parler d'espace mémoire, pour montrer la question de recherche : que doit-on
298 # stocker ?
299 # Attention, il y a les informations nécessaires en théorie et la pratique
300 # dans sgreen.
301 
302 # Exercice : 
303 # En vous aidant du manuel, changez maintenant la température radiative de
304 # l'environnement. Vous ne devriez voir aucun changement : pourquoi ?
305 
306 # La correction est "cachée" à la fin du fichier
307 
308 # TODO
309 # Futur exercice : faire la même chose en variant cette fois un flux.
310 # Problème : il n'y a pas de flux imposé dans la scène pour le moment.
311 # echo "XXXXX.VP=XXXX" > maison_change_puissance_volumique.txt
312 # cat maison_change_puissance_volumique.txt
313 # sgreen -g resultat.green -a maison_change_radiateur.txt
314 
315 cd ..
316 
317 
318 # Partie 3.2 : version interactive
319 # --------------------------------
320 
321 # Pour la version interactive, on bascule sur une version hackée de stardis.
322 
323 # Ce code implémente le propagateur au sens de green sur une image (qui
324 # n'était pas dans la version officielle de stardis à ce moment là).
325 # Il permet aussi de changer a posteriori le temps d'observation, ce qui
326 # n'entre pas dans le cadre "du propagateur au sens de Green", c'est une autre
327 # idée. Afin de stocker moins d'informations sur les chemins dans ce cas, des
328 # contraintes additionnelles sont ajoutées : aucun flux imposé, aucune
329 # puissance volumique, température initiale homogène.
330 
331 # On va donc utiliser un code spécifique,
332 
333 echo "Ouvrir un nouveau terminal (Alt + Entrée sous EDIX)" \
334   "par exemple dans un nouveau bureau"
335 . ${DEMONSTRATEUR_2}/libs/code_siggraph2023/local/etc/stardis.profile
336 echo "Se déplacer dans le répertoire souhaité via la commande \"cd\""
337 adresse="${DEMONSTRATEUR_2}/libs/code_siggraph2023/build/dep-stardis-0.2"
338 cp -r ${adresse}/src/stardis/replay_house/scene scene_qt_house
339 cd scene_qt_house
340 
341 # Construire le propagateur sur une image pour une seule réalisation par
342 # pixel :
343 
344 stardis -V 3 -M exterieur.txt \
345   -R spp=1:img=650x650:fov=30:pos=-20,-43,7.8:tgt=0,0,4.5:up=0,0,1 \
346   -g 650x650x1.green,write
347 
348 # Réévaluer le propagateur pour de nouvelles conditions limites :
349 
350 replay_house -V 3 -M exterieur.txt -R file=file.ht -g 650x650x1.green,read
351 
352 # Vous pouvez manipuler aussi le temps d'observation ici.
353 # Attention, ça sort du contexte habituel de la green.
354 
355 # Sous EDIX, vous pouvez déplacer la fenêtre en pressant Alt et en cliquant
356 # sur la figure puis la faisant glisser. Pour quitter, faire Ctrl + C dans le
357 # terminal qui a lancé l'exécutable.
358 
359 # On peut aussi charger un fichier avec plus de réalisations par pixel :
360 
361 replay_house -V 3 -M exterieur.txt -R file=file.ht \
362   -g ${DEMONSTRATEUR_2}/data/replay_house_650x650x100_code_v0.2.green,read
363 
364 # Observations :
365 #  - Le second slider permet de contrôler la température du radiateur de la
366 #    pièce du bas. En l'augmentant ou le diminuant, vous voyez principalement
367 #    l'impact sur la température équivalente des murs de la pièce du bas,
368 #    mais aussi de la toiture. Remettez la température de radiateur au maximum
369 #    après vos expérimentations. 
370 #  - On peut également jouer sur le temps d'observation, au stationnaire ou
371 #    bien à un temps d'observation plus court. La température initiale dans la
372 #    scène est homogène, à 280K, ce qui ne correspond pas à un scénario
373 #    réaliste (idem pour le radiateur plus froid que la pièce d'ailleurs).
374 #    Dans les premiers instants, on voit que la température de la toiture
375 #    augmente rapidement grâce au rayonnement de l'environnement. On voit
376 #    ensuite la température équivalente des murs augmenter progressivement.
377 
378 # Il n'est pas possible de changer les propriétés des matériaux comme la
379 # conductivité, le coefficient d'échange convectif ou l'émissivité, pour cela
380 # il faudra d'autres stratégies, cf exercice 4 sur Monte-Carlo Symbolique.
381 
382 # Correction exercice propagateur 
383 # -------------------------------
384 
385 man sgreen-input
386 
387 # Lire la grammaire comme :
388 # ⟨settings⟩            ::=     [⟨affectation⟩ ...]
389 # le terme affectation sera remplacé par :
390 # (affectation⟩         ::=     ⟨val⟩ = ⟨value⟩
391 # Ici il y a une coquille dans le manuel,
392 # ⟨val⟩                 ::=     ⟨description-name⟩.⟨field⟩
393 #                               |     AMBIENT # Ambient radiative temperature
394 # ici, la barre signifiant "ou bien", on utilise la règle (val) ::= AMBIENT
395 # ⟨value⟩               ::=     real
396 #
397 # Autre option : lire la section "EXAMPLES"
398 
399 echo "AMBIENT=200" > maison_change_tamb.txt
400 sgreen -g resultat.green -a maison_change_tamb.txt
401 
402 cd ..
403 
404 #=================================
405 # TP5 - Partie 4 : MC symbolique #
406 #=================================
407 
408 # TODO
409 # Introduit-on la problématique de piégeage ici ?
410 # Couplage avec code déterministe, permet de ne pas relancer MC complet.
411 
412 # On prépare un contenu (ex video d'Antoine) et un jour on met un vrai exercice.
413 
414 cd ..