12

I am trying to solve Poisson equation using FFT. The issue appears at wavenumber $k = 0$ when I want to get inverse Laplacian which means division by zero.

We have

${\nabla ^2}\phi = f$

Taking FFT from both side we get:

$-k^2\hat\phi = \hat f $

or

$\hat\phi = \frac{\hat f}{-k^2} $

Assuming that we want to solve this equation in periodic domain and using DFT using FFTW package, at $k=0$ we have a division by zero. Anybody knows how to deal with this singularity?

FFTNewbie
  • 121
  • 1
    The zero mode coefficient can't be determined from the equation alone, the BCs are required. It also isn't even uniquely determined for the special case of homogeneous Neumann BCs. – Ian Jun 02 '16 at 16:21
  • 3
    The zero mode $\phi(k=0)$ represents the average value of $\phi$ in your periodic box. This is not determined by the Poisson equation since if $\phi$ is a solution so is $\phi + C$ where $C$ is a constant. This has to be specified by you. The standard choice is just to take $\phi(k=0) = 0$ (and you don't divide by $k^2 = 0$). Usually for cases where $\phi$ represents some physical quantity the absolute value of $\phi$ is not important so it does not matter what you choose. – Winther Jun 02 '16 at 17:09

2 Answers2

15

THE PROBLEM

Let me first restate the problem in 2 dimensions:

Solve the Poisson equation

$\nabla^2\phi(x,y)=f(x,y)\;\;\;(x,y)\in[0, L_x]\times[0, L_y]$

subject to periodic boundary conditions, namely

$\phi(x,0)=\phi(x,L_y) \;\;\; x\in[0, L_x]$

$\phi(0,y)=\phi(L_x,y) \;\;\; y\in[0, L_y]$

$\frac{\partial \phi}{\partial x}(0, y) = \frac{\partial \phi}{\partial x}(L_x, y)\;\;\; y\in[0, L_y]$

$\frac{\partial \phi}{\partial y}(x, 0) = \frac{\partial \phi}{\partial y}(x, L_y)\;\;\; x\in[0, L_x]$

THE FFT-BASED SOLUTION APPROACH

Let us expand $\phi(x,y)$ in the Fourier series

$$\phi(x,y)=\sum_{p,q=-\infty}^{\infty}\hat{\phi}_{pq}e^{-j2\pi p\frac{x}{L_x}}e^{-j2\pi q\frac{y}{L_y}}$$

where the $\hat{\phi}_{pq}$'s are the expansion coefficients, and let us do the same for $f(x,y)$ with expansion coefficients $\hat{f}_{pq}$. On substituting the Fourier series expansion into the Poisson equation we have

$$\left[\left(-j2\pi \frac{p}{L_x}\right)^2+\left(-j2\pi \frac{q}{L_y}\right)^2\right]\hat{\phi}_{pq}=\hat{f}_{pq}$$

Solving the Poisson equation amounts at solving such an equation for the $\hat{\phi}_{pq}$'s.

On specializing the Fourier series of $\phi(x,y)$ at the points $(x_m, y_n) = (m \Delta x, n \Delta y)$, with $m = 0,1,\ldots,M$ and $n=0,1,\ldots,N$, we have

$$\phi_{mn}=\phi(m\Delta x,n\Delta y)=\sum_{p,q=-\infty}^{\infty}\hat{\phi}_{pq}e^{-j2\pi p\frac{m\Delta x}{L_x}}e^{-j2\pi q\frac{n\Delta y}{L_y}}$$

Finally, if we choose

$\Delta x = \frac{L_x}{M}$ and $\Delta y = \frac{L_y}{N}$ and truncate the Fourier series to $(M+1)\times(N+1)$ terms, then

$$\phi_{mn}=\sum_{p=0}^{M}\sum_{q=0}^{N}\hat{\phi}_{pq}e^{-j2\pi p\frac{m\Delta x}{L_x}}e^{-j2\pi q\frac{n\Delta y}{L_y}}$$

which is the expression of a Discrete Fourier Transform (DFT). The same holds true for $f(x,y)$, i.e.

$$f_{mn}=\sum_{p=0}^{M}\sum_{q=0}^{N}\hat{f}_{pq}e^{-j2\pi p\frac{m\Delta x}{L_x}}e^{-j2\pi q\frac{n\Delta y}{L_y}}$$

where $f_{mn}=f(m \Delta x, n\Delta y)$. The approach is then the following:

  1. Sample $f(x,y)$ at the points $(m \Delta x, n\Delta y)$;
  2. Perform the FFT of $f_{mn}$;
  3. Divide $\hat{f}_{pq}$ by $\left[\left(-j2\pi \frac{p}{L_x}\right)^2+\left(-j2\pi \frac{q}{L_y}\right)^2\right]$ to compute $\hat{\phi}_{pq}$;
  4. Perform the IFFT of $\hat{\phi}_{pq}$.

THE ISSUE

The above equation can be solved for any $(p,q)$, except for $p=q=0$, giving an ambiguity for the determination of the zero frequency Fourier coefficient $\hat{\phi}_{00}$.

THE SOLUTION

Seeing the issue from a different perspective, the boundary conditions define the solution of the above Poisson equation only up to an additive constant: if $\phi(x,y)$ solves this equation and obeys the above periodic boundary conditions, then so does $\phi(x,y)+c$ for any real constant $c$. Accordingly, we need another condition to pin the constant $c$ down. The standard stipulation is that

$$\int_{0}^{L_x}\int_{0}^{L_y}\phi(x,y)dxdy = 0$$

Note that, on using the periodic boundary conditions and on integrating the Poisson equation, it can be easily shown that the forcing term $f(x,y)$ must also obey the condition

$$\int_{0}^{L_x}\int_{0}^{L_y}f(x,y)dxdy = 0$$

REFERENCE

Arieh Iserles, A first course in the numerical analysis of differential equations, Section 10.4, Cambridge Texts in Applied Mathematics.

Vitality
  • 408
0

This is conceptually similar the integrating constants that show up when you are solving a differential equation by other methods. Usually these integrating constants are decided by your boundary conditions.

Instead of doing any division you can simply rewrite it as a least-norm problem: $$\|-k^2\hat \phi +\hat f\|_2^2+\text{any more terms you may want}$$

If your $\hat \phi,\hat f$ are stored in vectors the $k^2$ in the expression above will be a diagonal weight matrix which multiplies the $\hat \phi$ vector.


Oops sorry I forgot where the FFTW comes into place, you can use it to calculate the matrix-vector product, $F$ below is the Fourier transform matrix.

$$\|-k^2 \hat \phi + F f\|_2^2$$

So $Ff$ means multiply $f$ vector by $F$ and it will be the output of calling your FFTW library with $f$ vector as the input.

And for other terms you have it might be $F^{-1}$ you want to multiply with but that is simply the corresponding IFFT routine in your library.

mathreadler
  • 26,534