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.
- Spectral stacks on HeFFTe, with FFTW on the CPU
- Finite-difference stencils of selectable order
- Cartesian implicit interfaces, and a transmission operator across them
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.
- CPU spectral execution through FFTW
- CUDA and HIP execution paths, including device-resident fields and steppers
- A one-rank cuFFT or rocFFT path for single-GPU runs
Choosing a GPU path · Running on clusters · Performance
Solvers and time integration
- Exponential integrators, adaptive step control with rejection and rollback, and explicit Runge–Kutta for coupled fields
- Matrix-free geometric multigrid, and
cg,gmresandnewtonon blocks of distributed fields - Microelasticity and finite-strain mechanics, on the host and on GPUs
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.
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.