[2]ifpackageloaded#1#2 [2]ifpackageloaded#1#2 [3]ifpackageloaded#1#2#3

#1

Installation and linking

The install of PFFT is based on the Autotools and follows the typical workflow

./configure
make
make install

Install of the latest official FFTW release

PFFT depends on Release 3.3.3 of the FFTW library . For the sake of completeness, we show the command line based install procedure in the following. However, note that we provide install scripts on `{www.tu-chemnitz.de/~mpip}/software.php <{www.tu-chemnitz.de/~mpip}/software.php>`__that simplify the install a lot. We highly recommend to use these install scripts, since they additionally apply several performance patches and bugfixes that have been submitted to the FFTW developers but are not yet included in the official FFTW releases.

wget http://www.fftw.org/fftw-§\fftwversionsl§.tar.gz
tar xzvf fftw-§\fftwversion§.tar.gz
cd fftw-§\fftwversion§
./configure --enable-mpi --prefix=$HOME/local/fftw3_mpi §\label{lst:fftw:conf}§
make
make install

The MPI algorithms of FFTW must be build with a MPI C compiler. Add the statement MPICC=\$MPICCOMP at the end of line [lst:fftw:conf] if the configure script fails to determine the right MPI C compiler \$MPICCOMP. Similarly, the MPI Fortran compiler \$MPIFCOMP is set by MPIFC=\$MPIFCOMP.

Install of the PFFT library

In the simplest case, the hardware platform and the -3.3.3 library are recognized by the PFFT configure script automatically, so all we have to do is

wget http://www.tu-chemnitz.de/~mpip/software/pfft-§\pfftversionsl§.tar.gz
tar xzvf pfft-§\pfftversion§.tar.gz
cd pfft-§\pfftversion§
./configure
make
make check
make install

Hereby, the optional call make check builds the test programs. If the -3.3.3 software library is already installed on your system but not found by the configure script, you can provide the FFTW installation directory \$FFTWDIR to configure by

./configure --with-fftw3=$FFTWDIR

This call implies that the FFTW header files are located in \$FFTWDIR/include and the FFTW library files are located in \$FFTWDIR/lib. Otherwise, one should specify the FFTW include path \$FFTWINC and the FFTW library path \$FFTWLIB separately by

./configure --with-fftw3-includedir=$FFTWINC --with-fftw3-libdir=$FFTWLIB

At the end, this is equivalent to

./configure CPPFLAGS=-I$FFTWINC LDFLAGS=-L$FFTWLIB

which is more common to experienced users of the Autotools. To install PFFT in a user specified directory \$PFFTINSTDIR call configure with the option

./configure --prefix=$PFFTINSTDIR

However, this option is mandatory whenever you do not have root permissions on your machine, since the default install paths of configure are not accessible by standard users. The PFFT library must be built with a MPI compiler. In Section [sec:fftwinst] we already described how to hand the right compilers to the configure script. Some more options are

:code:`[`keywords=]–enable-float: Produces a single-precision version of PFFT (float) instead of the default double-precision (double); see [sec:prec].

:code:`[`keywords=]–enable-long-double: Produces a long-double precision version of PFFT (long double) instead of the default double-precision (double); see [sec:prec].

--disable-fortran: Disables inclusion of Fortran wrapper routines in the standard PFFT libraries.

--disable-tests: Disables build of test programs.

For more details on the options of the configure script call

./configure --help

How to include PFFT in your program

All programs using PFFT should include its header file

#include <pfft.h>

This header includes the FFTW headers fftw.h, fftw-mpi.h automatically. Make sure that the compiler can find them by setting the include flags appropriately. You must also link to the PFFT, FFTW and FFTW-MPI libraries. On Unix, this means adding -lpfft -lfftw3_mpi -lfftw3 -lm at the end of the link command. For example, to build pfft_test.c use the following compiler invocation

mpicc pfft_test.c -I$PFFTINC -I$FFTWINC -L$PFFTLIB -L$FFTWLIB -lpfft -lfftw3_mpi -lfftw3 -lm

Substitute mpicc by any other MPI C compiler if you like. \$PFFTINC, \$FFTWINC, \$PFFTLIB, and \$FFTWLIB denote the PFFT and FFTW include and library paths, respectively. If you use the install scripts mentioned in Sect. [sec:pfft-inst], these paths will be

PFFTINC = $HOME/local/pfft-§\pfftversion§/include
FFTWINC = $HOME/local/fftw-§\fftwversion§/include
PFFTINC = $HOME/local/pfft-§\pfftversion§/lib
FFTWINC = $HOME/local/fftw-§\fftwversion§/lib