Configuration¶
Quickstart¶
Warning
Before a run, the TZ variable must be set always be set to GMT. In bash, do:
$ export TZ=GMT
Create the configuration with
$ autoreconf --install
Configure, compile and create the executable with
$ ./configure && make install
The executable pangolin
is ready to use in the bin/
directory.
Warning
Always compile from the root folder.
Configuring for MPI¶
The configure script will use by default mpif90
as a compiler. If
you want a different compile, you have to define it with
--with-compiler=NAME
. Here, the values of NAME
are:
gfortran
, pgf90
or ifort
.
If you want to override the search for the compile, you can set the
MPI_DIR variable. Then it will use mpif90
and mpirun
defined in
this folder as compiler and script. Example :
$ ./configure MPI_DIR=/usr/lib64/openmpi/bin
However, you have to set manually the MPI library with LD_LIBRARY_FLAGS (see ?).
Another solution is to add the location of the MPI executables to your PATH (see below).
How the script select the proper MPI/compiler version¶
If you have supplied a compiler to search, the configure script will
find for all MPI compilers. Each one of them will be run with the
-show
option (so it needs to support it). The result will be
compared to ifort
, pgf90
, gfortran
.
If no compiler is specified or nothing is found, then we will try
default mpi scripts : mpif90
and mpiifort
. As they cannot be set
in the PATH (for example if you use module), we check if they exist by
running it with the -show
option. We stop at the first found. This
case is for special configurations where you source a configuration
file.
You can find quickly all your mpi executables with the command
$ locate mpif90 mpiifort
Configuring for HDF5¶
By default, the script search for the HDF5 helper script (namely
h5fc
or h5pfc
). If they are not in a standard location, the
easiest way is to tell the configure script the location of h5fc
:
$ ./configure HDF5_BINDIR=/yourpath/bin
The script will check we can link to HDF5 and, if available, to its parallel version. We link only to the shared libraires of HDF5, so be sure they are installed ! By default, the compilation and link flags are given by:
$ h5fc -show -shlib
Custom configuration¶
If you do not want to use the h5fc
utiliy, you can specify the HDF5
folder with the HDF5_DIR variable. The include and libraries location
are then HDF5_DIR/include
and HDF5_DIR/lib
. It also reverts back
to default compilation and linking flags, so know what you are doing.
You can add compilation flags with HDF5_FLAGS. It can be useful to set alternative locations for the HDF5 module files for example. On my machine (Pannus), I use:
$ export HDF5_DIR=/usr/lib64/openmpi/
$ ./configure HDF5_FLAGS=" -I/usr/include/openmpi-x86_64/"
This allows me to set the HDF5 directory (containing the libs and executables), while adding a custom path to find the HDF5 fortran module. If you want to search it, try
$ locate hdf5.mod
If there are several installations of HDF5, I encourage you to search
for the file libhdf5.settings
. It will give you the install
configuration: compiler used, if it has shared librairies, if it has
parallel support etc.
Configuring for netCDF¶
By default, the script search for the netCDF helper script (namely
nf-config
). If they are not in a standard location, the easiest way
is to tell the configure script the location of nf-config
:
$ ./configure NETCDF_FDIR=/yourpath/bin
The script will check we can compile with and link to netCDF. By default, the compilation and link flags are given by:
$ nf-config -fflags
$ nf-config -flibs
If the script fails to compile a simple netCDF example, it may be due to
the location of the .mod
file. In this case, you can specify a
search directory. For example, on my machine (Pannus), I do:
$ ./configure NETCDF_INCDIR=/usr/lib64/gfortran/modules
As a last resort, compilation flags and linking flags can be set by hand with:
$ ./configure NETCDF_FCFLAGS="compil flags" NETCDF_FLIBS="link flags"
Managing different netCDf versions¶
If you have several installations of netCDF and the default search does
not return the proper version, you can desactivate the search. For that,
simply set NETCDF_FCFLAGS and NETCDF_FLIBS by hand. The values are
often given by nf-config --fflabgs
and nf-config --fflibs
for
the latest version. Otherwise, check similar options for nc-config
.
Here is an example:
$ ./configure NETCDF_FCFLAGS=-I/usr/include NETCDF_FLIBS="-L/usr/lib -lnetcdff -lnetcdf"
Examples¶
On Neptune¶
On neptune, Pangolin can be configured with parallel HDF5 and netCDF with :
$ export NETCDF_FLIBS="-Wl,-rpath,/softs/local/lib -L/softs/local/lib -lnetcdff -lnetcdf"
$ export NETCDF_FCFLAGS=-I/softs/local/include NETCDF_FLIBS="-Wl,-rpath,/softs/local/lib -L/softs/local/lib -lnetcdff -lnetcdf"
$ ./configure HDF5_BINDIR=/softs/PHDF5-1.8.9/bin/ --with-compiler=ifort
Unfortunately, netCDF flags must be set by hands (both compilation and linking flags). However, HDF5 flags are set automatically by simply setting the location of the executables.
On Airain¶
Load the necessary modules:
$ module load hdf5/1.8.9_parallel
$ module load netcdf/4.2_hdf5_parallel
Then configure and compile:
$ ./configure --with-compiler=ifort && make install
On Pannus¶
We use a custom HDF5 install and we have to specify the location of
netcdf.mod
by hand:
$ ./configure NETCDF_INCDIR=/usr/lib64/gfortran/modules/ HDF5_INCDIR=/usr/include/mpich-x86_64
On Vortex¶
$ module purge
$ module load mpich2-x86_64
$ ./configure HDF5_INCDIR=/usr/include/mpich2-x86_64/