Introduction

PVFMM (Parallel Volume Fast Multipole Method) is a library for evaluating potentials from particle and volume sources in three dimensions — the computational core of integral-equation solvers for certain elliptic partial differential equations. It supports Stokes, Poisson (Laplace), Biot–Savart, and Helmholtz problems on the unit cube, with free-space or periodic boundary conditions.

Two evaluation modes

Particle FMM computes N-body sums

\[u(x_i) = \sum_{j} K(x_i, y_j)\, f_j,\]

for \(N\) target points \(x_i\), source points \(y_j\), densities \(f_j\), and one of the built-in kernel functions \(K\) — in \(O(N)\) work instead of \(O(N^2)\).

Volume FMM evaluates volume potentials

\[u(x) = \int_{[0,1]^3} K(x, y)\, f(y)\, dy,\]

where the source density \(f\) is represented by piecewise Chebyshev polynomials on an adaptive octree. This is the basis of volume integral-equation solvers with smooth or piecewise-smooth right-hand sides.

Method

PVFMM implements the kernel-independent FMM (KIFMM) of Ying, Biros & Zorin: multipole and local expansions are replaced by equivalent-density representations on cubic surfaces, so only kernel evaluations are needed — no kernel-specific expansion analysis. Far-field translation operators are precomputed with symmetry compression and applied through FFT-accelerated Hadamard products (V-list); near interactions are evaluated directly with SIMD-vectorized kernels. For the volume FMM, singular and near-singular quadratures for the near field are precomputed as well (see Precomputed operator files).

Parallelism

  • Distributed memory (MPI): Morton-ordered distributed octrees with 2:1 balance refinement, space-filling-curve partitioning, and Local Essential Tree (LET) exchange.

  • Shared memory (OpenMP): all evaluation phases are multithreaded.

  • SIMD: kernels are written with explicit vector types (via the bundled SCTL library) and compiled with -march=native by default.

  • GPU (optional): CUDA offload of selected interaction phases (--with-cuda / PVFMM_ENABLE_CUDA).

Both float and double precision are supported throughout (C/Fortran via F/D function variants, C++/Python/Julia via type parameters).

Interfaces

The native interface is header-only C++ (C++ interface). A compiled C wrapper (C interface) underlies the Fortran, Python, and Julia bindings.

References

The method and implementation are described in:

  • D. Malhotra and G. Biros, PVFMM: A parallel kernel independent FMM for particle and volume potentials, Communications in Computational Physics, 18 (2015), pp. 808–830.

  • D. Malhotra and G. Biros, Algorithm 967: A distributed-memory fast multipole method for volume potentials, ACM Transactions on Mathematical Software, 43 (2016).

  • L. Ying, G. Biros, and D. Zorin, A kernel-independent adaptive fast multipole algorithm in two and three dimensions, Journal of Computational Physics, 196 (2004), pp. 591–626.

Please cite the first paper (and the second for the volume FMM) when using PVFMM in published work.