lundi 4 novembre 2013

Mise en oeuvre des modèles météo WRF-ARW et WRF-NMM - Partie 7 - Mise en oeuvre de WRF NMM

Nous avons parcouru un grand chemin depuis le début de ce tutorial. Nous avons mis en oeuvre le modèle WRF ARW, modèle se basant sur l'hypothèse hydrostatique permettant de simplifier les calculs à l'échelle synoptique, et avons réalisé une simulation sur 24h. Puis nous avons appris à visualiser le résultat obtenu dans l'article Partie 6 - Visualisation des données. Je vous propose aujourd'hui de compiler et mettre en oeuvre la contrepartie non-hydrostatique du modèle WRF, à savoir WRF NMM, qui propose le jeu d'équations dynamiques le plus complet en prenant en compte l'accélération verticale aux petites échelles, celle des orages et autres phénomènes de méso-échelle.

Compilation de WRF-NMM


Attention si vous avez compilé WRF-ARW, il est conseillé de recopier votre dossier test/em_real dans un dossier dédié. La compilation de NMM requiert en effet que vous fassiez un ./clean, ce qui effacera vos exécutables ARW fraichement compilés.

En revanche nous n'aurons pas besoin de recompiler le pré-processeur.

Commençons par indiquer une variable d'environnement supplémentaire :

# export WRF_NMM_CORE=1

Puis tapez la commande :

# ./clean 

 
Normalement vous ne devriez pas avoir besoin de relancer un ./configure, sauf si vous souhaitez changer vos options de compilation.

Pour compiler WRF-NMM tapez la commande :

# ./compile nmm_real &> compile.log

Après un peu de temps la commande se termine. Listez le contenu du dossier main. Vous devriez trouver les fichiers suivants :
  • real_nmm.exe
  • wrf_nmm.exe
En cas de problème, je vous invite à consulter la section dédiée dans l'article Partie 4 - Compilation de WRF ARW, les causes d'erreur sont en effet souvent les mêmes.

Un run avec WRF-NMM


Les étapes d'un run avec WRF-NMM sont les mêmes que pour ARW. Nous devrons toutefois modifier quelques éléments dans les fichiers de configuration.

Pour le pré-processeur


Editez le fichier namelist.wps et modifiez les variables :
  • wrf_core = 'NMM' : changement de coeur dynamique
  • dx = 0.1, dy = 0.1 : les dimensions de grille sont désormais spécifiées en degré d'arc. Pour simplifier, 0,1° correspondent environ à 11km.
  • e_we : ce paramètre représente maintenant le nombre de colonnes paires dans la grille. Pour notre grille de 128, il faut donc indiquer 64.
  • e_sn : inchangé, c'est toujours 128 notre nombre de lignes.
Vous devrez également modifier la configuration de Metgrid, car NMM utilise une organisation de grille différente. Vous devrez donc indiquer le bon fichier METGRID.TBL à utiliser en créant des liens symboliques :

# rm metgrid/METGRID.TBL
# ln -s metgrid/METGRID.TBL.NMM metgrid/METGRID.TBL

La grille du modèle étant différente, il faudra relancer le pré-processeur pour régénérer les fichiers d'entrée. Le déroulement est en tout point identique à ARW (voir Partie 5 - Notre premier run WRF) :

# ./link_grib.csh ../DATA/
# ./geogrid.exe
# ./ungrib.exe
# ./metgrid.exe

A l'arrivée, les fichiers ont désormais la forme met_nmm.d01.2013-07-28_00:00:00.nc.

Pour WRF


Le run NMM se déroule dans le dossier WRFV3/test/nmm_real. Votre fichier namelist.input devra refléter de nombreux changements dont voici les principaux points :
  • dx = 0.1, dy = 0.1 : les dimensions de grille sont désormais spécifiées en degré d'arc. A faire correspondre à votre namelist.wps.
  • e_we et e_sn doivent refléter également votre namelist.wps.
  • restart_interval = 10800 : permet de reprendre un calcul interrompu, correspond à l'intervalle entre les fichiers de données. A indiquer sinon vous aurez un message d'erreur.
  • time_step = 30 : la condition de stabilité est un peu plus restrictive que pour ARW.
  • La section dynamics, dont les paramètres n'ont plus rien à voir.
  • Ajout d'une section noah_mp, paramètres supplémentaires pour la physique du sol.
  • Ajout d'une section dfi_control, paramètres du filtre à appliquer sur le modèle pour éliminer les ondes parasites induites notamment par les techniques d'intégration numérique.
Voici le fichier namelist.input complet :

&time_control
run_days = 0,
run_hours = 24,
run_minutes = 0,
run_seconds = 0,
start_year = 2013,
start_month = 07,
start_day = 28,
start_hour = 00,
start_minute = 00,
start_second = 00,
end_year = 2013,
end_month = 07,
end_day = 29,
end_hour = 00,
end_minute = 00,
end_second = 00,
interval_seconds = 10800
input_from_file = .true.,
history_interval = 60,
frames_per_outfile = 1000,
restart = .false.,
restart_interval = 10800,
io_form_history = 2
io_form_restart = 2
io_form_input = 2
io_form_boundary = 2
debug_level = 1000
/


&domains
time_step = 30,
time_step_fract_num = 0,
time_step_fract_den = 1,
max_dom = 1,
e_we = 64,
e_sn = 128,
e_vert = 30,
p_top_requested = 5000,
num_metgrid_levels = 27,
num_metgrid_soil_levels = 4,
dx = 0.1,
dy = 0.1,
grid_id = 1,
parent_id = 0,
i_parent_start = 1,
j_parent_start = 1,
parent_grid_ratio = 1,
parent_time_step_ratio = 1,
feedback = 1,
smooth_option = 0
/


&physics
mp_physics = 5,
ra_lw_physics = 99,
ra_sw_physics = 99,
nrads = 105,
nradl = 105,
co2tf = 1,
sf_sfclay_physics = 2,
sf_surface_physics = 2,
bl_pbl_physics = 2,
nphs = 6,
cu_physics = 2,
ncnvc = 6,
tprec = 3,
theat = 6,
tclod = 6,
trdsw = 6,
trdlw = 6,
tsrfc = 6,
pcpflg = .false.,
num_soil_layers = 4,
mp_zero_out = 0
gwd_opt = 0
/


&noah_mp
dveg = 2,
opt_crs = 1,
opt_sfc = 1,
opt_btr = 1,
opt_run = 1,
opt_frz = 1,
opt_inf = 1,
opt_rad = 1,
opt_alb = 2,
opt_snf = 1,
opt_tbot = 2,
opt_stc = 1,
/


&fdda
/


&dynamics
dyn_opt = 4
non_hydrostatic = .true.,
euler_adv = .true.,
idtadt = 1,
idtadc = 1,
codamp = 6.4,
coac = 1.6,
slophc = 6.364e-3,
wp = 0.15,
/


&bdy_control
spec_bdy_width = 5,
spec_zone = 1,
relax_zone = 4,
specified = .true.,
nested = .false.,
/


&grib2
/


&namelist_quilt
nio_tasks_per_group = 0,
nio_groups = 1,
/


&dfi_control
dfi_opt = 0,
dfi_nfilter = 7,


/

Il ne reste plus qu'à ajouter les liens vers les fichiers metgrid issus de l'étape du pré-processeur :

# ln -sf ../../../WPS/met_nmm.d01.2013-07-2* .

Et enfin de lancer le processus habituel Real / WRF :

# ./real_nmm.exe
# ./wrf.exe

Ou encore avec MPI :

# mpirun -np 4 ./real_nmm.exe
# mpirun -np 4 ./wrf.exe

A l'arrivée, vous obtenez un fichier NetCDF contenant la sortie de votre modèle. Le nommage est de la forme wrfout_d01_2013-07-28_00:00:00.

Avec le fichier de config que je vous ai fourni, il ne doit pas y avoir d'erreur. Toute erreur lors de l'exécution de WRF vient d'un mauvais paramètre de votre namelist. Prenez donc garde aux options de physique qui diffèrent beaucoup de ARW, et n'hésitez pas à regarder le fichier namelist original pour comparer. Lors de vos expérimentations, il se peut que WRF semble boucler indéfiniment sans progresser. Il s'agit d'un problème d'instabilité numérique : votre pas de temps est trop élevé, il vous faudra le réduire.


Conclusion


Après avoir réalisé toutes les étapes précédentes, celle-ci semble presque plus facile. Après tout, vous avez essuyé la plupart des plâtres avec le coeur ARW. La logique voudrait maintenant que l'on se jette sur NCL pour produire nos superbes cartes avec plein d'orages. Malheureusement, les choses ne sont jamais si simples en informatique, et surtout avec ce genre d'outils météo particulièrement techniques. NMM utilise un système de grille qui n'est pas exploitable directement avec NCL, et de ce fait aucun jeu de fonctions n'existe pour nous simplifier la tâche comme c'était le cas pour ARW. Nous allons devoir utiliser un outil nommé UPP (Unified Post Processor), conçu pour retraiter et convertir la grille NMM en un fichier GRIB exprimé en latitude/longitude plus classique. Cela sera l'objet de notre prochain article : Partie 8 - Le post-processeur UPP.