
Efficient and easy Fast Fourier Transform for Python

Fluidfft provides C++ classes and their Python wrapper classes written
in Cython useful to perform Fast Fourier Transform (FFT) with different
libraries, in particular
pfft,
p3dfft and
mpi4py-fft are specialized in
computing FFT efficiently on several cores of big clusters. The data can
be split in pencils and can be distributed on several processes.
Documentation: https://fluidfft.readthedocs.io
Getting started
To try fluidfft without installation:

For a basic installation which relies only on a pyFFTW
interface;
or provided you have the optional FFT libaries, that you need, installed
and discoverable in your path (see environment variables LIBRARY_PATH
,
LD_LIBRARY_PATH
, CPATH
) it should be sufficient to run:
pip install fluidfft [--user]
Add --user
flag if you are installing without setting up a virtual
environment.
Installation
To take full advantage of fluidfft, consider installing the following
(optional) dependencies and configurations before installing fluidfft.
Click on the links to know more:
- OpenMPI or equivalent
- FFT libraries such as MPI-enabled FFTW (for 2D and 3D solvers) and
P3DFFT, PFFT (for 3D solvers) either using a package manager or
from
source
- Python packages
fluiddyn cython pyfftw pythran mpi4py
- A C++11 compiler and BLAS
libraries
and
configure
~/.pythranrc
to customize compilation of Pythran extensions - Configure
~/.fluidfft-site.cfg
to detect the FFT libraries and install
fluidfft
Note: Detailed instructions to install the above dependencies using
Anaconda / Miniconda or in a specific operating system such as Ubuntu,
macOS etc. can be found
here.
C++ API
See a working minimal example with
Makefile
which illustrates how to use the C++ API.
Tests
From the root directory:
make tests
make tests_mpi
Or, from the root directory or any of the "test" directories:
pytest -s
mpirun -np 2 pytest -s
How does it work?
Fluidfft provides classes to use in a transparent way all these
libraries with an unified API. These classes are not limited to just
performing Fourier transforms. They are also an elegant solution to
efficiently perform operations on data in real and spectral spaces
(gradient, divergence, rotational, sum over wavenumbers, computation of
spectra, etc.) and easily deal with the data distribution (gather the
data on one process, scatter the data to many processes) without having
to know the internal organization of every FFT library.
Fluidfft hides the internal complication of (distributed) FFT libraries
and allows the user to find (by benchmarking) and to choose the most
efficient solution for a particular case. Fluidfft is therefore a very
useful tool to write HPC applications using FFT, as for example
pseudo-spectral simulation codes. In particular, fluidfft is used in the
Computational Fluid Dynamics (CFD) framework
fluidsim.
License
Fluidfft is distributed under the
CeCILL License, a GPL compatible
french license.
Metapapers and citations
If you use FluidFFT to produce scientific articles, please cite our
metapapers presenting the FluidDyn
project
and
Fluidfft: