TP1 : premier pas avec htrdr-atmosphere
Conditions de réalisation
Nous supposerons que le TP est réalisé par un utilisateur travaillant depuis le système d'exploitation EDIX.
TP1 - Partie 1 : environnement de travail
Partie 1.1 : les débuts dans EDIX
Se connecter en tant qu'etudiant :
- login: etudiant
- mot de passe: etudiant&1edix
Vous êtes maintenant dans le système d'exploitation EDIX. Vous pouvez consulter la documentation en saisissant la commande suivante :
etudiant:~ $ man edix
Avant de poursuivre le TP, vous êtes invité à lire cette page de manuel ainsi que celles vers lesquelles elle renvoie, notamment
etudiant:~ $ man edix_man
etudiant:~ $ man edix_premiers_pas
etudiant:~ $ man edix_gestes_de_base
etudiant:~ $ man edix_interface_graphique
etudiant:~ $ man edix_shell
etudiant:~ $ man edix_vim
Au minimum, vous aurez besoin d'apprendre à lancer l'interface graphique avec la commande
etudiant:~ $ startx
et à ouvrir un terminal graphique avec la combinaison de touches Alt + Entrée.
Le logiciel htrdr et l'ensemble des logiciels ont été installés chez l'utilisateur lafrier, comme vous pouvez le voir avec la commande
ls /home/lafrier/
Vous allez travailler dans le répertoire /home/etudiant. Vous pouvez vérifier que vous êtes bien dans ce répertoire à l'aide de la commande
pwd
qui affiche le chemin vers le répertoire courant. La commande
ls
vous permet ensuite d'afficher les fichiers et dossiers du répertoire courant.
Il vous faudra ensuite créer un répertoire à votre nom :
mkdir mon_nom
Avec
ls
vous observerez que le répertoire a été créé.
Remarque
Si on veut renommer le répertoire parce qu'on a fait une faute :
etudiant:~ $ mv mon_nom_raté nom_nom_correctSi on veut supprimer le répertoire :
etudiant:~ $ rm -r mon_nom
On se rend dans le répertoire créé :
cd mon_nom
Partie 1.2 : préparation de l'environnement de TP
On crée un sous-répertoire dédié au tp htrdr-atmosphere et on va dedans
mkdir tp_htrdr-atmosphere
cd tp_htrdr-atmosphere
On crée un lien symbolique (un raccourci) vers le fichier profile définissant l'environnement du TP :
ln -sf /home/lafrier/environnement_tp_htrdr-atmosphere/etc/profile profile
Pour pouvoir exécuter htrdr-atmosphere, il faudra réaliser l'opération suivante à chaque fois qu'un nouveau terminal sera ouvert :
source ~/mon_nom/tp_htrdr-atmosphere/profile
Elements techniques de compréhension
Afficher le fichier pour voir que des variables vont être modifiées.
Ces variables sont enrichies avec les chemins vers le dossier d'installation de htrdr-atmosphere :
etudiant:~/mon_nom/tp_htrdr-atmosphere$ cat \
~/mon_nom/tp_htrdr-atmosphere/profileou, de manière équivalente :
etudiant:~/mon_nom/tp_htrdr-atmosphere$ cat \
/home/lafrier/star-build/local/etc/htrdr-atmosphere.profileVérifier que les variables d'environnement ont bien été mises à jour :
etudiant:~/mon_nom/tp_htrdr-atmosphere$ echo ${CPATH}
On copie le répertoire dédié au TP1
cp -r "${TP_HTRDR_ATMOSPHERE}"/TP1/ .
TP1 - Partie 2 : images avec htrdr-atmosphere en ciel clair
Partie 2.1 : première image avec htrdr-atmosphere
Aller dans le répertoire de travail dédié au TP1
cd TP1
Afficher les fichiers de données :
ls data
On voit qu'on a différents types de fichiers, d'extensions :
- txt : fichier décrivant les propriétés d'une atmosphère sans nuages
- obj : fichier décrivant la géométrie du sol
- mtls : liste des matériaux constituant le sol (un type de matériaux et une température)
- mrumtl : propriétés radiatives des matériaux en fonction de la longueur d'onde
- nc : champs de concentration en eau nuageuse au format
netCDF - htcp : champs de concentration en eau nuageuse au format
htcp
Les données sont décrites plus en détail dans le TP3.
Ici, on va les utiliser en les passant en entrée de la commande
htrdr-atmosphere, sans s'attarder à les décrire.
Lancer le premier calcul htrdr :
htrdr-atmosphere -vf \
-a data/clear_sky_opt_prop_SMLSATM.txt \
-R -g data/plane1.obj \
-M data/grounds.mtls \
-o image_clear_sky.ht
On décrit les options utilisées avec la commande :
On exécute le code htrdr-atmosphere sur l'atmosphère décrite par clear_sky_opt_prop_SMLSATM.txt (option -a),
avec l'option -v on a choisi un mode "verbeux" avec beaucoup d'informations imprimées dans le terminal au cours du calcul, indiquant notamment les géométries chargées et les temps de calcul,
avec les options -R -g et -M on a choisi les propriétés de la surface, ici un plan d'albedo 0.1 infini horizontalement,
avec l'option -o on a choisi que la sortie du calcul soit écrite dans un fichier image_clear_sky.ht plutôt que directement dans le terminal,
les autres paramètres (nombre de pixels, nombre de réalisations par pixel) et la description du système physique (position du soleil, position du capteur, intégration spectrale etc) ne sont pas spécifiés : les valeurs utilisées sont celles par défaut.
Une fois le calcul terminé, on convertit le fichier de sortie du format texte au format image avec la commande htpp :
htpp -o image_clear_sky.ppm image_clear_sky.ht
Et on peut visualiser l'image avec
mupdf image_clear_sky.ppm
On voit une image noire en bas et bleutée en haut mais très bruitée.
Ouvrir le manuel de la commande htrdr-atmosphere pour voir quels sont les
paramètres par défaut pour la caméra (option -C) et la définition de l'image
(option -i).
=> Le centre de la caméra est au niveau du sol (par défaut, pos=0,0,0 donc
z=0) donc la moitié des pixels est sous le sol, ce qui explique pourquoi la
moitié de l'image est noire. De plus, le nombre de réalisations par pixel est
par défaut égal à 1 donc les estimations par Monte Carlo ne sont pas du tout
convergées, ce qui explique que l'image soit bruitée (beaucoup de variabilité
dans les couleurs d'un pixel à l'autre).
On va calculer une nouvelle image en mettant la caméra un peu plus haut afin qu'elle ne soit pas sous le sol, et avec un peu plus de réalisations (photons) par pixels pour que l'image soit moins bruitée :
On fait une nouvelle estimation avec plus de réalisations :
htrdr-atmosphere -vf \
-a data/clear_sky_opt_prop_SMLSATM.txt \
-C pos=0,0,10:tgt=0,1,10 \
-Rg data/plane1.obj \
-M data/grounds.mtls \
-i spp=128 \
-o image_clear_sky_128spp.ht
On observe que le temps de calcul est plus long. Cela est dû au fait qu'on a augmenté le nombre de réalisations par pixel.
On convertit le nouveau fichier en image et on la visualise :
htpp -o image_clear_sky_128spp.ppm image_clear_sky_128spp.ht
mupdf image_clear_sky_128spp.ppm
On observe que le bruit a diminué. On peut refaire des tests avec encore plus de réalisations pour voir une augmentation plus significative du temps de calcul et une diminution plus significative du bruit. On se réfèrera au TP3 pour une étude quantitative de l'évolution de la convergence des estimations de flux radiatifs avec le nombre de réalisations. On peut également se référer au TP Monte Carlo théorique pour travailler à une compréhension profonde des concepts au coeur des méthodes de Monte Carlo.
L'image que l'on visualise est créée par le logiciel htpp à partir du fichier
de sortie de htrdr-atmosphere. Ce fichier contient du texte, on peut donc le
lire. Affichons les 10 premières lignes à l'aide de la commande head :
head image_clear_sky_128spp.ht
La première ligne donne le nombre de pixel, par défaut, 320 horizontalement et
240 verticalement. Ensuite, chaque ligne correspond à un pixel. Chaque ligne
consiste en quatre paires de colonnes. Chaque paire de colonnes correspond à
une estimation Monte Carlo et son écart type. La dernière paire de colonnes est
toujours réservée au temps de calcul par réalisation. Les autres paires de
colonnes correspondent à des observables différentes en fonction du type de
calcul effectué. Par exemple pour une image comme on l'a fait ici, les trois
premières paires de colonnes correspondent à des luminances intégrées
spectralement selon trois fonctions de réponses spectrales qui correspondent
aux trois cônes de l'oeil humain. La section OUTPUT IMAGE du manuel de
htrdr-atmosphere, ainsi que le manuel de htrdr-image, documentent le format
de sortie.
Partie 2.2 : calculs de luminances en solaire et infrarouge thermique
On va à présent faire une image en intégrant la luminance uniformément sur une bande étroite, toujours avec la source solaire. C'est l'option -s qui nous permet de prescrire la source (sw) et l'intervalle spectral ([600, 650] nm) :
htrdr-atmosphere -vf \
-a data/clear_sky_opt_prop_SMLSATM.txt \
-s sw=600,650 \
-C pos=0,0,10:tgt=0,1,10 \
-Rg data/plane1.obj \
-M data/grounds.mtls \
-i spp=128 \
-o image_clear_sky_128spp_sw.ht
head image_clear_sky_128spp_sw.ht
Cette fois, seule la deuxième paire de colonnes est remplie. Pour convertir le texte en image, il faut préciser le canal (pixel component) que l'on souhaite représenter :
htpp -v -m pixcpnt=2 -o image_clear_sky_128spp_sw.ppm \
image_clear_sky_128spp_sw.ht
mupdf image_clear_sky_128spp_sw.ppm
L'option -v (verbose) imprime la colorbar de la figure dans le terminal. On voit que la luminance est plus élevée proche de la surface qu'en haut de l'image (l'horizon est plus lumineux car la basse atmosphère est plus diffusante).
On va maintenant faire une image dans l'infrarouge thermique, en considérant les émissions du milieu (surface et gaz) comme sources radiatives. C'est à nouveau l'option -s qui nous permet de prescrire la source (lw) et l'intervalle spectral ([10000, 10050] nm) :
htrdr-atmosphere -vf \
-a data/clear_sky_opt_prop_SMLSATM.txt \
-s lw=10000,10050 \
-C pos=0,0,10:tgt=0,1,10 \
-Rg data/plane1.obj \
-M data/grounds.mtls \
-i spp=128 \
-o image_clear_sky_128spp_lw.ht
head image_clear_sky_128spp_lw.ht
Cette fois, les deux premières paires de colonnes sont remplies : la deuxième paire de colonnes donne à nouveau la luminance intégrée dans la bande étroite (comme en sw) ; la première paire de colonne contient en plus une estimation de la température de brillance associée. On peut visualiser ces différentes données :
htpp -v -m pixcpnt=2 image_clear_sky_128spp_lw_rad.ppm \
image_clear_sky_128spp_lw.ht
mupdf image_clear_sky_128spp_lw_rad.ppm
htpp -v -m pixcpnt=0 image_clear_sky_128spp_lw_tbr.ppm \
image_clear_sky_128spp_lw.ht
mupdf image_clear_sky_128spp_lw_tbr.ppm
TP1 - Partie 3 : images htrdr-atmosphere avec nuages
Partie 3.1 : nuages cubiques
On va refaire l'image de la partie 2.1 (en mode photographie virtuelle) mais cette fois-ci en mettant un champ nuageux constitué de nuages cubiques dans le domaine. Ce sont les options -c et -m qui permettent de prescrire le champ de concentration 3D en gouttelettes d'eau nuageuse et les données propriétés optiques de ces gouttelettes, pré-calculée d'après la théorie de Mie, respectivement. L'option -r active la répétition périodique du champ 3D sur l'horizontale permettant de représenter un champ nuageux infini.
htrdr-atmosphere -vf \
-a data/clear_sky_opt_prop_SMLSATM.txt \
-r -c data/cubic_cloud.htcp \
-m data/Mie_LUT_Clouds.nc \
-C pos=0,0,10:tgt=0,1,10 \
-Rg data/plane1.obj \
-M data/grounds.mtls \
-i spp=128 \
-o image_cloud_128spp.ht
htpp -i exposure=0.1 -o image_cloud_128spp.ppm \
image_cloud_128spp.ht
mupdf image_cloud_128spp.ppm
On peut également utiliser la commande htpp pour visualiser le temps de calcul moyen par réalisation (quatrième paire de colonnes du fichier de sortie) sous forme d'image :
htpp -v -m pixcpnt=6 -o image_cloud_128spp_tps.ppm \
image_cloud_128spp.ht
mupdf image_cloud_128spp_tps.ppm
On voit que le temps de calcul moyen associé aux pixels "nuageux" est plus élevé qu'en ciel clair ou à la surface. Pourquoi ?
De la même façon, on peut visualiser l'écart type de Monte Carlo associé à un canal d'intégration particulier :
htpp -v -m pixcpnt=1 -o image_cloud_128spp_xsig.ppm \
image_cloud_128spp.ht
mupdf image_cloud_128spp_xsig.ppm
On voit que l'incertitude statistique associée aux pixels "nuageux" est plus élevée qu'en ciel clair ou à la surface. Pourquoi ?
Partie 3.2 : nuages issus de simulations LES
Des champs nuageux issus de simulations LES à haute résolution (dizaine à centaine de mètres) sont distribués dans le starter-pack de htrdr-atmosphere, ainsi que d'autres géométries de sol (ville, mer ...), et des scripts permettant de reproduire les images qui sont sur le site web de htrdr.
Vous pouvez explorer les données en autonomie, consulter la documentation, lancer un calcul tel que proposé par le starter-pack... attention certains de ces calculs sont longs, vous pouvez avoir intérêt à diminuer le nombre de pixels par exemple pour réduire le temps de retour.
ls $HTSPK
more $HTSPK/README.md
sh $HTSPK/sea.sh # this will take some time
sed -e 's/^image_def=.*/image_def="320x180"/' \
$HTSPK/sea.sh > sea_low_def.sh
sh sea_low_def.sh # this should be 16 times faster