Skip to content

lvc0107/wrf_mendieta

Repository files navigation

alt tag

Instalación y ejecución de WRF en Mendieta

Índice

  1. Introducción
  2. Descarga de WRF/WPS/ARWpost
  3. Instalación de WRF + dependencias
  4. Obtención de datos terrestres
  5. Ejecución del modelo
  6. Análisis y control de ejecución
  7. Bibliografía & Guías de instalación tomadas de referencia

1. Introducción

La implementación de WRF en el cluster Mendieta se encuadra en el marco de la Tesis de Licenciatura en Ciencias de la Computación(FaMAF-UNC) de Luis Miguel Vargas Calderon.

Código utilizado:

Procesamiento: WRF3.8 Pre-procesamiento: WPS3.8 Post-procesamiento: ARWpost_V3

Para versiones posteriores a 3.8 realizar este procedimiento cambiando 3.8 por 3.x

Requerimientos:
Instalados en Mendieta:

  • perl
  • netcdf
  • hdf5
  • openmpi

No instalados en Mendieta:

  • Jasper: Herramienta adicional para pre-procesamiento
  • Grads: Herramienta adicional para post-procesamiento

2. Descarga de WRF/WPS/ARWpost

clonar este repo:

ssh <USER>@mendieta.ccad.unc.edu.ar
cd $HOME
git clone https://github.com/lvc0107/wrf_mendieta.git
cd wrf_mendieta
mkdir WRF3.8 

Los modulos necesarios para ejecutar WRF en Mendieta deben cargarse ejecutando el script "set_configuration.sh " Cargar las siguientes variables de entorno

. set_configuration.sh 3.8

Descarga de WRF

cd $WRF_BASE/WRF3.8
wget http://www2.mmm.ucar.edu/wrf/src/WRFV3.8.TAR.gz
tar -xvzf WRFV3.8.TAR.gz
rm WRFV3.8.TAR.gz

Descarga de WPS

cd $WRF_BASE/WRF3.8
wget http://www2.mmm.ucar.edu/wrf/src/WPSV3.8.TAR.gz
tar -xvzf WPSV3.8.TAR.gz
rm WPSV3.8.TAR.gz

Descarga de ARWpost

cd $WRF_BASE/WRF3.8
wget http://www2.mmm.ucar.edu/wrf/src/ARWpost_V3.tar.gz
tar -xvzf ARWpost_V3.tar.gz 
rm ARWpost_V3.tar.gz

3. Instalación de WRF + dependencias

3.1. Seteo de entorno

Jasper:

cd $WRF_BASE

mkdir -p library/jasper
cd library/jasper
wget http://www.ece.uvic.ca/~mdadams/jasper/software/jasper-1.900.1.zip
unzip jasper-1.900.1.zip
cd jasper-1.900.1
./configure --prefix=$WRF_BASE/library/jasper
make
make check
make install

Chequeo de la correcta instalación de jasper:

ls ../bin/
imgcmp  imginfo  jasper  tmrdemo

ATENCION!!! La siguiente sección debe usarse en caso de que las dependencias de MENDIETA no estén instaladas.
Actualmente las dependencias necesarias si están instaladas por lo tanto pasamos directamente a la sección 3.1.2.
En caso de que no estuviesen instaladas seguir en la siguiente sección. También es importante cambiar "set_configuration.sh" por "set_custom_configuration.sh" en el archivo run_wrf_model.sh.

3.1.1 Instalación de tools propias (Sin usar las que provee Mendieta)

Cargar las siguientes variables de entorno

. set_custom_configuration.sh 3.8

Nota : si surge el error:

 -bash: module: command not found

Esto significa que el software Environment modules no esta instalado. Comentar todas las lineas que usen el comando module.

Configuracion inicial a agregar en los archivos set_configuracion.sh, set_custom_configuration.sh

export CPPFLAGS="-I${NETCDF}/include -I${HDF5}/include -I${ZLIB}/include"
export LDFLAGS="-L${NETCDF}/lib -L${HDF5}/lib -L${ZLIB}/lib"
export LD_LIBRARY_PATH=${ZLIB}/lib:${HDF5}/lib:${NETCDFC}/lib:${LD_LIBRARY_PATH}

export WRFIO_NCD_LARGE_FILE_SUPPORT=1
export WRF_EM_CORE=1

### Folder for grads configuration.
export GADDIR=$WRF_BASE/library/grads-2.0.2/data
export PATH=$PATH:$WRF_BASE/library/grads-2.0.2/bin

Zlib

cd $WRF_BASE/library
mkdir zlib
cd zlib
wget http://fossies.org/linux/misc/zlib-1.2.8.tar.gz
tar -xvf zlib-1.2.8.tar.gz
rm zlib-1.2.8.tar.gz
cd zlib-1.2.8/
./configure --prefix=$(pwd)
make test
make install
# update $WRF_BASE/set_custom_configuration.sh with the following variable
# export ZLIB=$WRF_BASE/library/zlib/zlib-1.2.8
. set_custom_configuration.sh 3.8

HDF5

cd $WRF_BASE/library
mkdir hdf5
cd hdf5/
wget https://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.13/src/hdf5-1.8.13.tar.gz
tar -xvzf hdf5-1.8.13.tar.gz
hdf5-1.8.13.tar.gz
cd hdf5-1.8.13/
mkdir build
cd build
make clean
 ./configure --prefix=$(pwd)/build
make
make test
make install
make check-install
cd $WRF_BASE
# update $WRF_BASE/set_custom_configuration.sh with the following variable
# export HDF5=$WRF_BASE/library/hdf5-1.8.13/build
. set_custom_configuration.sh 3.8

NETCDF

cd $WRF_BASE/library
mkdir netcdf
wget http://pkgs.fedoraproject.org/repo/pkgs/netcdf/netcdf-4.3.3.1.tar.gz/5c9dad3705a3408d27f696e5b31fb88c/netcdf-4.3.3.1.tar.gz
md5sum  netcdf-4.3.3.1.tar.gz | grep 5c9dad3705a3408d27f696e5b31fb88c
tar -xvf netcdf-4.3.3.1.tar.gz
rm netcdf-4.3.3.1.tar.gz
cd netcdf-4.3.3.1/
mkdir build
make clean
./configure --prefix=$(pwd)/build FC=gfortran F77=gfortran CC=gcc --enable-shared LDFLAGS="-L$HDF5/lib"  CPPFLAGS="-I$HDF5/include"
make
make check
make install
cd $WRF_BASE
# update $WRF_BASE/set_custom_configuration.sh with the following variable
# export HDF5=$WRF_BASE/library/netcdf/netcdf-4.3.3.1/build
. set_custom_configuration.sh 3.8

NETCDF-Fortran

cd $WRF_BASE/library/netcdf
wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-fortran-4.2.tar.gz
tar -xvf netcdf-fortran-4.2.tar.gz
rm netcdf-fortran-4.2.tar.gz
# si no esta disponible el recurso intentar:
#git clone https://github.com/Unidata/netcdf-fortran.git #ultimo relase (no 4.2)
cd  netcdf-fortran-4.2
make clean
#install in the netcdf build directory
./configure --prefix=$(pwd)/../netcdf-4.3.3.1/build FC=gfortran F77=gfortran CC=gcc --enable-shared 2>&1 | tee configure.log
make
make check
make install

MVAPICH

cd $WRF_BASE/library
mkdir mvapich
cd mvapich
wget http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.2.tar.gz
tar -xvf  mvapich2-2.2.tar.gz
rm mvapich2-2.2.tar.gz
cd  mvapich2-2.2
#configure: error: 'infiniband/mad.h not found. Please retry with --disable-mcast'
 ./configure --prefix=$(pwd)/.. --disable-mcast
make
make install

# Add $(pwd)/../bin to PATH

3.1.2 Uso de tools instaladas en Mendieta

. set_configuration.sh

3.2. Instalación de WRF

cd $WRF_DIR
./clean -a
./configure

Al iniciar configure debe dar un mensaje como el siguiente:
De esta pinta si se esta usando set_configuration.sh (Herramientas provistas por Miendeta. RECOMENDADO)

checking for perl5... no
checking for perl... found /usr/bin/perl (perl)
Will use NETCDF in dir: /opt/netcdf-fortran/4.4.2-netcdf_4.3.3.1-gcc_4.9.2
Will use PHDF5 in dir: /opt/hdf5/1.8.15-gcc_4.9.2
which: no timex in (/opt/netcdf-fortran/4.4.2-netcdf_4.3.3.1-gcc_4.9.2/bin:/opt/netcdf/4.3.3.1-gcc_4.9.2/bin:/opt/hdf5/1.8.15-gcc_4.9.2/bin:/opt/openmpi-cuda/1.8.8-gcc_4.9-cuda_7.0-clean/bin:/opt/gcc/4.9.3/bin:/opt/cuda/7.0/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/ibutils/bin:/opt/mendieta/bin:/home/lvargas/bin:/home/lvargas/wrf_mendieta/library/grads-2.0.2/bin)

O de esta pinta si se esta usando set_custom_configuration.sh

checking for perl... found /usr/bin/perl (perl)
Will use NETCDF in dir: /home/<USER>/wrf_mendieta/library/netCDF
Will use PHDF5 in dir: /home/<USER>/wrf_mendieta/library/hdf5-1.8.13
which: no timex in (/opt/gcc/4.9.3/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/ibutils/bin:/opt/mendieta/bin:/home/<USER>/bin

Verificar que las variables NETCDF y PHDF5 apunten a los path seteados en los archivos set_configuration.sh (set_custom_configuration.sh).

Elegir opciones 34-1 para usar procesos con memoria distribuida: openmpi

34. x86_64 Linux, gfortran compiler with gcc (dmpar)
Compile for nesting? (1=basic) 1

Para utilizar openmpi, se debe actualizar la variable DM_CC con el valor -DMPI2_SUPPORT en el archivo configure.wrf.

DM_CC           =       mpicc -DMPI2_SUPPORT

En caso de correr WRF en un solo nodo es necesario usar procesos con memoria compartida: openMP.

33.  x86_64 Linux, gfortran compiler with gcc   (smpar)
Compile for nesting? (1=basic) 1
./compile em_real &> compile.log

Comprobar la generación de los siguientes archivos .exe:

ls -lt main/*.exe

real.exe
tc.exe
nup.exe #No presente en WRF3.8
ndown.exe
wrf.exe

3.3 Instalación de WPS

cd $WPS_DIR
./clean -a
./configure

Notar que al iniciar debe dar un mensaje como el siguiente:

Will use NETCDF in dir: /home/<USER>/library/netCDF
Found Jasper environment variables for GRIB2 support...
  $JASPERLIB = /home/<USER>/wrf_mendieta/library/jasper/lib
  $JASPERINC = /home/<USER>/wrf_mendieta/library/jasper/include

Elegir opción 1

Actualizar Vtable.

cd ungrib/Variable_Tables
wget http://www2.mmm.ucar.edu/wrf/src/Vtable.GFS_new
cd ../../
ln -s ungrib/Variable_Tables/Vtable.GFS_new Vtable

En caso de correr WRF en un solo nodo es necesario se debe declarar explicitamente el uso de openMP agregando el flag -lgomp a la variable WRF_LIB en el archivo configure.wps.

WRF_LIB         =       -L$(WRF_DIR)/external/io_grib1 -lio_grib1 \
                        -L$(WRF_DIR)/external/io_grib_share -lio_grib_share \
                        -L$(WRF_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_DIR)/external/io_netcdf -lwrfio_nf \
                        -L$(NETCDF)/lib -lnetcdff -lnetcdf -lgomp
./compile &> compile.log

Comprobar la generación de los siguientes archivos .exe:

ls -lt *.exe
metgrid.exe -> metgrid/src/metgrid.exe
ungrib.exe -> ungrib/src/ungrib.exe
geogrid.exe -> geogrid/src/geogrid.exe

Copiar este script:

cp $WRF_BASE/link_grib.csh $WPS_DIR

3.4 Instalación de ARWpost

cd $ARWPOST_DIR

En caso de que no este presente, agregar -lnetcdff en src/Makefile

ARWpost.exe: $(OBJS)
    $(FC) $(FFLAGS) $(LDFLAGS) -o $@ $(OBJS) 
        -L$(NETCDF)/lib -I$(NETCDF)/include -lnetcdff -lnetcdf
./clean -a
./configure

Elegir opción 3.

./compile

Comprobar la generación del siguiente archivo .exe:

ls *.exe 
ARWpost.exe 

3.5 Instalación de grads

cd $WRF_BASE/library
wget ftp://cola.gmu.edu/grads/2.0/grads-2.0.2-bin-CentOS5.8-x86_64.tar.gz
tar -xvzf grads-2.0.2-bin-CentOS5.8-x86_64.tar.gz
rm grads-2.0.2-bin-CentOS5.8-x86_64.tar.gz
cd grads-2.0.2
mkdir data
_________________________________________________________________________

4. Obtención de datos terrestres

cd $WRF_BASE
wget http://www2.mmm.ucar.edu/wrf/src/wps_files/geog_complete.tar.bz2
tar -xjvf geog_complete.tar.bz2
rm geog_complete.tar.bz2

#datos adicionales
cd geog
wget http://www2.mmm.ucar.edu/wrf/src/wps_files/topo_gmted2010_30s.tar.bz2
tar -xjvf topo_gmted2010_30s.tar
rm topo_gmted2010_30s.tar

wget http://www2.mmm.ucar.edu/wrf/src/wps_files/topo_30s.tar.bz2
tar -xjvf topo_30s.tar.bz2
rm  topo_30s.tar.bz2

wget http://www2.mmm.ucar.edu/wrf/src/wps_files/modis_landuse_21class_30s.tar.bz2
tar -xjvf modis_landuse_21class_30s.tar.bz2
rm modis_landuse_21class_30s.tar.bz2
_________________________________________________________________________

5. Ejecución del modelo

Configuración de entorno:

cd $WRF_BASE/
. set_configuration.sh 3.8
chmod +x run_wrf_model.*         # Solo una vez es necesario

5.1. Crear el directorio scenarios con la siguiente estructura:

tree scenarios
scenarios
├── Scenario1
│   ├── namelist.ARWpost
│   └── namelist.input
├── Scenario2
│   ├── namelist.ARWpost
│   └── namelist.input
├── Scenario3
│   ├── namelist.ARWpost
│   └── namelist.input
│   .
│   .
│   .
├── ScenarioN
│   ├── namelist.ARWpost
│   └── namelist.input
├── gradfile1.gs
├── gradfile2.gs
├── .
├── .
├── .
├── gradfileN.gs
└── namelist.wps

Los archivos namelist.{wps, input, arwpost} creados en la estructura de directorios anterior son inputs de configuración necesarios para cada una de las siguientes etapas:

pre-procesamiento: utiliza namelist.wps procesamiento: utiliza namelist.wrf post-procesamiento: utiliza namelist.arwpost

Tal como han sido creado en la estructura de directorios anterior funcionan como templates. Se deben configurar cada vez que se considere necesario, pero dejándolos siempre dentro del directorio scenarios. El script que lanza los jobs genera una copia de estos templates, les actualiza las fechas y los deploya en los directorios necesarios para que WRF los procese.

Ejemplo usado para CAEARTE

tree scenarios
scenarios
├── A_Thompson_MYJ
│   ├── namelist.ARWpost
│   └── namelist.input
├── B_Marrison_MYJ_sf_sfclay_physics
│   ├── namelist.ARWpost
│   └── namelist.input
├── cbar.gs
├── C_WDM6_QNSE_sf_sfclay_physics
│   ├── namelist.ARWpost
│   └── namelist.input
├── D_WRF6_MYJ_sf_sfclay_physics
│   ├── namelist.ARWpost
│   └── namelist.input
├── E_WDM6_MYNN3
│   ├── namelist.ARWpost
│   └── namelist.input
├── HPC_CBA_Rain.gs
├── HPC_CBA_Tmax_Min.gs
├── meteogramas_Preciptation.gs
├── meteogramas_rh.gs
├── meteogramas_Temp.gs
├── meteogramas_WindDir.gs
├── meteogramas_WindSpeed.gs
├── namelist.wps
└── rgbset.gs

5.2 Archivos configurables por el usuario

  1. namelist.wps: configuración para etapa de pre-prosesamiento. Las fechas son actualizadas automaticamente por el script run_wrf_model.py
cd $WRF_BASE/scenarios
cat namelist.wps

&share
 wrf_core = 'ARW',
 max_dom = 1,
 start_date = 2016-10-20_00:00:00
 end_date = 2016-10-21_12:00:00
 interval_seconds = 10800
 io_form_geogrid = 2,
/

&geogrid
 parent_id         =   1,   1,
 parent_grid_ratio =   1,   3,
 i_parent_start    =   1,   37,
 j_parent_start    =   1,   83,
 e_we              =  300,  61,
 e_sn              =  250,  91,
 geog_data_res     = '30s','30s',
 dx = 4000,
 dy = 4000,
 map_proj = 'lambert',
 ref_lat   = -32.4,
 ref_lon   = -66.0,
 truelat1  = -60.0,
 truelat2  = -30.0,
 stand_lon = -63.6,
 geog_data_path = '/home/lvargas/wrf_mendieta/geog'
/

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

&metgrid
 fg_name = 'GFS25'
 io_form_metgrid = 2,
/
  1. scenarioi/namelist.input: Configuración para etapa de procesamiento. (Para cada scenario)

Las fechas son actualizadas automaticamente por el script run_wrf_model.py

cd $WRF_BASE/scenarios
cat scenarios/A_Thompson_MYJ/namelist.input

 &time_control
 run_days                            = 0
 run_hours                           = 36
 run_minutes                         = 0
 run_seconds                         = 0
 start_year                          = 2016
 start_month                         = 10
 start_day                           = 20
 start_hour                          = 00
 start_minute                        = 00
 start_second                        = 00
 end_year                            = 2016
 end_month                           = 10
 end_day                             = 21
 end_hour                            = 12
 end_minute                          = 00
 end_second                          = 00
 interval_seconds                    = 10800
 input_from_file                     = .true.,.False.,.true.,
 history_interval                    = 60,  60,   60,
 frames_per_outfile                  = 1000, 1000, 1000,
 restart                             = .false.,
 restart_interval                    = 5000,
 io_form_history                     = 2
 io_form_restart                     = 2
 io_form_input                       = 2
 io_form_boundary                    = 2
 debug_level                         = 0
 /

 &domains
 time_step                           = 15,
 time_step_fract_num                 = 0,
 time_step_fract_den                 = 1,
 max_dom                             = 1,
 e_we                                = 300,  61,
 e_sn                                = 250,  91,
 e_vert                              = 35,    28,    28,
 p_top_requested                     = 5000,
 num_metgrid_levels                  = 32,
 num_metgrid_soil_levels             = 4,
 dx                                  = 4000, 10000,  3333.33,
 dy                                  = 4000, 10000,  3333.33,
 grid_id                             = 1,     2,     3,
 parent_id                           = 1,     1,     2,
 i_parent_start                      = 1,     37,    30,
 j_parent_start                      = 1,     83,    30,
 parent_grid_ratio                   = 1,     3,     3,
 parent_time_step_ratio              = 1,     3,     3,
 feedback                            = 1,
 smooth_option                       = 0
 /

 &physics
 mp_physics                          = 8,     2,     2,
 ra_lw_physics                       = 1,     1,     1,
 ra_sw_physics                       = 2,     1,     1,
 radt                                = 4,    30,    30,
 sf_sfclay_physics                   = 2,     1,     1,
 sf_surface_physics                  = 2,     2,     2,
 bl_pbl_physics                      = 2,     1,     1,
 bldt                                = 0,     0,     0,
 cu_physics                          = 0,     5,     0,
 cudt                                = 5,     5,     5,
 isfflx                              = 1,
 ifsnow                              = 1,
 icloud                              = 1,
 surface_input_source                = 1,
 num_soil_layers                     = 4,
 sf_urban_physics                    = 0,     0,     0,
 /

 &fdda
 /

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

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

 &grib2
 /
  1. scenarioi/namelist.ARWpost: Configuración para etapa de post-procesamiento. (Para cada scenario)

Las fechas son actualizadas automaticamente por el script run_wrf_model.py

cd $WRF_BASE/scenarios
cat scenarios/A_Thompson_MYJ/namelist.ARWpost

&datetime
 start_date = 2016-10-20_00:00:00
 end_date = 2016-10-21_12:00:00
 interval_seconds = 3600,
 tacc = 0,
 debug_level = 0,
/

&io
 input_root_name = '../wrf_run/wrfout_d01_2016-10-20_00:00:00',
 output_root_name = './output/output'
 plot = 'all_list'
 fields = 'height,pressure,tk,tc,rh2,wd10,ws10'
 mercator_defs = .true.
/
 split_output = .true.
 frames_per_outfile = 2


 plot = 'all'
 plot = 'list'
 plot = 'all_list'
! Below is a list of all available diagnostics
 fields = 'height,geopt,theta,tc,tk,td,td2,rh,rh2,umet,vmet,pressure,u10m,v10m,wdir,wspd,wd10,ws10,slp,mcape,mcin,lcl,lfc,cape,cin,dbz,max_dbz,clfr'


&interp
 interp_method = 0,
 interp_levels = 1000.,950.,900.,850.,800.,750.,700.,650.,600.,550.,500.,450.,400.,350.,300.,250.,200.,150.,100.,
/
extrapolate = .true.

 interp_method = 0,     ! 0 is model levels, -1 is nice height levels, 1 is user specified pressure/height

 interp_levels = 1000.,950.,900.,850.,800.,750.,700.,650.,600.,550.,500.,450.,400.,350.,300.,250.,200.,150.,100.,
 interp_levels = 0.25, 0.50, 0.75, 1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00, 9.00, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0,

  1. set_configuration.sh : Este archivo carga los módulos a usar: compilador , MPI, etc. por default usa gcc y openmpi Pero eventualmente se podrían usar otras opciones como mvapich e icc. Sin embargo si se desea probar otros módulos deben Compilarse todas las soluciones de nuevo, ie modificar el archivo set_configuration.sh y volver a realizar todos los pasos desde el paso 1: Instalación de WRF y dependencias
  2. set_custom_configuration.sh: Idem anterior pero utilizando NetCDF/HDF5 compilados manualmenente

Ver módulos que carga set_configuration.sh

module list
Currently Loaded Modulefiles:
  1) cuda/7.0                            5) libs/hdf5/1.8.15-gcc_4.9.2
  2) libs/gcc/4.9                        6) libs/netcdf/4.3.3.1-gcc_4.9.2
  3) compilers/gcc/4.9                   7) libs/netcdf-fortran/4.4.2-netcdf_4.3.3.1-gcc_4.9.2
  4) mpi/openmpi/1.8.4-gcc_4.9.2                

Ver todos los módulos disponibles en el cluster

module avail

5.3 Correr script: run_wrf_model.py

Este script realiza las siguientes tareas:

  1. Descarga grib files dada una fecha en el directorio gribfiles creado en el step anterior
  2. Actualiza fecha en namelist.wps en el directorio scenarios
  3. Actualiza fecha en los namelist.input dentro de cada directorio scenarios/Scenarioi con i:{1..N}
  4. Actualiza fecha en namelist.ARWpost dentro de cada directorio scenarios/Scenarioi con i:{1..N}
  5. Ejecuta el modelo para cada uno de los scenarios
./run_wrf_model.py --start_date=STARTDATE --offset=OFFSET --nodes=2
#STARTDATE tiene el siguiente formato: YYYYMMDDHH

El script ejecuta todos los scenarios en paralelo corriendo WRF en 2 nodos de la partición multi(40 cores en total).

Ejemplo: Para ejecutar todos los scenarios en dos nodos de multi (20 cores p/nodo)

./run_wrf_model.py --start_date=2016102000 --offset=36 --nodes=2

Nota: Ajustar el tiempo de ejecución del modelo en el script job_wrf_N_nodes.sh de la forma más precisa posible. # Con N en {2, 3, 4, 5, 6, 7, 8}

Ejemplo si la ejecución del modelo toma aproximadamente (poco menos que) una hora y media:

SBATCH --time 0-1:30

El output de la ejecución es el siguiente:



    __          _______  ______
     \ \        / /  __ \|  ____|
      \ \  /\  / /| |__) | |__
       \ \/  \/ / |  _  /|  __|
        \  /\  /  | | \ \| |
         \/  \/   |_|  \_\_|


Start forecast date: 2016-10-20_00:00:00
End forecast date: 2016-10-21_12:00:00



==================================================================
sbatch job_wrf_2_nodes.sh D_WRF6_MYJ_sf_sfclay_physics 2016-10-20_00:00:00 2016-10-21_12:00:00
Submitted batch job 50360
==================================================================
sbatch job_wrf_2_nodes.sh A_Thompson_MYJ 2016-10-20_00:00:00 2016-10-21_12:00:00
Submitted batch job 50361
==================================================================
sbatch job_wrf_2_nodes.sh C_WDM6_QNSE_sf_sfclay_physics 2016-10-20_00:00:00 2016-10-21_12:00:00
Submitted batch job 50362
==================================================================
sbatch job_wrf_2_nodes.sh E_WDM6_MYNN3 2016-10-20_00:00:00 2016-10-21_12:00:00
Submitted batch job 50363
==================================================================
sbatch job_wrf_2_nodes.sh B_Marrison_MYJ_sf_sfclay_physics 2016-10-20_00:00:00 2016-10-21_12:00:00
Submitted batch job 50364
squeue -u $USER
PARTITION   JOBID PRIO       NAME     USER ST       TIME NO CPU  GRES NODELIST(REASON)
multi       50360 2472       WRF   lvargas R        0:13  2  40 (null mendieta[17-18])
multi       50361 2472       WRF   lvargas R        0:13  2  40 (null mendieta[20-21])
multi       50362 2472       WRF   lvargas PD       0:00  2  40 (null (Resources)
multi       50363 2472       WRF   lvargas PD       0:00  2  40 (null (Resources)
multi       50364 2472       WRF   lvargas PD       0:00  2  40 (null (Resources)

El script run_wrf_model.py ejecuta el comando squeue -u $USER luego de hacer submit de los jobs (ejecución del scenario). Estos jobs están en estado PD (pending) de obtener recursos. Cuando haya nodos disponibles para la ejecución los jobs que obtengan recursos van a pasar a estado R (running).

EL log proporciona también información relevante:

  • PARTITION: Partición a la que pertenecen los nodos
  • JOBID: Identificador único del job (ejecución del scenario)
  • USER: Usuario que lanzo la ejecución
  • NAME: Nombre e identificador del job
  • TIME: Cuando el job está en estado R este valor se actualiza mostrando el tiempo transcurrido de ejecución. Importante: si el tiempo de ejecución es mayor al estimado en SBATCH --time el job se cancela. Por lo tanto es necesario actualizar ese valor en el script job_wrf_N_nodes.sh de manera que ese valor sea mayor y correr nuevamente.
  • NO: números de nodos asignados
  • CPU: número de cores asignados
  • NODELIST: lista de nodos asignados al job

Para ejecutar solo un scenario(por ejemplo A_Thompson_MYJ) en dos nodos de multi (20 cores p/nodo)
para las misma fecha de inicio y periodo de 36 hs

sbatch job_wrf_2_nodes.sh A_Thompson_MYJ 2016-10-20_00:00:00 2016-10-21_12:00:00

La ejecución genera los output en los directorios:

$WRF_BASE/output/$RUN_PARAMETERS/meteogramas

La ejecución genera logs en los directorios:

$WRF_BASE/logs/$RUN_PARAMETERS/$SLURM_JOB_ID

Donde RUN_PARAMETERS está definido en el script job_wrf_N_nodes.sh
# con N en {2, 3, 4, 5, 6, 7, 8}

Ver outpus generados:

cd $WRF_BASE
ls -l output/40_cores_A_Thompson_MYJ/meteogramas/
total 3.1M
-rw-rw-r-- 1 lvargas lvargas  16K Nov  5 06:13 temp_max_A.png
-rw-rw-r-- 1 lvargas lvargas 398K Nov  5 06:13 temp_max_A.tif
-rw-rw-r-- 1 lvargas lvargas  15K Nov  5 06:13 temp_min_A.png
-rw-rw-r-- 1 lvargas lvargas 398K Nov  5 06:13 temp_min_A.tif
-rw-rw-r-- 1 lvargas lvargas  26K Nov  5 06:13 rain24h_A.png
-rw-rw-r-- 1 lvargas lvargas 398K Nov  5 06:13 rain24h_A.tif
-rw-rw-r-- 1 lvargas lvargas  367 Nov  5 06:13 rain_COLONIA_CAROYA_A.txt
-rw-rw-r-- 1 lvargas lvargas  312 Nov  5 06:13 rain_CAPILLA_DEL_MONTE_A.txt
-rw-rw-r-- 1 lvargas lvargas  314 Nov  5 06:13 rain_CANALS_A.txt
-rw-rw-r-- 1 lvargas lvargas  341 Nov  5 06:13 rain_BRINCKMANN_A.txt
-rw-rw-r-- 1 lvargas lvargas  326 Nov  5 06:13 rain_BIALET_MASSE_A.txt
-rw-rw-r-- 1 lvargas lvargas  344 Nov  5 06:13 rain_BERROTARAN_A.txt
-rw-rw-r-- 1 lvargas lvargas  338 Nov  5 06:13 rain_BALNEARIA_A.txt
-rw-rw-r-- 1 lvargas lvargas  314 Nov  5 06:13 rain_ARROYO_CABRAL_A.txt
-rw-rw-r-- 1 lvargas lvargas  341 Nov  5 06:13 rain_ARROYITO_A.txt
-rw-rw-r-- 1 lvargas lvargas  324 Nov  5 06:13 rain_ALTA_GRACIA_A.txt
-rw-rw-r-- 1 lvargas lvargas  368 Nov  5 06:13 rain_ALMAFUERTE_A.txt
-rw-rw-r-- 1 lvargas lvargas  338 Nov  5 06:13 rain_ALICIA_A.txt
-rw-rw-r-- 1 lvargas lvargas  314 Nov  5 06:13 rain_ALEJO_LEDESMA_A.txt
-rw-rw-r-- 1 lvargas lvargas  341 Nov  5 06:13 rain_ELENA_A.txt
-rw-rw-r-- 1 lvargas lvargas  340 Nov  5 06:13 rain_DEVOTO_A.txt
-rw-rw-r-- 1 lvargas lvargas  359 Nov  5 06:13 rain_DESPEÑADEROS_A.txt

Se genera un reporte en el archivo meteogramas.html para visualizar estadisticas de todos los escenarios por región.

alt tag

También se pueden ejecutar los scripts:

job_wrf_1_nodes.sh  
job_wrf_3_nodes.sh  
job_wrf_4_nodes.sh  
job_wrf_5_nodes.sh  
job_wrf_6_nodes.sh  
job_wrf_7_nodes.sh  
job_wrf_8_nodes.sh  

Ejemplos que ejecutan los scenarios usando 3, 4 y 5 nodos de 20 cores c/u respectivamente

./run_wrf_model.py --start_date=2016102000 --offset=36 --nodes=3
./run_wrf_model.py --start_date=2016102000 --offset=36 --nodes=4
./run_wrf_model.py --start_date=2016102000 --offset=36 --nodes=5

Importante: La quota por usuario es de 500GiB. La instalación de WRF ocupa aproximadamente 100GiB (mayormente debido a los ~85 GiB al directorio geog en $WPS_DIR) Por lo tanto quedan disponibles ~400 GiB. Es necesario entonces limpiar (borrar) los resultados que se van generando periódicamente, luego de su procesamiento.

_________________________________________________________________________

6. Análisis y control de ejecución

Durante la ejecución de los jobs podemos ejecutar algunos comandos que nos brindan información del estado de la ejecución:

squeue -u $USER   # muestra el estado de los jobs propios
squeue            # muestra el estado de todos los jobs en el cluster

Si la ejecución de un job está en estado R podemos acceder al nodo para ver la ejecución en tiempo real

Ver uso de los cores en un nodo:

squeue -u $USER
multi  50361 2472        WRF lvargas R        0:13  2  40 (null mendieta[20-21])
ssh mendieta20         # también podríamos haber hecho ssh mendieta21

mendieta20 $ htop      # Ver estado de los cores. 

alt tag

Ver que funciones de wrf.exe realizan mas computo:

ssh mendieta20         # también podríamos haber hecho ssh mendieta21
mendieta20 $ perf top  # Ver funciones que consumen mas computo. 

alt tag

Conocer topologia del nodo:

ssh mendieta20         # también podríamos haber hecho ssh mendieta21
lstopo                 # Conocer topología del nodo

alt tag

Para hacer pruebas dentro de 1 de multi

salloc -p multi -n 20 srun --exclusive  --pty --preserve-env $SHELL
salloc: Pending job allocation 38170
salloc: job 38170 queued and waiting for resources
salloc: job 38170 has been allocated resources
salloc: Granted job allocation 38170
[lvargas@mendieta11 wrf_mendieta]
[lvargas@mendieta11 wrf_mendieta]./job_wrf_2_nodes.sh A_Thompson_MYJ 2016-10-20_00:00:00 2016-10-21_12:00:00
[lvargas@mendieta11 wrf_mendieta]squeue -u lvargas
PARTITION   JOBID PRIO       NAME     USER ST       TIME NO CPU  GRES NODELIST(REASON)
multi       38170 2115       srun  lvargas  R    1:58:54  1  20 (null mendieta11)
[lvargas@mendieta11 wrf_mendieta]

Ver informacion de la particion multi
sinfo -p multi
PARTITION  AVAIL  TIMELIMIT  NODES  STATE NODELIST
multi      up   4-00:00:00     13  alloc mendieta[09-18,20-22]
multi      up   4-00:00:00      1   idle mendieta19

7. Bibliografía & Guías de instalación tomadas de referencia

[1] http://forum.wrfforum.com/viewtopic.php?f=5&t=7099
[2] http://www.unidata.ucar.edu/software/netcdf/docs/building_netcdf_fortran.html
[3] http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap2.htm#_Required_Compilers_and_1
[4] http://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php#STEP5
[5] http://www2.mmm.ucar.edu/wrf/users/FAQ_files/FAQ_wrf_installation.html