Fourier Neural Operator
The Fourier neural operator performs global mixing by multiplying in the frequency domain, giving a resolution-invariant PDE surrogate.
Global mixing through the FFT
The Fourier neural operator (FNO) tackles the central need of any PDE surrogate: coupling every point in the domain to every other point. It does this efficiently by moving to the frequency domain. Each layer transforms its input with a fast Fourier transform, multiplies the low-frequency modes by learned complex weights, transforms back, and adds a local linear term. The frequency multiplication is a global convolution done cheaply.
Why truncate modes
Only the lowest Fourier modes are kept and given learnable weights; higher modes are discarded in the spectral path. This truncation acts as a smoothing prior and keeps the parameter count fixed regardless of grid size. The residual local path restores fine detail that the truncated spectral path cannot represent.
Discretization invariance
Because the learned weights act on Fourier modes rather than grid points, an FNO trained at one resolution can be evaluated at a higher resolution with the same weights. This zero-shot super-resolution is a defining feature: the operator is defined on functions, and the grid is merely how those functions are sampled.
One spectral layer
import torch
def spectral_conv(x, weights, modes):
xf = torch.fft.rfft(x) # to frequency domain
out = torch.zeros_like(xf)
out[..., :modes] = xf[..., :modes] * weights # mix low modes
return torch.fft.irfft(out, n=x.shape[-1])
Strengths and caveats
- Fast and accurate on smooth, periodic-friendly problems
- Resolution invariance enables training cheap and evaluating fine
- Native FFT assumes a regular grid; complex geometries need extensions
- Truncation limits sharp discontinuities unless mode count is raised
FNOs have become a standard baseline for learned PDE surrogates on structured domains, and geometry-adapted variants extend them to irregular meshes.