Tour of main types¶
This page maps the primary OpenPFC concepts to their responsibilities, headers, and runnable examples. It is a lookup-oriented bridge between tutorials and the generated API reference, not an exhaustive inventory of implementation types.
For dependency rules, read
architecture.md. For configuration-driven
application wiring, read
app_pipeline.md.
Core spectral workflow¶
flowchart LR
Domain --> Decomposition --> FFT
FFT --> Physics
Time --> Driver
Physics --> Driver
Driver --> ResultsWriter
Configuration --> Session --> Driver
The shortest useful mental model is:
Domaindescribes the global grid.Decompositionpartitions it across MPI ranks.an FFT implementation transforms local field data;
physics callables / ETD systems define the update;
pfc::sim::run/SimulationDriver(or an ETD session) advancesTimeand writers;JSON sessions (
pfc::ui::SpectralETDSession<Physics, Stack>,make_simulation_session) build that stack from configuration.
World, virtual Model, Simulator, and App<Model> are deleted. Production apps and examples 04/05/10/12 do not subclass Model.
Stable concepts at a glance¶
Type or concept |
Responsibility |
Primary header |
Start with |
|---|---|---|---|
|
Global grid size, spacing, origin, and periodicity |
|
|
|
Inclusive integer bounds for local or transformed regions |
|
|
|
MPI partition and per-rank inbox/outbox geometry |
|
|
|
Distributed host forward/backward transforms through HeFFTe |
|
|
Physics / |
Fields, k-space symbols, and a device-capable |
|
|
|
Start, stop, step size, current time, and save cadence |
|
|
|
Time loop over physics |
|
|
|
Initial and boundary conditions on a host or device |
|
|
|
Stable interface for persisted simulation fields |
|
|
|
File sink with |
|
|
|
Deprecated A0 adapter around |
|
|
|
Owns the CPU domain, decomposition, FFT, and field stack |
|
|
|
Device FFT stack; JSON |
|
|
|
Method × backend session: selection, Time, and a stack |
|
|
JSON session factory |
|
|
|
Use the integrated C++ API reference for exact constructors, overloads, namespaces, and member documentation.
Data and execution¶
OpenPFC separates logical fields from execution and memory backends.
Concept |
Role |
Location |
|---|---|---|
|
Associate local values with domain and decomposition information |
|
|
Own host or device storage selected by backend type |
|
memory spaces |
Express host versus device residency |
|
|
Fill device |
|
GPU execution requires a matching CUDA or HIP build and the corresponding
runtime headers. Build decisions are documented in
../hpc/gpu_path_decision.md.
Finite-difference types¶
Finite-difference applications choose a field/halo layout according to whether the data must also remain FFT-compatible.
Concept |
Use |
|---|---|
in-place halo exchange |
Compact FD-only arrays whose boundary slabs may hold ghosts |
separated halo exchange |
FFT-safe core arrays with separate face buffers |
|
Owned cells plus a contiguous ghost ring for direct stencil indexing |
sparse halo exchange |
Explicit remote-index lists and structured separated halos |
FD gradients and stencils |
Per-cell differential operators and reusable coefficients |
Start with examples/15_finite_difference_heat.cpp and
../concepts/halo_exchange.md.
Configuration and extension catalogs¶
The frontend maps configuration names to concrete behavior through catalogs and wiring helpers.
Concept |
Responsibility |
|---|---|
parameter metadata and validation |
Check required keys, types, bounds, units, and typical values |
field-modifier catalog |
Map configuration names to initial/boundary modifier factories |
results-writer catalog |
Map |
JSON wiring context/session |
Hold the objects required to connect configuration to a simulator |
spectral stack factory |
Merge backend and HeFFTe plan options into a concrete FFT stack |
These are extension mechanisms rather than first-day concepts. Follow
../tutorials/custom_app_minimal.md and
../extending_openpfc/README.md before using
them directly.
Advanced subsystems¶
OpenPFC also contains stable subsystem contracts that are best learned from their focused documentation rather than from one expanding type table.
Subsystem |
Read |
|---|---|
time integration and adaptive stepping |
simulation stepper headers and generated API reference |
solver contracts and spectral diagonal solves |
solver headers under |
checkpoint state and atomic publication |
|
external coupling |
|
profiling sessions and export |
|
profiling file schema |
|
result formats |
|
binary field layout |
Application-private workspaces and temporary migration adapters are intentionally excluded from this page. They remain discoverable through their application headers, tests, and generated API documentation without becoming part of the core learning path.
Find a runnable example¶
Goal |
Example or guide |
|---|---|
inspect domain decomposition |
|
perform a distributed FFT |
|
implement a small spectral model |
|
understand simulator orchestration |
|
register a custom initial condition |
|
write result files |
|
inspect a Cahn-Hilliard workflow |
|
add a custom field initializer |
|
run finite differences with halos |
|
add a coordinate system |
|
The complete catalog and suggested curriculum are in
examples_catalog.md.
See also¶
../learning_paths.md— role-based reading order../concepts/spectral_stack.md— spectral data flow../user_guide/app_pipeline.md— configuration toSimulatorapi_examples_walkthrough.md— curated API examples../getting_started/01-basics/README.md— out-of-tree consumer tutorial../extending_openpfc/README.md— extension checklist