TP5 : les chemins et l'information qu'ils portent

Voir le TP1 pour la prise en main du système d'exploitation EDIX.
Les commandes suivantes sont identiques à celles du début du TP1.

. /home/lafrier/star-build/local/etc/stardis.profile
mkdir TP5
cd TP5

Ce TP porte sur les chemins et les différentes informations qu'ils portent

TP5 - Partie 1 : les chemins permettent l'analyse physique

Partie 1.1 : visualisation des chemins

On reprend les images infrarouges du papier [Bati2023]. Il s'agit de deux
fermes, dont l'une possède une isolation par l'intérieur, et l'autre par
l'extérieur.

feh ${DEMONSTRATEUR_2}/Figures/tp5_isolation_1_970x824x3000.png
feh ${DEMONSTRATEUR_2}/Figures/tp5_isolation_2_970x824x3000.png

Cliquer sur q pour fermer la fenêtre affichant l'image.
Etes-vous capable de déterminer laquelle correspond à quelle isolation ?

Pas de panique si vous n'êtes pas thermicien :
visualiser les chemins va vous aider à répondre à cette question !
Les chemins permettre l'interprêtation physique.

ls ${DEMONSTRATEUR_2}/data/ferme_roffiac

Beaucoup de stl pour décrire ces deux scènes. Seuls les paramètres dans
les fichiers interieur.txt et exterieur.txt sont changés.

diff ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_interieure.txt \
  ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_exterieure.txt

On voit que les propriétés physiques des murs sont différentes dans les
deux cas.

On va maintenant ouvrir la scène sous Paraview, soit à l'aide du script
suivant ou bien avec la procédure ci-après :

paraview ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/paraview_open_scene.py &

Sous EDIX, Vous pouvez agrandir la fenêtre en faisant "Alt + H" ou "Alt + L".

Alternative :
paraview
File > open > sélectionner l'ensemble des fichiers commençant par S_ du
dossier ${DEMONSTRATEUR_2}/data/ferme_roffiac (ce sont les solides).
Cliquer sur "Apply"
Par interaction avec la souris, faire bouger la caméra pour dezoomer, par
exemple.
Pour chacun des éléments, on va les rendre transparents pour voir dans la
maison :

Vous visualisez l'intérieur de la maison, composée de deux pièces avec un
radiateur dans la pièce en bas. Il y a trois épaisseurs de murs dont seul
les bords sont affichés par souci de visualisation.
Dans les descriptions physiques du système, deux épaisseurs de mur auront
les mêmes propriétés et le dernier mur sera l'isolant.

Comme dans le TP1, vous allez maintenant générer puis visualiser des chemins
qui basculent d'un mode de tranfert thermique à un autre.

D'abord, on génère des chemins dans le système isolé par l'intérieur :

mkdir chemins_isolation_interieure
cd chemins_isolation_interieure
stardis -M ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_interieure.txt \
  -p 0,0,1.5 -n 60 -e -D all,chemin_

Voir que des fichiers vtk décrivant les chemins ont été produits :

ls 

Idem pour l'isolation par l'extérieur :

cd ..
mkdir chemins_isolation_exterieure
cd chemins_isolation_exterieure
stardis -M ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_exterieure.txt \
  -p 0,0,1.5 -n 60 -e -D all,chemin_

Dans paraview, charger quelques chemins pour les visualiser :
File > Open
Sélectionner le(s) chemin(s) dans l'arborescence
Cliquer sur le bouton "Apply" à gauche

Les chemins servent à estimer la température au niveau du point sonde placé
au centre de la pièce du bas. Les chemins partent donc de cette position.
Ils s'arrêtent sur l'une des sources :

On va maintenant visualiser ces chemins grâce à des images. On reproduit ici
les résultats du papier Siggraph 2023.

cd ..
echo "Les scripts suivants vont lancer puis fermer des fenêtres paraview."
echo "Sous EDIX, pour que l'image ait la bonne forme, il faut basculer" \
  "l'environnement de bureau en mode flottant."
echo ">>> C'est-à-dire : cliquer sur le symbole" \
  "\"[]=\" pour qu'il devienne \"><>\"."

pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
  --data chemins_isolation_interieure/ --interior \
  --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ --path_indices $( seq 5 )
mv iso_interieure.png iso_interieure_peu_chemins.png
feh iso_interieure_peu_chemins.png

pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
  --data chemins_isolation_interieure/ --interior \
  --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ --path_indices $( seq 59 )
mv iso_interieure.png iso_interieure_tous_chemins.png
feh iso_interieure_tous_chemins.png

pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
  --data chemins_isolation_exterieure/ --exterior \
  --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ --path_indices $( seq 5 )
mv iso_exterieure.png iso_exterieure_peu_chemins.png
feh iso_exterieure_peu_chemins.png

pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
  --data chemins_isolation_exterieure/ --exterior \
  --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ --path_indices $( seq 59 )
mv iso_exterieure.png iso_exterieure_tous_chemins.png
feh iso_exterieure_tous_chemins.png

Donner dans l'énoncé les analyses qu'on peut faire en visualisant ces chemins.
TODO: les lister ici en attendant.
Vous pouvez fermer paraview.

Partie 1.2 : animation temporelle des chemins avec paraview

Pour réaliser des animations temporelles, il faut que les fichiers vtk
décrivant les chemins portent de l'information temporelle sur les sommets.
Pour cela, il faut exécuter stardis en renseignant un temps d'observation
(pas au stationnaire).

stardis -M ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_interieure.txt \
  -p 0,0,1.5,10000 -n 20 -e -D all,chemin_

On va maintenant réaliser l'animation temporelle des chemins.
Cela peut prendre un peu de temps avant de vous redonner la main.

pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
  --data . --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ \
  --path_indices 7 --interior --animation

Jouer la simulation à la main :

feh images_animation/*

Utiliser les flèches (droite et gauche) pour jouer le temps.

Attention, comme déjà dit, il y a un souci de représentation de la convection.

Si le chemin n'est pas très intéressant, vous pouvez supprimer le dossier
contenant les images et relancer le script avec un path_indices différent
rm -fr images_animation/
pvpython ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/draw_paths.py \
--data . --scene ${DEMONSTRATEUR_2}/data/ferme_roffiac/ \
--path_indices 17 --interior --animation

TODO: note aux développeurs du TP :
La convection impacte le calcul des temps min et max, donc du pas de temps
global. On peut difficilement s'appuyer sur ce critère pour déterminer le
nombre d'images. Il faudrait faire en sorte que deux images successives
affichent les positions avant / après convection.

TP4 - Partie 2 : estimation de sensibilité le long des chemins

TODO
On dit que les calculs de sensibilités sont hyper importants, avec des
thèses en entier sur ce sujet. Principe : utilisation du même chemin pour
porter de nouvelles informations. Quelques explications.
Voir la thèse de Nada pour plus de détails.
Or ce n'est pas dans le stardis actuel (à l'heure où ce TP est écrit).
On va donc hacker Stardis pour cela !

On ne commente pas le hack, on fait passer le message que hacker c'est
facile !

Annonce de principe : Amaury
Exercice : refaire les maths pour dériver la sensibilité à la température
(pour le propagateur ensuite) puis la sensibilité à h.
Recopier les lignes de code qui sont dans la thèse pour vérification.
Vidéo de Nada qui fait une lecture commentée de cette partie de sa thèse
(Nada redit ce qui a été dit avant, elle lit sa thèse).

TP4 - Partie 3 : propagateur au sens de Green

TODO
Donner une explication du concept dans l'énoncé du TP.
On peut donc réaliser une simulation de MC et sauvegarder l'identifiant des
sources atteintes en fin de chemin. Ca nous donne des porportions des chemins
ayant atteint une certaine source. Une fois le calcul achevé, on peut changer
la valeur de température associée à cette source pour recalculer la
température du point sonde par exemple.

Partie 3.1 : version officielle avec star-green

mkdir propagateur
cd propagateur

Calcul du propagateur :

stardis -M  ${DEMONSTRATEUR_2}/TP5/src/visu_chemins/isolation_interieure.txt \
  -p 0,0,1.5,10000 -n 10000 -G resultat.green

Observer que resultat.green a été créé :

ls

Que faire avec ce propagateur ?

man sgreen

On a deux exemples d'appels à cet exécutable dans la partie "EXAMPLES" de
la documentation.

Le premier nous permet d'identifier la contribution de chaque source :

sgreen -g resultat.green -s resultat.html
firefox-bin resultat.html &

Sous EDIX, firefox s'ouvre dans l'onglet 9.
Comment lire ce fichier ?

Deuxième exemple : on veut maintenant changer les températures de certaines
sources dans le système. Ici on prend l'exemple la température du radiateur.
On a vu tout à l'heure dans le man qu'il faut spécifier ces nouvelles
valeurs de sources dans un fichier. Son format est décrit dans la doc
suivante :

man sgreen-input

Là encore, vous retrouvez la mécanique des grammaires, comme dans le TP1.
On vous fourni un exemple où on change la température du radiateur.

echo "RADIATEUR.T=290" > maison_change_radiateur.txt
cat maison_change_radiateur.txt
sgreen -g resultat.green -a maison_change_radiateur.txt

on voit que la température est plus faible ! (286.962K contre 293.924K)
Vous noterez la rapidité du calcul par rapport à relancer un calcul
Monte-Carlo complet !
Un point d'attention, c'est la taille de ce fichier.

TODO
Parler d'espace mémoire, pour montrer la question de recherche : que doit-on
stocker ?
Attention, il y a les informations nécessaires en théorie et la pratique
dans sgreen.

Exercice :
En vous aidant du manuel, changez maintenant la température radiative de
l'environnement. Vous ne devriez voir aucun changement : pourquoi ?

La correction est "cachée" à la fin du fichier

TODO
Futur exercice : faire la même chose en variant cette fois un flux.
Problème : il n'y a pas de flux imposé dans la scène pour le moment.
echo "XXXXX.VP=XXXX" > maison_change_puissance_volumique.txt
cat maison_change_puissance_volumique.txt
sgreen -g resultat.green -a maison_change_radiateur.txt

cd ..

Partie 3.2 : version interactive

Pour la version interactive, on bascule sur une version hackée de stardis.

Ce code implémente le propagateur au sens de green sur une image (qui
n'était pas dans la version officielle de stardis à ce moment là).
Il permet aussi de changer a posteriori le temps d'observation, ce qui
n'entre pas dans le cadre "du propagateur au sens de Green", c'est une autre
idée. Afin de stocker moins d'informations sur les chemins dans ce cas, des
contraintes additionnelles sont ajoutées : aucun flux imposé, aucune
puissance volumique, température initiale homogène.

On va donc utiliser un code spécifique,

echo "Ouvrir un nouveau terminal (Alt + Entrée sous EDIX)" \
  "par exemple dans un nouveau bureau"
. ${DEMONSTRATEUR_2}/libs/code_siggraph2023/local/etc/stardis.profile
echo "Se déplacer dans le répertoire souhaité via la commande \"cd\""
adresse="${DEMONSTRATEUR_2}/libs/code_siggraph2023/build/dep-stardis-0.2"
cp -r ${adresse}/src/stardis/replay_house/scene scene_qt_house
cd scene_qt_house

Construire le propagateur sur une image pour une seule réalisation par
pixel :

stardis -V 3 -M exterieur.txt \
  -R spp=1:img=650x650:fov=30:pos=-20,-43,7.8:tgt=0,0,4.5:up=0,0,1 \
  -g 650x650x1.green,write

Réévaluer le propagateur pour de nouvelles conditions limites :

replay_house -V 3 -M exterieur.txt -R file=file.ht -g 650x650x1.green,read

Vous pouvez manipuler aussi le temps d'observation ici.
Attention, ça sort du contexte habituel de la green.

Sous EDIX, vous pouvez déplacer la fenêtre en pressant Alt et en cliquant
sur la figure puis la faisant glisser. Pour quitter, faire Ctrl + C dans le
terminal qui a lancé l'exécutable.

On peut aussi charger un fichier avec plus de réalisations par pixel :

replay_house -V 3 -M exterieur.txt -R file=file.ht \
  -g ${DEMONSTRATEUR_2}/data/replay_house_650x650x100_code_v0.2.green,read

Observations :

Il n'est pas possible de changer les propriétés des matériaux comme la
conductivité, le coefficient d'échange convectif ou l'émissivité, pour cela
il faudra d'autres stratégies, cf exercice 4 sur Monte-Carlo Symbolique.

Correction exercice propagateur

man sgreen-input

Lire la grammaire comme :
⟨settings⟩ ::= [⟨affectation⟩ ...]
le terme affectation sera remplacé par :
(affectation⟩ ::= ⟨val⟩ = ⟨value⟩
Ici il y a une coquille dans le manuel,
⟨val⟩ ::= ⟨description-name⟩.⟨field⟩
| AMBIENT
ici, la barre signifiant "ou bien", on utilise la règle (val) ::= AMBIENT
⟨value⟩ ::= real

Autre option : lire la section "EXAMPLES"

echo "AMBIENT=200" > maison_change_tamb.txt
sgreen -g resultat.green -a maison_change_tamb.txt

cd ..

TP5 - Partie 4 : MC symbolique

TODO
Introduit-on la problématique de piégeage ici ?
Couplage avec code déterministe, permet de ne pas relancer MC complet.

On prépare un contenu (ex video d'Antoine) et un jour on met un vrai exercice.

cd ..