Ejemplo WRF

De NLHPC

Ejecución de WRF mediante el uso de módulos

Este documento tiene por objetivo guiar a los usuario del Laboratorio Nacional de Supercomputación NLHPC en en el proceso de ejecución de una simulación del modelo WRF mediante la cargar los módulos disponibles en nuestro [Gestor de Módulos LMOD https://wiki.nlhpc.cl/Lmod].

Los pasos necesarios para realizar una simulación son los siguientes:

Realizar la carga de módulos correspondiente a la versión de WRF/WPS deseada por el usuario

En este paso, el usuario podrá buscar mediante el sistema gestor de módulos LMOD las versiones de WRF y WPS disponibles, considerando que para una correcta ejecución de una simulación las versiones de WRF y WPS deben ser lo mas parecidas posibles.

Para realizar la búsqueda de módulos WRF y WPS, el usuario deberá ejecutar los comandos ml spider WRF y ml spider WPS. Lo que mostrará la siguiente información

(base) [usuario@leftraru1 run]$ ml spider WRF

-------------------------------------------------------------------------------------------------------------------
  WRF:
-------------------------------------------------------------------------------------------------------------------
    Description:
      The Weather Research and Forecasting (WRF) Model is a next-generation mesoscale numerical weather prediction system designed to serve both operational
      forecasting and atmospheric research needs. 

     Versions:
        WRF/3.7.1-dm+sm-polar
        WRF/3.7.1-dm+sm
        WRF/3.9.1-dm+sm+chem
        WRF/3.9.1-dm+sm-polar
        WRF/3.9.1-dmpar+chem
        WRF/4.0.3-dm+sm
        WRF/4.1-dm+sm
        WRF/4.1.2-dm+sm+oasis
        WRF/4.1.2-dm+sm
        WRF/4.1.3-dmpar
        WRF/4.1.5-dm+sm
        WRF/4.1.5-dmpar
        WRF/4.2.1-dmpar+xios+oasis
        WRF/4.2.2-dm+sm+chem
        WRF/4.2.2-dm+sm
        WRF/4.2.2-dmpar+chem
        WRF/4.3-dmpar
        WRF/4.3.1-dmpar+da
        WRF/4.3.2-dm+sm+chem
        WRF/4.3.2-dm+sm
        WRF/4.3.2-dmpar+chem
        WRF/4.3.2-dmpar
        WRF/4.3.3-dmpar
        WRF/4.4-dm+sm+chem+kpp
        WRF/4.4-dm+sm+chem
        WRF/4.4-dmpar+chem
        WRF/4.4-dmpar
     Other possible modules matches:
        CALWRF  WRFDA  WRFPLUS

-------------------------------------------------------------------------------------------------------------------
  To find other possible module matches execute:

      $ module -r spider '.*WRF.*'

-------------------------------------------------------------------------------------------------------------------
  For detailed information about a specific "WRF" module (including how to load the modules) use the module's full name.
  For example:

     $ module spider WRF/4.3.3-dmpar
-------------------------------------------------------------------------------------------------------------------

Mismo procedimiento para el caso de WPS

(base) [usuario@leftraru1 run]$ ml spider WPS

-------------------------------------------------------------------------------------------------------------------
  WPS:
-------------------------------------------------------------------------------------------------------------------
    Description:
      WRF Preprocessing System (WPS) for WRF. The Weather Research and Forecasting (WRF) Model is a next-generation mesoscale numerical weather prediction system
      designed to serve both operational forecasting and atmospheric research needs. 

     Versions:
        WPS/3.7.1-dmpar
        WPS/4.0.3-dmpar
        WPS/4.1-dmpar
        WPS/4.2-dmpar
        WPS/4.3.1-dmpar

-------------------------------------------------------------------------------------------------------------------
  For detailed information about a specific "WPS" module (including how to load the modules) use the module's full name.
  For example:

     $ module spider WPS/4.3.1-dmpar
-------------------------------------------------------------------------------------------------------------------

Ahora bien, una vez elegidos los módulos indicados, se procede a su carga en el sistema

ml WRF/4.1.3-dmpar
ml WPS/4.2-dmpar

Crear un directorio de trabajo para alojar la versión de WRF/WPS cargados previamente.

cd ~
mkdir TEST_WRF
cp -rv /home/lmod/software/WRF/4.1.3-intel-2019b-dmpar/WRF-4.1.3 ~/TEST_WRF
cp -rv /home/lmod/software/WPS/4.2-intel-2019b-dmpar/WPS-4.2 ~/TEST_WRF

Descargar y descomprimir el archivo WPS_GEOG

cd ~/TEST_WRF/WPS-4.2
wget https://www2.mmm.ucar.edu/wrf/src/wps_files/geog_high_res_mandatory.tar.gz
tar -xvzf geog_high_res_mandatory.tar.gz

Editar el archivo namelist.wps, de manera que pueda linkear apropiadamente los datos de geografía

&share
 wrf_core = 'ARW',
 max_dom = 1,
 start_date = '2021-01-30_12:00:00','2021-01-30_12:00:00',
 end_date   = '2021-01-30_18:00:00','2021-01-30_21:00:00',
 interval_seconds = 10800
/

&geogrid
 parent_id         =   1,   1,
 parent_grid_ratio =   1,   3,
 i_parent_start    =   1,  53,
 j_parent_start    =   1,  25,
 e_we              =  150, 220,
 e_sn              =  130, 214,
 geog_data_res = 'default','default',
 dx = 27000,
 dy = 27000,
 map_proj = 'lambert',
 ref_lat   = -33.00,
 ref_lon   = -80.00,
 truelat1  =  -32.0,
 truelat2  =  -34.0,
 stand_lon = -71.0,
 geog_data_path = './WPS_GEOG/'
/

&ungrib
 out_format = 'WPS',
 prefix = 'FILE',
/

&metgrid
 fg_name = 'FILE'
/

En este ejemplo se ha descargado la data geog mandatoria, pero existe data opcional en caso de ser necesaria.

WPS_GEOG se descargó en /home/nombre_usuario/TEST_WRF/WPS-4.2 pero cada usuario puede descargarla donde desee. Y como se puede apreciar, la ruta geog_data_path es la que debe apuntar a esta carpeta.

Enlazar simbólicamente la Vtable a utilizar, el cual debe quedar en la ruta donde está el preprocesador WPS

cd ~/TEST_WRF/WPS-4.2
ln -s ungrib/Variable_Tables/Vtable.GFS Vtable

Ejecutar el comando geogrid.exe, el cual nos permitirá generar nuestro dominio.

srun geogrid.exe

Descargar datos de CI y CB para realizar el preproceso de datos

En este caso, clonaremos desde el git NLHPC datos de prueba, los cuales nos permitirán ejecutar los procesos de ungrib.exe y metgrid.exe respectivamente. En este proceso, copiaremos los datos y desde la carpeta de WPS realizaremos el proceso de linkeo a dichos datos mediante el script link_grib.csh. Finalmente ejecutaremos ungrib.exe y metgrid.exe

cd ~/TEST_WRF/
wget https://github.com/nlhpc-training/Tutorial-WRF/archive/refs/heads/main.zip
unzip main.zip
cd ~/TEST_WRF/WPS-4.2/
./link_grib.csh ~/TEST_WRF/Tutorial-WRF-main/
srun ungrib.exe
srun metgrid.exe

En este ejemplo se ha ejecutado interactivamente el preproceso de datos ya que el dominio y la data han sido pensados para un ejercicio de poca duración. Ahora bien, en el caso de que el usuario deba preprocesar información de largo aliento, se recomienda crear un script y lanzarlo mediante sbatch.

Crear el archivo de configuración namelist.input según lo requerido

Para este caso, ingresamos a la carpeta run de WRF y editaremos el archivo namelist.input

cd ~/TEST_WRF/WRF-4.1.3/run/
vi namelist.input

De manera tal que quede como el siguiente.

 &time_control
 run_days                            = 0,
 run_hours                           = 6,
 run_minutes                         = 0,
 run_seconds                         = 0,
 start_year                          = 2021, 2021,
 start_month                         = 01,   01,
 start_day                           = 30,   29,
 start_hour                          = 12,   00,
 end_year                            = 2021, 2021,
 end_month                           = 01,   02,
 end_day                             = 30,   01,
 end_hour                            = 18,   00,
 interval_seconds                    = 10800
 input_from_file                     = .true.,.true.,
 history_interval                    = 60,  60,
 frames_per_outfile                  = 1, 1,
 restart                             = .false.,
 restart_interval                    = 7200,
 io_form_history                     = 2
 io_form_restart                     = 2
 io_form_input                       = 2
 io_form_boundary                    = 2
 /

 &domains
 time_step                           = 60,
 time_step_fract_num                 = 0,
 time_step_fract_den                 = 1,
 max_dom                             = 1,
 e_we                                = 150,    220,
 e_sn                                = 130,    214,
 e_vert                              = 45,     45,
 dzstretch_s                         = 1.1
 p_top_requested                     = 5000,
 num_metgrid_levels                  = 34,
 num_metgrid_soil_levels             = 4,
 dx                                  = 27000,
 dy                                  = 27000,
 grid_id                             = 1,     2,
 parent_id                           = 0,     1,
 i_parent_start                      = 1,     53,
 j_parent_start                      = 1,     25,
 parent_grid_ratio                   = 1,     3,
 parent_time_step_ratio              = 1,     3,
 feedback                            = 1,
 smooth_option                       = 0
 /

 &physics
 physics_suite                       = 'CONUS'
 mp_physics                          = -1,    -1,
 cu_physics                          = -1,    -1,
 ra_lw_physics                       = -1,    -1,
 ra_sw_physics                       = -1,    -1,
 bl_pbl_physics                      = -1,    -1,
 sf_sfclay_physics                   = -1,    -1,
 sf_surface_physics                  = -1,    -1,
 radt                                = 15,    15,
 bldt                                = 0,     0,
 cudt                                = 0,     0,
 icloud                              = 1,
 num_land_cat                        = 21,
 sf_urban_physics                    = 0,     0,
 fractional_seaice                   = 1,
 /

 &fdda
 /

 &dynamics
 hybrid_opt                          = 2,
 w_damping                           = 0,
 diff_opt                            = 2,      2,
 km_opt                              = 4,      4,
 diff_6th_opt                        = 0,      0,
 diff_6th_factor                     = 0.12,   0.12,
 base_temp                           = 290.
 damp_opt                            = 3,
 zdamp                               = 5000.,  5000.,
 dampcoef                            = 0.2,    0.2,
 khdif                               = 0,      0,
 kvdif                               = 0,      0,
 non_hydrostatic                     = .true., .true.,
 moist_adv_opt                       = 1,      1,
/ scalar_adv_opt                      = 1,      1,
/ gwd_opt                             = 1,      0,
 /

 &bdy_control
 spec_bdy_width                      = 5,
 specified                           = .true.
 /

 &grib2
 /

&diags
 diag_nwp2 = 1
 /

 &namelist_quilt
 nio_tasks_per_group = 0,
 nio_groups = 1,
 /

Ejecución de real.exe

En este punto, debemos linkear los datos met_em resultantes del proceso metgrid.exe y posteriormente ejecutar el comando real.exe.

cd ~/TEST_WRF/WRF-4.1.3/run/
ln -s ~/TEST_WRF/WPS-4.2/met_em.d01.2021-01-30_1* .
srun real.exe 

Realizar un Script de ejecución de WRF, de tal manera que se pueda enviar esta tarea al gestor SLURM para su procesamiento

Creamos el archivo lanza-wrf-sh y lo editamos de la siguiente manera.

#!/bin/bash
#---------------Script SBATCH - NLHPC ----------------
#SBATCH -J TestJob_wrf
#SBATCH -p slims
#SBATCH -n 20
#SBATCH --ntasks-per-node=20
#SBATCH -c 1
#SBATCH --mem-per-cpu=2300
#SBATCH --mail-user=usuario@nlhpc.cl
#SBATCH --mail-type=ALL
#SBATCH -o asd_%j.out
#SBATCH -e asd_%j.err

#-----------------Toolchain---------------------------
ml purge
ml intel/2019b
# ----------------Modulos----------------------------
ml  WPS/4.2-dmpar   WRF/4.1.3-dmpar  
# ----------------Comando--------------------------
cd ~/TEST_WRF/WRF-4.1.3/run/
time mpiexec wrf.exe

Finalmente ejecutamos este script mediante el comando sbatch

sbatch lanza-wrf.sh