FFTW

These tutorials demonstrate how to call fftw3 (CPU) or cuFFT (GPU) to solve for and manipulate Fourier transform data using a single MPI rank.

There are two FFTW tutorials, Basic and Poisson:

  • Basic tutorial: The tutorial found in amrex-tutorials/ExampleCodes/FFTW/Basic is useful if the objective is to simply take a forward FFT of data, and the DFT’s ordering in k-space matters to the user. This tutorial initializes a 3D or 2D MultiFab, takes a forward FFT, and then redistributes the data in k-space where the center cell in the domain corresponds to the k=0 mode. The results are written to a plot file.

  • Poisson tutorial: This tutorial: amrex-tutorials/ExampleCodes/FFTW/Poisson solves a Poisson equation with periodic boundary conditions. In it, both a forward FFT and reverse FFT are called to solve the equation, however, no reordering of the DFT data in k-space is performed.

We note that both fftw and cufft assume a row-major ordering of data; since a MultiFab is column major, the output to the spectral array is spatially-transposed.

Basic

This tutorial initializes a 3D or 2D MultiFab, takes a forward FFT, and then redistributes the data in k-space where the center cell in the domain corresponds to the k=0 mode. The results are written to a plot file.

Poisson

In this test case we set up a right hand side (rhs), call the forward transform, modify the coefficients, then call the backward solver and output the solution to the discrete Poisson equation.