OpenPFC documentation¶

OpenPFC is an MPI-parallel C++ framework for partial differential equations on structured grids. Spectral and finite-difference discretizations share MPI domain decomposition; spectral transforms use HeFFTe. Phase-field crystal models are the origin of the project and one application family, not the architectural boundary. The framework can be used in two ways:
run one of the config-driven applications under
apps/; orlink the installed
OpenPFC::openpfclibrary from another CMake project.
This is the maintained OpenPFC documentation site. Hand-written Markdown and the generated C++ API reference share one navigation tree and search index. Doxygen extracts source-level API information as XML; Sphinx, MyST, and Breathe render the final site.
Start by goal¶
Goal |
Start here |
Continue with |
|---|---|---|
Run a first model and inspect its results |
||
Verify a clone and dependency stack |
||
Compile a model or run a catalogued case |
||
Understand what each application solves |
Applications catalog (research) |
|
Run an existing application |
||
Add or change physics |
||
Integrate the library |
||
Qualify homogeneous Dirichlet Q1 FEM/GMG on CPU/MPI |
Existing periodic numerics limits |
|
Run on a cluster |
||
Decide whether OpenPFC fits |
Documentation structure¶
Area |
Purpose |
Entry point |
|---|---|---|
|
Stable mental models and architecture |
|
|
Guided, end-to-end learning |
|
|
Short copy-paste procedures |
|
|
Running applications, configuration, and output |
|
|
Cluster operation and site guidance |
|
|
Adding models and extension points |
|
|
Lookup tables and file-format contracts |
|
|
Generated declarations, overloads, namespaces, and source comments |
|
|
Scientific context and model limitations |
|
|
Maintainer guidance and decisions |
|
|
Historical 0.2 planning documents |
|
|
Multi-session teaching material |
Canonical ownership¶
Documentation is easier to maintain when each fact has one primary home:
Information |
Canonical location |
|---|---|
Supported dependency and toolchain setup |
|
First successful build and run |
|
0.1 → 0.2 API replacement list |
|
Broad build/run/integration overview |
|
Exact CMake option defaults |
|
Installed SDK identity and compatibility |
|
JSON/TOML configuration keys |
|
Application inventory |
|
Example inventory |
|
Public API signatures |
|
Common failures |
|
Release-visible changes |
Other pages should link to these sources instead of copying long option lists, API examples, or troubleshooting sections.
Runtime coupled field stepping describes owned-cell CPU RK stages, collective rejection and accepted-state integrity.
Implicit interfaces evaluate a static plane, sphere, or rotated ellipsoid on the Cartesian grid and integrate the two sides of a cut cell without replacing that grid.
Prose and generated API¶
Use narrative pages to understand workflows, concepts, trade-offs, and operational procedures. Use the generated API section for exact declarations and source-level Doxygen comments. The type tour connects common names to their layer, header, runnable example, and generated reference.
Both forms are rendered by Sphinx. MyST reads the Markdown tree, while Breathe imports Doxygen XML into the same site. This gives users one navigation model, one search index, one theme, and one published artifact.
Versioning and reproducibility¶
The documentation on master describes the development branch. For a tagged
release, read the documentation from the same tag. Record the OpenPFC commit or
release tag together with the HeFFTe and MPI versions used for a reproducible
simulation. See documentation versioning.
Contributing¶
Code contributions are described in CONTRIBUTING.md. Documentation-specific structure, preview commands, and checks are described in Contributing to documentation.
Matrix-free Krylov solvers describes GMRES, flexible right preconditioning, true residual admission and the explicit SPD CG path.
Inexact Newton describes forcing tolerances, line search, trial rollback and the residual-based FFT adapter.
Structured multigrid describes volume-weighted transfers, coarse operators, nullspaces and the replicated MPI limitation.
Runnable Quarto chapters: OpenPFC by example.