Skip to main content

Efficient and easy Fast Fourier Transform (FFT) for Python.

Project description

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: Binder notebook

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:

  1. OpenMPI or equivalent

  2. 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

  3. Python packages fluiddyn mako cython pyfftw pythran mpi4py

  4. A C++11 compiler and BLAS libraries and configure ~/.pythranrc to customize compilation of Pythran extensions

  5. 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:

@article{fluiddyn,
doi = {10.5334/jors.237},
year = {2019},
publisher = {Ubiquity Press,  Ltd.},
volume = {7},
author = {Pierre Augier and Ashwin Vishnu Mohanan and Cyrille Bonamy},
title = {{FluidDyn}: A Python Open-Source Framework for Research and Teaching in Fluid Dynamics
    by Simulations,  Experiments and Data Processing},
journal = {Journal of Open Research Software}
}

@article{fluidfft,
doi = {10.5334/jors.238},
year = {2019},
publisher = {Ubiquity Press,  Ltd.},
volume = {7},
author = {Ashwin Vishnu Mohanan and Cyrille Bonamy and Pierre Augier},
title = {{FluidFFT}: Common {API} (C$\mathplus\mathplus$ and Python)
    for Fast Fourier Transform {HPC} Libraries},
journal = {Journal of Open Research Software}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fluidfft-0.3.0.tar.gz (210.2 kB view details)

Uploaded Source

File details

Details for the file fluidfft-0.3.0.tar.gz.

File metadata

  • Download URL: fluidfft-0.3.0.tar.gz
  • Upload date:
  • Size: 210.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for fluidfft-0.3.0.tar.gz
Algorithm Hash digest
SHA256 44f64d61bd5b74272b284f7a7c359f7cd61a6783957b0f73e2b7af9c588e472b
MD5 5ef92cc9be0bcd6204f6a03eb6aea199
BLAKE2b-256 dbaf1a397adf691b82e88f705dc2bd38c14fb72d9ba90a5d00ec6b6d11a3603f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page