TP3 : sensibilité des flux aux paramètres physiques du système

Conditions de réalisation

Nous supposerons que le TP est réalisé par un utilisateur travaillant depuis le système d'exploitation EDIX.

TP3 - Partie 1 : environnement de travail

Partie 1.1 : les débuts dans EDIX

Référez vous à la partie 1.1 du TP1.

Partie 1.2 : préparation de l'environnement de TP

S'il n'existe pas encore, 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/profile

ou, de manière équivalente :

etudiant:~/mon_nom/tp_htrdr-atmosphere$ cat \
/home/lafrier/star-build/local/etc/htrdr-atmosphere.profile

Vé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 TP3

cp -r "${TP_HTRDR_ATMOSPHERE}"/TP3/ .

et on y va

cd TP3

TP3 - Partie 2 :

Regardons les données disponibles pour le TP :

ls data 

On commence par parcourir le fichier clear_sky_opt_prop_SMLSATM.txt, la description de l'atmosphère considérée, correspondant à une atmosphère standard de moyenne latitude en été (Standard Mid-Latitude Summer ATMosphere)

more data/clear_sky_opt_prop_SMLSATM.txt

Aide shell
La commande more ouvre un pagineur
Pour monter et descendre, utiliser les flèches haut et bas
Pour sortir appuyer sur la touche q (pour quit)


On voit que cette atmosphère est constituée de 31 niveaux verticaux, définissant des interfaces entre 30 couches de gaz. La pression [Pa], la température [K], l'altitude [m] sont données aux interfaces entre couches. La concentration molaire de vapeur d'eau x(H20) [mol h2o / mol air ] est donnée au sein des couches. Les concentrations des autres gaz (CO2, O2, CH4 etc) ne sont pas écrites dans ce fichier mais elles ont bien été prises en compte pour calculer les propriétés radiatives des couches (absorption et diffusion du mélange de gaz atmosphérique). Ces propriétés sont données plus bas dans le fichier. On peut dans un premier temps ignorer les blocs commençant par "x(H2O) ... for point index ... ". A la suite de ces blocs, les bandes spectrales sont décrites (16 bandes pour le LW, 14 bandes pour le SW) par leurs bornes (nombre d'ondes min et max en cm-1), le nombre de points de quadrature inclu dans la bande et leurs poids respectifs. Enfin, les propriétés radiatives sont données pour chaque point de quadrature (g-point) de chaque bande (interval). Pour l'instant, ignorons tous les blocs qui ne sont pas "Nominal".

Note : La température du sol écrite dans ce fichier n'est pas utilisée dans le calcul, ni les LW emissivity et SW emissivity.

Note : Pour les bandes "LW", htrdr néglige la diffusion donc seuls les coefficients d'absorption sont donnés dans le fichier. Pour les bandes "SW", les coefficients d'absorption et de diffusion sont donnés.

On peut également examiner les données de sol. Les fichiers de géométrie plane*.obj décrivent des sols plans constitués de deux triangles, et donnent le matériaux associé au sol via la clé ground*. Les différents matériaux ground* sont listés dans grounds.mtls. Ils correspondent à des matériaux idéalisés, d'albedo constant sur le spectre solaire. Les propriétés radiatives de ces matériaux sont données dans les fichiers albedo*.mrumtl. En pratique, on utilisera plane0.obj pour imposer une surface noire, plane4.obj pour imposer une surface réfléchissante à 40%, etc.

htrdr-atmosphere -vf \
    -a data/clear_sky_opt_prop_SMLSATM.txt \
    -s sw=200,4000 \
    -R -g data/plane0.obj \
    -M data/grounds.mtls \
    -p pos=0.,0.,0.:sz=10,10 \
    -o flux_clear_sky.ht

Pour un calcul de flux (option -p pour un calcul de flux au lieu de -C pour une image) dans le solaire, seule la première et la dernière paires de colonnes seront remplies : la première paire de colonnes pour le flux estimé, et la dernière paire pour le temps de calcul par réalisation.

Pour l'instant, on va uniquement regarder le flux moyen, qui est écrit dans le terminal. On redirigera la sortie standard de htrdr vers un fichier pour pouvoir post-traiter l'information par la suite.

htrdr-atmosphere -vf \
    -a data/clear_sky_opt_prop_SMLSATM.txt \
    -s sw=200,4000 \
    -Rg data/plane0.obj \
    -M data/grounds.mtls \
    -p pos=0.,0.,0.:sz=10,10 \
    -i spp=128 \
    -o flux_clear_sky_128spp.ht \
    2>&1|tee log_htrdr.out

./print_flux.sh log_htrdr.out

Partie 2.2 : influence du nombre de réalisation sur les estimations

Si on veut examiner comment la modification d'un paramètre du calcul modifie le flux estimé, on peut faire une boucle comme suit :

for nreal in 1 5 10 50 100 500 1000 
do 

  echo ${nreal} >> nreals.dat

  htrdr-atmosphere -vf \
    -a data/clear_sky_opt_prop_SMLSATM.txt \
    -s sw=200,4000 \
    -Rg data/plane0.obj \
    -M data/grounds.mtls \
    -p pos=0.,0.,0.:sz=10,10 \
    -i spp=${nreal} \
    -o flux_clear_sky_${nreal}spp.ht \
    2>&1|tee log_htrdr_${nreal}.out

  ./print_flux.sh log_htrdr_${nreal}.out >> fluxes.dat

done
paste nreals.dat fluxes.dat > resultats.dat

Le fichier resultats.dat contient alors trois colonnes : nombre de réalisations, estimation et écart type, pour des calculs ayant de plus en plus de réalisations. On peut afficher ces résultats

cat resultats.dat

Et on peut également les représenter sous forme graphique

gnuplot < plot_resultats.gp

On voit que la barre d'erreur diminue au fur et à mesure qu'on augmente le nombre de réalisations. On voit que pour diviser par dix la barre d'erreur, il faut multiplier par cent le nombre de réalisations. On voit que les estimations qui sont associées à une trop grande barre d'erreur ne sont pas fiables.

Partie 2.3 : influence des paramètres sur les flux et temps de calcul

Le script loop_htrdr.sh assemble les commandes ci-dessus. Il peut être modifié et exécuté pour répondre aux questions qui suivent.

bash loop_htrdr.sh

Pour répondre aux questions suivantes, aidez vous du manuel pour comprendre quelles options il faut modifier et comment :

man htrdr-atmosphere

Bonus : vous pouvez équiper le script loop_htrdr.sh pour étudier, en plus du flux estimé, le temps de calcul par réalisation. La commande print_time.sh peut être utilisée en sus de la commande print_flux.sh qui est déjà dans le script. Vous pouvez ajouter des colonnes au fichier resultats.dat et modifier le script gnuplot en conséquence, ou créer un autre fichier times.dat et un autre script plot_times.gp en vous inspirant de ce qui a été fait pour les flux.


Aide shell

Par défaut, les scripts écrivent toujours dans les mêmes fichiers :
resultats.dat et figure.png. Si vous voulez sauvegarder votre travail au fur
et à mesure, vous devrez renommer ces fichiers après chaque exercice afin
qu'ils ne soient pas écrasés à la prochaine exécution. Pour renommer un
fichier :

etudiant:~/mon_nom/tp_htrdr-atmosphere/TP1$ mv resultats.dat Q1_resultats.dat
etudiant:~/mon_nom/tp_htrdr-atmosphere/TP1$ mv figure.png Q1_figure.png

Vous pouvez éventuellement ranger vos fichiers dans un répertoire spécifique

etudiant:~/mon_nom/tp_htrdr-atmosphere/TP1$ mkdir ciel_clair
etudiant:~/mon_nom/tp_htrdr-atmosphere/TP1$ mv *.png *.dat *.ht *.out ciel_clair


Question 1 : Comment évolue le flux de surface avec l'angle solaire ?

=> copier le script loop_htrdr.sh en Q1_loop_htrdr.sh et le modifier pour faire des calculs avec des angles solaires allant de 10 degrés au dessus de l'horizon, jusqu'à 90 degrés (soleil au zenith) et tracer la courbe de flux en fonction de l'angle solaire.

Question 2 : Comment est distribué le flux solaire spectralement ?

=> copier le script loop_htrdr.sh en Q2_loop_htrdr.sh et le modifier pour faire des calculs sur différentes bandes spectrales et tracer la courbe de flux en fonction des bandes spectrales.

Question 3 : Comment évolue le flux de surface avec l'albedo de la surface ?

=> copier le script loop_htrdr.sh en Q3_loop_htrdr.sh et le modifier pour faire des calculs avec les différentes surfaces disponibles dans data/ et tracer la courbe de flux en fonction de l'albedo de surface.

TP3 - Partie 3 : run htrdr-atmosphere en ciel nuageux

Partie 3.0 : description des fichiers de données nuages

On va ajouter des nuages aux simulations précédentes. En regardant de nouveau dans le répertoire data, on trouve des fichiers *.nc et *.htcp. Le fichier .htcp est écrit dans un format propre à htrdr. Il contient la donnée décrivant les champ 3D de concentration en eau nuageuse (gouttelettes en suspension) et en vapeur d'eau, ainsi que de température et pression, dans la partie nuageuse du domaine. Le fichier *.nc qui porte le même nom contient ces mêmes données dans un fichier netCDF. Le fichier Mie_LUT_Clouds.nc contient les propriétés radiatives des gouttelettes nuageuses issues de précalculs de Mie et tabulées dans un fichier netCDF.


netCDF

Le format netCDF est un format standard de la communauté des géosciences.
https://www.unidata.ucar.edu/software/netcdf
Il existe des interfaces de programmation en C et divers langages, ainsi que
des utilitaires en ligne de commande, comme ncdump et ncgen qui
permettent de convertir du format netCDF en ascii et vice-versa, ou ncap2
qui permet de faire des calculs sur les champs du fichier.


On peut afficher les métadonnées du fichier data/Mie_LUT_Clouds.nc :

ncdump -h data/Mie_LUT_Clouds.nc

et les valeurs de la variable lambda c'est à dire les longueurs d'ondes pour lesquelles on dispose des données de Mie tabulées :

ncdump -v lambda data/Mie_LUT_Clouds.nc

On peut également étudier le fichier décrivant les nuages

ncdump data/cubic_cloud.nc

Les variables S_N_direction et W_E_direction donnent les coordonnées des centres de mailles sur l'horizontale, en kilomètre : 1, 3 et 5. Par convention, le maillage horizontal est régulier. On a donc un domaine de 6 km de côté, composé de 3 x 3 colonnes. Les coordonnées verticales sont décrites par vertical_levels. Le maillage vertical peut être irrégulier mais dans notre cas, il est régulier, avec les milieux de couches à 0.5, 1.5, 2.5 et 3.5 km, soit un domaine de 4 km de haut avec des couches de 1 km d'épaisseur. La variable RCT donne la concentration en eau nuageuse : on a une seule maille nuageuse dans le domaine, au milieu de la deuxième couche. On a donc un nuage cubique de 2x2x1 km^3, ce qui est environ la taille caractéristique d'un gros cumulus.


Remarque

Ici on a directement fourni le fichier au format htcp qui est celui attendu
par htrdr-atmosphere. Pour créer un fichier htcp à partir d'un fichier
netCDF on peut utiliser l'utilitaire les2htcp fourni avec htrdr :
etudiant:~$ les2htcp -m 1000 -o clouds.htcp -i clouds.nc


Partie 3.1 : premiers calculs de flux avec nuages

On reprend la commande htrdr-atmosphere de la partie 2, en ajoutant les options permettant d'ajouter les nuages à la description du système physique simulé : l'option -c suivie du nom du fichier htcp et l'option -m suivie du nom du fichier de Mie. On place le capteur (option -p) en surface au milieu du domaine (pos=3000,3000,0) et on vise vers le haut (tgt=3000,3000,1), et on intègre sur tout la surface du domaine (sz=6000,6000).

htrdr-atmosphere -vf \
    -a data/clear_sky_opt_prop_SMLSATM.txt \
    -c data/cubic_cloud.htcp \
    -m data/Mie_LUT_Clouds.nc \
    -s sw=200,4000 \
    -Rg data/plane0.obj \
    -M data/grounds.mtls \
    -p pos=3000,3000,0:tgt=3000,3000,1:sz=6000,6000 \
    -i spp=128 \
    -o flux_one_cloud_128spp.ht \
    2>&1|tee log_htrdr.out

Comparer la valeur de flux obtenu par rapport au calcul réalisé précédemment en ciel clair et expliquer.


Remarque :

Comme dans la partie 2, le système était 1D (variations uniquement sur la
verticale), la position et l'extension horizontale du capteur n'avaient pas
d'effet sur le résultat. On peut donc reprendre les résultats de la partie
précédente et les comparer directement avec les résultats en ciel nuageux,
même si on a changé les propriétés du capteur. Pour s'en convaincre, refaire
un calcul en ciel clair pour un capteur plus petit (sz=1,1) et comparer aux
résultats obtenus à la partie 2.


On va reprendre le calcul précédent en ajoutant l'option -r qui permet de répéter le motif nuageux sur l'horizontale. On a ainsi construit l'équivalent d'un champ de cumulus à partir d'un seul nuage cubique.

htrdr-atmosphere -vf \
    -a data/clear_sky_opt_prop_SMLSATM.txt \
    -r -c data/cubic_cloud.htcp \
    -m data/Mie_LUT_Clouds.nc \
    -s sw=200,4000 \
    -Rg data/plane0.obj \
    -M data/grounds.mtls \
    -p pos=3000,3000,0:tgt=3000,3000,1:sz=6000,6000 \
    -i spp=128 \
    -o flux_cloudy_sky_128spp.ht \
    2>&1|tee log_htrdr.out

Comparer les temps de calcul et les flux estimés par rapport au calcul réalisé précédemment avec un seul nuage non répété et expliquer.

Partie 3.2 : expériences de sensibilité avec nuages

Reprendre les expériences de sensibilités effectuées en ciel clair (Q1, Q2, Q3 de la partie 2) et les refaire en présence de nuages. Comparer la sensibilité des flux aux différents paramètres en ciel clair vs. en présence de nuages.