Compilation et exécution de WPS et WRF

Ce document explique comment compiler la version 3.4.1 de  WRF (Weather Research &Forecasting) et WPS (WRF Preprocessing system) en utilisant les compilateurs Intel sur ClimServ.

"WRF was developed at the National Center for Atmospheric Research (NCAR)which is operated by the University Corporation for AtmosphericResearch (UCAR). NCAR and UCAR make no proprietary claims, eitherstatutory or otherwise, to this version and release of WRF and considerWRF to be in the public domain for use by any person or entity for anypurpose without any fee or charge. UCAR requests that any WRF userinclude this notice on any partial or full copies of WRF. WRF isprovided on an "AS IS" basis and any warranties, either express orimplied, including but not limited to implied warranties ofnon-infringement, originality, merchantability and fitness for aparticular purpose, are disclaimed. In no event shall UCAR be liablefor any damages, whatsoever, whether direct, indirect, consequential orspecial, that arise out of or in connection with the access, use orperformance of WRF, including infringement actions." (Cette description est issue de la page : http://www.mmm.ucar.edu/wrf/users/public.htm).

Obtenir le code source

Les codes source de WRF peuvent être téléchargés ici.

Pré-requis

Les librairies NetCDF, JASPER, NCARG et HDF5 requises par WRF et WPS sont installées sur ClimServ.

Ce tutoriel est réalisé pour la version 2011 du compilateur  PGI (voir article ici ).

Choisir les compilateurs PGF-GCC comme compilateurs MPI par défaut (voir article ici )

mpi-selector --yes --user --set openmpi-1.4.3-pgfgcc-x86_64
# se déloguer et/ou ouvrir une nouvelle session
mpi-selector --query
default:openmpi-1.4.3-pgfgcc-x86_64
level:user

Les commandes suivantes fonctionnent sous SHELL sh ou bash. Si le SHELL par défaut est csh ou tcsh, se placer sous bash :

bash

Compilation de l'application

On suppose dans la suite que l'application est installée dans le répertoire $HOME/WRF.

TOPDIR=$HOME/WRF
WRFDIR=$TOPDIR/WRFV3
WPSDIR=$TOPDIR/WPS

Copier ou déplacer les fichiers WRFV3.4.1.TAR.gz et WPSV3.4.1.TAR.gz dans le répertoire $TOPDIR, puis décompresser les archives :

cd $TOPDIR
tar -zxvf WRFV3.4.1.TAR.gz
tar -zxvf WPSV3.4.1.TAR.gz

Préparation de l'environnement de compilation de WRF et WPS :

# Pour activer le support des "Large Files" en NetCDF :
export WRFIO_NCD_LARGE_FILE_SUPPORT=1
# Définition des chemins d'acces aux librairies NetCDF, JASPER et HDF5 :
export NETCDF=/opt/netcdf/pgf
export JASPERLIB=/usr/lib64
export JASPERINC=/usr/include/jasper
export PHDF5=/opt/hdf5-1.8.5

Compilation de WRF :

# Compilation avec les compilateurs PGI avec GCC + parallèlisme MPI (dmpar) et OpenMP (smpar) : Option 4
cd $WRFDIR
clean -a
./configure
./compile em_real 2>&1 |tee compile.out

Compilation de WPS :

# Compilation avec les compilateurs PGI + parallèlisme MPI (dmpar) : Option 7
cd $WPSDIR
./configure
# Modification du fichier de configuration pour compatibilité avec NCARG :
#echo "g/-L\/data3a\/mp\/gill\/WPS_LIBS\/local\/lib/s/-L\/data3a\/mp\/gill\/WPS_LIBS\/local\/lib/-L\/usr\/lib64/"$'\nw' | ed -s configure.wps
#echo "g/-I\/data3a\/mp\/gill\/WPS_LIBS\/local\/include/s/-I\/data3a\/mp\/gill\/WPS_LIBS\/local\/include/-I\/usr\/include\/libpng12/"$'\nw' | ed -s configure.wps
#echo "g/-L\$(NCARG_ROOT)\/lib/s/-L\$(NCARG_ROOT)\/lib/-L\/usr\/lib64\/ncarg/"$'\nw' | ed -s configure.wps
echo "g/-lX11/s/-lX11/-lX11 -lgfortran -lpng/"$'\nw' | ed -s configure.wps
echo "g/mpif90 -f90=.*/s/mpif90 -f90=.*/mpif90/"$'\nw' | ed -s configure.wps
echo "g/mpicc -cc=.*/s/mpicc -cc=.*/mpicc/"$'\nw' | ed -s configure.wps
# Compilation
./compile 2>&1 |tee compile.out

Exécution de l'application

Après compilation, les différents exécutables de WPS et WRF peuvent être lancés soit en mode interactif, soit en batch, sur le cluster de calcul.

En mode interactif

Avant d'éxécuter WRF, il est nécessaire de supprimer la limite par défaut du stacksize

# en sh ou bash
ulimit -s unlimited
cd $WRFDIR
./wrf.exe
# en csh ou tcsh
limit stacksize unlimited
cd $WRFDIR
./wrf.exe

En mode batch sur le cluster (voir article ici )

Les deux scripts suivants montrent un exemple de scripts de lancement de WPS et de WRF sur le cluster. Pour activer le mode parallèle (DMPAR) lors de l'exécution - si celui-ci a été activé lors de la compilation - il suffit d'indiquer dans le script le nombre de noeuds et de processeurs par noeuds requis. Par exemple, l'instruction suivante du scripts PBS correspond à une requête de 2 noeuds et 2 processeurs par noeuds. Dans cet exemple, la commande mpirun lancera 4 instances de WRF en parallèle.

#PBS -l "nodes=2:ppn=2"

Pour exécuter WPS ou WRF sur un seul processeur, il suffit de spécifier :

#PBS -l "nodes=1:ppn=1"

Exemple de script PBS (run_wps.pbs) pour les instructions de WPS :

#!/bin/sh

####################################
# Script to run geogrid.exe, metgrid.exe, ungrib.exe
# To start this job: qsub run_wps.pbs
####################################


####### Resources used #######
## MPIRUN will use the total number
## of CPUs reserved here :

#PBS -l "nodes=2:ppn=2"
#PBS -q std

####### Job Outouts configuration #######
# Send a mail when the job ends or fails
#PBS -m ae
# Joins standard and Error outputs in a single file
#PBS -j oe

####### Set Applications PATHS #######
TOPDIR=$HOME/WRF
WPSDIR=$TOPDIR/WPS

GRIBDIR=/data/grib_files_dir

####### Job Instructions #######
# Change to the WPS directory

cd $WPSDIR

# Run job :
mpirun geogrid.exe
./link_grib.csh $GRIBDIR/*.grb
mpirun ungrib.exe
mpirun metgrid.exe

Le script est soumis au cluster de calcul par la commande :

qsub run_wps.pbs

Exemple de script PBS (run_wrf.pbs) pour WRF :

Le script suivant permet, en plus d'exécuter WRF, de fixer la valeur du stacksizeà unlimited pour éviter une erreur de segmentation lors de l'exécution.

#!/bin/sh

####################################
# Script to run wrf.exe
# To start this job: qsub run_wrf.pbs
####################################

####### Resources used #######
## MPIRUN will use the total number
## of CPUs reserved here :

#PBS -l "nodes=2:ppn=2"
#PBS -q std

####### Job Outouts configuration #######
# Send a mail when the job ends or fails

#PBS -m ae
# Joins standard and Error outputs in a single file
#PBS -j oe

####### Set Applications PATHS #######
TOPDIR=$HOME/WRF
WRFDIR=$TOPDIR/WRFV3

####### Job Instructions #######
# Change to the WRF.exe directory

cd $WRFDIR/run

# Execute real.exe
./real.exe

# Create a SHELL script which set stacksize unlimited
# and run wrf.exe

SHSCRIPT=wrf.sh.$$

cat << EOF > $SHSCRIPT
#!/bin/sh

ulimit -s unlimited
./wrf.exe

EOF

chmod 755 $SHSCRIPT

# Run job
mpirun $SHSCRIPT

rm $SHSCRIPT

Le script est soumis au cluster de calcul par la commande :

qsub run_wrf.pbs

Autres pages d'aide :

Dernière mise à jour : ( 03-02-2014 )