WRFgcc

De Wikicima
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Embelleciéndolo)
(Finalizándolo)
Línea 101: Línea 101:
   
 
== WRF ==
 
== WRF ==
  +
Folloing the same folder structure, compilation will be at
  +
<pre>
  +
/share/WRF/WRFV3.9.1/gfortran/[type]/WRFV3
  +
</pre>
  +
  +
In this case there are already two versions:
  +
* <code>[dmpar]</code>: distributed memory only
  +
* <code>[dm+sm]</code>: distributed and shared memory
  +
  +
The procedure is similar as in the intel case (here for <code>dmpar</code>)
  +
Declaring environment variables:
  +
<pre>
  +
$ export NETCDF='/share/tools/bin/netcdf/4.5.0/gcc'
  +
$ export WRFIO_NCD_LARGE_FILE_SUPPORT=1
  +
</pre>
  +
  +
Decompressing code and renaming
  +
<pre>
  +
$ tar xvfz /share/WRF/WRFV3.9.1.1.TAR.gz
  +
$ mv WRF WRFV3
  +
$ cd WRFV3
  +
</pre>
  +
  +
Running <code>configure</code>. There might be an issue with the netcdfs. In order to do not miss the code, just remove writing permits before running configure
  +
<pre>
  +
$ chmod -R -w *
  +
$ configure [choose 34: 32. (serial) 33. (smpar) 34. (dmpar) 35. (dm+sm) GNU (gfortran/gcc)]
  +
$ chmod -R +w *
  +
</pre>
  +
  +
One needs to introduce some modifications in the resultant configure.wrf. It is already done, so have a look
  +
</pre>
  +
$ cp /share/WRF/WRFV3.9.1/gfortran/dmpar/WRFV3/configure.ifort.dmpar.wrf configure.wrf
  +
<pre>
  +
  +
Compile
  +
<pre>
  +
$ compile em_real >& compile.log
  +
</pre>
  +
  +
As usual look for errors, but should be fine
  +
<pre>
  +
$ cat -n copmile.log | grep Error
  +
</pre>

Revisión de 13:26 6 dic 2017

Contenido

gcc compilation

<hydra> has by default intel C/Fortran compilers. However, <hydra> also has the free gcc compilers.

Here are the instructions followed to compile WRF using the gcc and gfortran compilers. In order to do that, one needs to compile all the required libraries (openmpi, zlib, curl, hdf5 and netcdf) using these compilers. No udunits was installed due to issues with cmake

Required libraries

Here the steps starting from a folder where we will download all the sources called

/share/tools/Downloads/

These compilation steps are kept inside the file /share/tools/Downloads/compilation.inf

openmpi v3.0.0.0

  • getting source
$ wget https://www.open-mpi.org/software/ompi/v3.0/downloads/openmpi-3.0.0.tar.gz
  • Decompressing
$ tar xvfz openmpi-3.0.0.tar.gz
  • Going there
$ cd openmpi-3.0.0
  • Creation of the folder where the libraries will be installed
$ mkdir -p /share/tools/bin/openmpi/3.0.0/gcc
  • Configuring the compilation/installation
$ ./configure --prefix=/share/tools/bin/openmpi/3.0.0/gcc >& run_configure.log
  • Looking for errors in run_configure.log. If not </code>make</code> chain (ensuring each steps goes fine)
$ make all >& run_make.log
$ make test >& run_make_test.log
$ make install >& run_make_install.log

For all the others libraries is similar, but paying attention to provide the right installation folder and the right location of the new compiled libraries

zlib-1.2.11

 src: https://zlib.net/zlib-1.2.11.tar.gz
 $ ./configure --prefix=/share/tools/bin/zlib/1.2.8/gcc >& run_configure.log
 $ make >& make.log
 $ make check >& make_check.log
 $ make install >& make_install.log

hdf5-1.10.1

 src: hdf5-1.10.1.tar.bz2
 $ export CPP=/usr/bin/cpp
 $ apt-get install g++
 $ ./configure --enable-fortran --with-zlib=/share/tools/bin/zlib/1.2.8/gcc/lib 
   --prefix=/share/tools/bin/hdf5/1.10.1/gcc  >& run_configure.log
 $ make >& make.log
 $ make check >& make_check.log
 $ make install >& make_install.log

libcurl-7.57.0

 src: https://curl.haxx.se/download/curl-7.57.0.tar.gz
 $ ./configure --prefix=/share/tools/bin/curl/7.57.0/gcc >& run_configure.log
 $ make >& make.log
 $ make check >& make_check.log
 $ make install >& make_install.log

netcdf-4.5.0

 src: ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.5.0.tar.gz
 $ apt-get install curl
 $ export LDFLAGS='-L/share/tools/bin/zlib/1.2.8/gcc/lib -L/share/tools/bin/hdf5/1.10.1/gcc/lib 
   -L/share/tools/bin/curl/7.57.0/gcc/lib'
 $ export CPPFLAGS='-I/share/tools/bin/zlib/1.2.8/gcc/include -I/share/tools/bin/hdf5/1.10.1/gcc/include 
   -I/share/tools/bin/curl/7.57.0/gcc/include'
 $ ./configure --enable-netcdf-4 --prefix=/share/tools/bin/netcdf/4.5.0/gcc >& run_configure.log
 $ make >& make.log
 $ make check >& make_check.log
 $ make install >& make_install.log

  • Fortran interface

 src: ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-fortran-4.4.4.tar.gz
 $ export LD_LIBRARY_PATH=-I/share/tools/bin/netcdf/4.5.0/gcc/lib:${LD_LIBRARY_PATH}
 $ export LDFLAGS='-L/share/tools/bin/zlib/1.2.8/gcc/lib -L/share/tools/bin/hdf5/1.10.1/gcc/lib 
   -L/share/tools/bin/curl/7.57.0/gcc/lib -L/share/tools/bin/netcdf/4.5.0/gcc/lib'
 $ export CPPFLAGS='-I/share/tools/bin/zlib/1.2.8/gcc/include -I/share/tools/bin/hdf5/1.10.1/gcc/include 
   -I/share/tools/bin/curl/7.57.0/gcc/include -I/share/tools/bin/netcdf/4.5.0/gcc/include'
 $ ./configure --prefix=/share/tools/bin/netcdf/4.5.0/gcc >& run_configure.log
 $ make >& make.log
 $ make check >& make_check.log
 $ make install >& make_install.log

WRF

Folloing the same folder structure, compilation will be at

/share/WRF/WRFV3.9.1/gfortran/[type]/WRFV3

In this case there are already two versions:

  • [dmpar]: distributed memory only
  • [dm+sm]: distributed and shared memory

The procedure is similar as in the intel case (here for dmpar) Declaring environment variables:

$ export NETCDF='/share/tools/bin/netcdf/4.5.0/gcc'
$ export WRFIO_NCD_LARGE_FILE_SUPPORT=1

Decompressing code and renaming

$ tar xvfz /share/WRF/WRFV3.9.1.1.TAR.gz
$ mv WRF WRFV3
$ cd WRFV3

Running configure. There might be an issue with the netcdfs. In order to do not miss the code, just remove writing permits before running configure

$ chmod -R -w *
$ configure [choose 34: 32. (serial)  33. (smpar)  34. (dmpar)  35. (dm+sm)   GNU (gfortran/gcc)]
$ chmod -R +w *

One needs to introduce some modifications in the resultant configure.wrf. It is already done, so have a look </pre> $ cp /share/WRF/WRFV3.9.1/gfortran/dmpar/WRFV3/configure.ifort.dmpar.wrf configure.wrf


Compile
<pre>
$ compile em_real >& compile.log

As usual look for errors, but should be fine

$ cat -n copmile.log | grep Error
Herramientas personales