wiki:CompilingPdaf

Version 11 (modified by lnerger, 3 days ago) ( diff )

--

Compiling the PDAF library

The library file of PDAF can be compiled on its own or in connection with an example implementation from tutorial/ or models/. In order to build the library file, you need a Fortran-2003 compatible compiler and 'make'. In addition, the libraries 'BLAS', 'LAPACK', and 'MPI' are required. Here, we describe the stand-alone compilation, which one can use for example to compile some model code with added coupling for PDAF.

Specify the machine-specific compile settings

To compile the PDAF library first choose a suitable include file for the make process and/or edit one. In the directory make.arch/ several include files are provided. The name of the include files as well as the header comment in the file described the intended architecture. The choice linux_gfortran.h is a quite generic choice that should work on a wide range of computers.

The environment variable PDAF_ARCH specifies for which architecture you compile PDAF according to your choice above. You need to specify the file name without '.h'. You can specify PDAF_ARCH in the make command line like make PDAF_ARCH=<NAME>. Alternatively, you can set the environment variable $PDAF_ARCH in the shell to the name of the include file (without ending .h). For a bash shell one uses

export PDAF_ARCH=<NAME>

where <NAME> is the name of the file in make.arch/ with out '.h'.

Compiling PDAF

To compile PDAF, do the following in PDAF's main directory (denoted here PDAFROOT):

   make [PDAF_ARCH=<NAME>]

The compilation with generate the PDAF library files PDAFROOT/lib/libpdaf-d.aand PDAFROOT/lib/libpdaf-var.a. In addition several Fortran module files *.mod are generated in the directory PDAFROOT/include/. These will be used when compiling the application program coupled to PDAF. The file PDAFROOT/lib/libpdaf-d.a is the standard library containing the ensemble-based fitler methods, while the file PDAFROOT/lib/libpdaf-var.a provides, in addition, the 3D-Var methods and solvers.

Linking the PDAF library

To point to the PDAF include directory to ensure that the module pdaf.mod is found, one should specificy

   -I${PDAFROOT}/include

Here ${PDAFROOT} is the directory of the PDAF package. It can either be directly specified by replacing ${PDAFROOT} or one specifies PDAFROOT as a variable.

For linking the PDAF library for the ensemble-based filter methods use

   -L${PDAFROOT}/lib -lpdaf-d

while in case of the PDAF library supporting the 3D-Var schemes use

   -L${PDAFROOT}/lib -lpdaf-var

Apart from the PDAF library, one also needs to specify the location of the BLAS and LAPACK libraries (for example by setting -lblas -llapack if the libraries are installed in standard directories)

Notes

  • Note on parallelization:
    PDAF is generally intended for parallel computing using MPI. As such, it is required to compile PDAF with an MPI library. Such library, like the widely used OpenMPI, is today extremely easy to install (it is virtually always available as a package in any Linux distribution and standard on cluster computers).
  • Note on precision of floating point variables:
    PDAF is designed to use floating point variables of double precision. However, for flexibility the variables are decared in the source code without a 'KIND' specification.
    • For the compilation one has to specify that the compiler treats all 'real' variables with double precision accuracy. This is done, e.g. for gfortran by setting -fdefault-real-8 or for ifort by setting -r8. The provided include files in make.arch/ include these specifications.
    • PDAF also supports single precision. To enable single prevision in PDAF, one has to use the preprocessor definition -DSNGLPREC. Then one has to compile without the double-precision settings.
Note: See TracWiki for help on using the wiki.