Discretization

Spectral and finite-difference methods share one domain decomposition and one runtime. Spectral steps use exponential time differencing on a Fourier symbol; finite differences use explicit stencils with halo exchange. One-rank Chebyshev and Fourier × Chebyshev solves cover bounded directions.

The spectral stack · Halo exchange

Parallel execution

MPI distributes the grid; HeFFTe performs the distributed transforms. The same models run on CPUs and on NVIDIA and AMD GPUs when OpenPFC is built with the matching toolchain and HeFFTe backend, with GPU-aware MPI where the MPI library supports it.

Choosing a GPU path · Running on clusters · Performance

Solvers and time integration

API reference

Configuration-driven applications

The shipped applications read JSON or TOML input and validate every parameter at startup, with diagnostics that say what to change. Phase-field crystal models are the origin of the project; flow, phase fields, elasticity, thin films and kinetics run on the same path.

Application gallery · Configuration · Parameter validation

Output and restart

Results are written as binary fields, VTK images and PNG, with application-specific series. Checkpoints save a set of distributed fields atomically and restart on any decomposition.

Results and output

Extend

OpenPFC is a library first. Models, field modifiers, coordinate systems, writers and application wiring are extension points, and an installed package exports OpenPFC::openpfc for find_package(OpenPFC).

Extension guide · Using the installed library · Build options

Limits

OpenPFC stays on structured grids. It is not an unstructured-mesh, finite-element or adaptive-mesh code; the fit guide lists the problems where another tool fits better.

When not to use OpenPFC