Es una guía para compilar WRF (The Weather Research and Forecasting) usando bash en Ubuntu 20.04. Todo el procedimiento aquí descrito se basa en los videos de MeteoAdriatic. A continuación se detalla los videos usados:
- 03. Downloading dependencies and WRF
- 04. Compiling libraries required for WRF/WPS
- 05. Compiling WRF and WPS
Como compilador usaremos gfortran (gcc).
#Confirmar si gfrotran esta instalado
gfortran -v
En caso de no tener instalado gfortran:
sudo apt-get install gfortran
Adicionalmente se debe contar con csh, perl y sh
which perl
which csh
which sh
En caso de no tenerlos instalados:
sudo apt-get install perl
sudo apt-get install csh
sudo apt-get install sh
Vamos a hacer la compilación en la raíz de Ubuntu 20.04, aquí crearemos la carpeta WRF, dentro de esta carpeta crearemos dos carpetas más: 1) libs y 2) descargas. dentro de la carpeta libs crearemos tres carpetas más 1) grib2, 2) netcdf y 3) mpich.
Para ello abrimos la consola usando el comando Control + Alt + T y ejecutaremos los siguientes comandos:
#Cambiar directorio a la raiz (por si estabas en otro sitio), aunque la instalación puede
#ser en cualquier directorio (teniendo el cuidado de redireccionar todo)
cd
#Crear carpeta WRF
mkdir WRF
#Crear carpetas libs y descargas
mkdir WRF/libs
mkdir WRF/descargas
#Crear carpetas grib2, netcdf y mpich
mkdir WRF/libs/grib2
mkdir WRF/libs/netcdf
mkdir WRF/libs/mpich
Las librerías se deben descargar y guardar en la carpeta WRF/descargas.
Dependiendo del uso que se de a WRF se requiere la instalación de varias librerías, estas pueden ser descargadas de los siguientes hipervínculos:
Tenemos 5 librerías de las cuales depende WRF. Lo primero que debemos hacer es descomprimir las librerías para luego compilarlas.
#Cambiar al directorio descargas
cd ~/WRF/descargas
#Descomprimir todas las librerías
for i in *.gz ; do tar xzf $i; done
Antes de comenzar a compilar las librerías crearemos una variable que almacene la dirección donde ubicaremos las librerías:
#Crear variable en la sesión
export LIBDIR=~/WRF/libs
#Verificar creación de variable
echo $LIBDIR
La primera librería que necesitamos instalar es zlib, ya que libpng depende de esta. La compilación es sencilla, debemos movernos al directorio del instalador en la carpeta descargas, luego ejecutamos el archivo configure, ejecutar make y finalmente make install.
#Cambiar al directorio de la librería
cd ~/WRF/descargas/zlib-1.2.7
#Ejecutar archivo configure y definir el directorio donde se instalará (grib2)
./configure --prefix=$LIBDIR/grib2
make
make install
La segunda librería que instalaremos es libpng, siguiendo los mismos pasos que ejecutamos para zlib.
#Cambiar al directorio de la librería
cd ~/WRF/descargas/libpng-1.2.50
#Ejecutar archivo configure y definir el directorio donde se instalará (grib2)
./configure --prefix=$LIBDIR/grib2 LDFLAGS="-L$LIBDIR/grib2/lib" CRRFLAGS="-I$LIBDIR/grib2/include"
make
make install
La tercera librería que instalaremos es jasper, siguiendo los mismos pasos que ejecutamos para zlib y libpng.
#Cambiar al directorio de la librería
cd ~/WRF/descargas/jasper-1.900.1
#Ejecutar archivo configure y definir el directorio donde se instalará (grib2)
./configure --prefix=$LIBDIR/grib2
make
make install
La cuarta libreria que instalaremos es netcdf, siguiendo los mismos pasos que ejecutamos para zlib, libpng y jasper.
#Cambiar al directorio de la librería
cd ~/WRF/descargas/netcdf-4.1.3
#Ejecutar archivo configure y definir el directorio donde se instalará (netcdf)
#también deshabilitamos dap y netcdf-4
./configure --prefix=$LIBDIR/netcdf --disable-dap --disable-netcdf-4
make
make install
make check
La quinta y última libreria que instalaremos es mpich, siguiendo los mismos pasos que ejecutamos para zlib, libpng, jasper y netcdf.
#Cambiar al directorio de la librería
cd ~/WRF/descargas/mpich-3.0.4
#Ejecutar archivo configure y definir el directorio donde se instalará (mpich)
./configure --prefix=$LIBDIR/mpich
make
make install
Ubicaremos los instaladores de WRF-4.1.5 y WPS-4.1 en la carpeta WRF.
#Cambiar al directorio de la librería
cd ~/WRF
#mover WRF
mv ~/WRF/descargas/WRF-4.1.5 ~/WRF/
#mover WPS
mv ~/WRF/descargas/WPS-4.1 ~/WRF/
En este momento definiremos de manera provisional las direcciones, si funcionan, las definiremos de manera permanente en .bashrc.
#netcdf
export NETCDF=$LIBDIR/netcdf
export LD_LIBRARY_PATH=$LIBDIR/netcdf/lib
#mpich, poner en el path mpicc
export PATH=$LIBDIR/mpich/bin:$PATH
#jasper
export JASPERLIB=$LIBDIR/grib2/lib
export JASPERINC=$LIBDIR/grib2/include
#libpng
export LD_LIBRARY_PATH=$LIBDIR/grib2/lib:$LD_LIBRARY_PATH
Aquí tenemos tres archivos shell importantes:
- clean
- configure
- compile
#Cambiar al directorio de la librería
cd ~/WRF/WRF-4.1.5
#Ejecutar configure
./configure
Tras ejecutar este comando se dsplegará la lista de compiladores disponibles y lo alcances de cada uno, en nuestro caso usaremos GNU (gfortran/gcc), que en mi caso esta resumido en 4 opciones 32) serial 33) smpar 34) dmpar y 35) dm + sm. Seleccionaremos el número 34 - dmpar que nos permitirá usar varios procesadores de nuestro ordenador y luego seleccionaremos la opción básica del Nesting digitando 1.
#Ejecutar compile
./compile em_real
#Cambiar al directorio de la librería
cd ~/WRF/WPS-4.1
#Definir la ubicación de WRF
export WRF_DIR=~/WRF/WRF-4.1.5
#Ejecutar configure
./configure
Tras este paso seleccionares la opción dmpar en mi caso el número 3.
#Ejecutar compile
./compile
Veremos si logramos instalar WRF probando el archivo wrf.exe.
#Cambiar al diectorio de wrt.exe
cd ~/WRF/WRF-4.1.5/main
#Ejecutar archivo
./wrf.exe
Como resultado tendremos: starting wrf task 0 of 1, esto porque aún no configuramos datos ni tareas que ejecutar
#Cambiar al diectorio de wrt.exe
cd ~/WRF/WPS-4.1
#Ejecutar archivos geogrid.exe, metgrid.exe y ungrib.exe
./geogrid.exe
./metgrid.exe
./ungrib.exe
#Cambiar directorio a la raiz
cd
#Abrir archivo .bashrc
nano .bashrc
En el archivo abierto se deben adicionar, al final de sus lineas, los comandos para definir los directorios.