Skip to content

FFTW

FFTW is a library for calculating discrete Fourier transforms.

The FFTW library is available as a module on Apocrita. The library computes discrete Fourier transform of data using a fast Fourier transform algorithm. The data may be of one or higher dimension and may be real or complex.

Using FFTW

On Apocrita we support only version 3 of the FFTW library. Version 2 of the library is obsolete and it is incompatible with the current.

We provide a number of different modules for the FFTW library. We provide these modules to support not only different releases of the package but to allow building code with support for numerous compilers or MPI implementations. For example: the module fftw/3.x.y-intel supports building user code with the Intel compiler suite but, unlike the module fftw/3.x.y-intelmpi, does not offer MPI features of the library. This latter module is for user code being built with the Intel compiler suite and using the Intel MPI features of the FFTW library.

Compiling using FFTW

FFTW modules on Apocrita support using pkg-config to indicate the compile and link options to pass to the compiler when building code against the FFTW library. For example, the output may look like (removing the full paths for clarity):

$ module load fftw/3.x.y-intelmpi
$ pkg-config --cflags --libs fftw3
 -I... -L... -lfftw3

The output of pkg-config used this way does not include the required flags to allow using the MPI components of the library. Instead, if you are using MPI features of the FFTW library then you should use the MPI compiler wrappers. Note that not all of the installations of FFTW on Apocrita support MPI and those that do will support only a single MPI implementation (Open MPI or Intel MPI). For clarity, we have configured the FFTW modules on Apocrita to depend on the appropriate MPI module.

Using the Fortran interface to FFTW

As noted in the FFTW user guide, version 3 of FFTW supports programming in modern Fortran. To access the Fortran interface one can include the "header file" fftw3.f03 after first using the C interoperability module. The suggested incantation

use, intrinsic :: iso_c_binding
include 'fftw3.f03'

should be used, but modified as appropriate.

For some installations of FFTW we have made available a Fortran module for the API. This may be used with

use fftw3

For installations without this module you may create your own similar module with

module fftw3
  use, intrinsic :: iso_c_binding
  include 'fftw3.f03'
end module

Further, where FFTW has been built with MPI features enabled, we may offer the similar Fortran module fftw3-mpi.

Documentation

Man pages for the FFTW wisdom utilities are available on Apocrita:

man fftw-wisdom

A wider user manual is available on the FFTW website, with the C and Fortran interfaces described throughout.

Reference