Installation and advice


We explain how to install the dependencies here: Get a good scientific Python environment

  • Python >= 3.6

  • a C++11 compiler (for example GCC 4.9 or clang)

  • Numpy

    Make sure to correctly install numpy before anything, with pip or conda.


    In anaconda (or miniconda), Numpy installed with conda install numpy can be built and linked with MKL (an Intel library). This can be a real plus for performance since MKL replaces fftw functions by (usually) faster ones but it has a drawback for fft using the library fftw3_mpi (an implementation of parallel fft using 1D decomposition by fftw). MKL implements some fftw functions but not all the functions defined in fftw3_mpi. Since the libraries are loaded dynamically, if numpy is imported before the fftw_mpi libraries, this can lead to very bad issues (segmentation fault, only if numpy is imported before the class!). For security, we prefer to automatically disable the building of the fft classes using fftw3_mpi when it is detected that numpy uses the MKL library where some fftw symbols are defined.

    To install with anaconda numpy linked with openblas:

    conda config --add channels conda-forge
    conda install numpy blas=*=openblas


    Some notes how to build OpenBlas and numpy from source (not very useful now that we have good numpy wheels):

  • Cython (optional, but necessary to use the fluidfft C++ FFT classes)

  • Mako or Jinja2 to produce the Cython files from templates (optional)

  • Pythran (optional)

    We choose to use the new static Python compiler Pythran for some functions of the operators. Our microbenchmarks show that the performances are as good as what we are able to get with Fortran or C++!


    To reach good performance, we advice to try to put in the file ~/.pythranrc the lines (it seems to work well on Linux, see the Pythran documentation):

    complex_hook = True


    The compilation of C++ files produced by Pythran can be long and can consume a lot of memory. If you encounter any problems, you can try to use clang (for example with conda install clangdev) and to enable its use in the file ~/.pythranrc with:

  • mpi4py (optional, only for mpi classes),

  • pyfftw (optional): FluidFFT can of course use pyfftw and it is often a very fast solution for undistributed FFT.

  • And of course FFT libraries!

    The libraries are used if they are installed so you shouldn’t have any error if you build-install FluidFFT without FFT libraries! However, nothing will be built and it’s not very interesting. So you have to install at least one of the supported libraries, let’s say at least fftw!

Environment variables

FluidFFT builds its binaries in parallel. It speedups the build process a lot on most computers. However, it can be a very bad idea on computers with not enough memory. If you encounter problems, you can force the number of processes used during the build using the environment variable FLUIDDYN_NUM_PROCS_BUILD:


FluidFFT is also sensible to the environment variable FLUIDDYN_DEBUG:


Basic installation with pip

If you are in a hurry and that you are not really concerned about performance, you can use pip directly without any configuration file:

pip install fluidfft


pip install fluidfft --user

However, it is often useful to configure the installation of FluidFFT by creating the file ~/.fluidfft-site.cfg and modify it to fit your requirements before the installation with pip:

wget -O ~/.fluidfft-site.cfg


On some systems, wget is not installed by default. You may be able to use curl instead.


By default (without ~/.fluidfft-site.cfg), no FFT classes are compiled so that fluidfft will only be able to uses its pure-Python FFT classes (using in particular pyfftw)!


If fluidfft has already been installed and you want to recompile with new configuration values in ~/.fluidfft-site.cfg, you need to really recompile fluidfft and not just reinstall an already produced wheel. To do this, use:

pip install fluidfft --no-binary fluidfft -v

-v toggles the verbose mode of pip so that we see the compilation log and can check that everything goes well.