Frequently asked questions¶
This page gives short answers to common questions. Use the documentation index to find a topic, or Troubleshooting for symptom-driven diagnosis.
Getting started¶
Where do I begin after cloning the repository?¶
Follow Start here. It verifies the compiler, MPI, HeFFTe, OpenPFC build, and one single-rank example. Continue with Quick start after that succeeds.
Is OpenPFC header-only?¶
No. OpenPFC has public headers and a compiled library. An installed downstream
project links OpenPFC::openpfc; see
Link OpenPFC from your own project.
Do I need MPI?¶
Yes for the currently supported workflows. The spectral stack, decomposition, and documented applications use MPI. A supported serial-only configuration is not currently provided.
Do I need a GPU?¶
No. The CPU/FFTW path is the normal starting point. CUDA and HIP are optional backends and require matching HeFFTe builds. See the GPU path decision guide.
Build and CMake¶
find_package(OpenPFC) cannot find the package¶
Install OpenPFC, then set CMAKE_PREFIX_PATH to the installation prefix or set
OpenPFC_DIR to the directory containing OpenPFCConfig.cmake. The compiler,
MPI, and HeFFTe stack used by the consumer must be compatible with the OpenPFC
installation. See Troubleshooting.
Why does the downstream CMake project enable both C and C++?¶
The installed package resolves MPI components that include the C target, so the validated minimal consumer uses:
project(my_sim LANGUAGES C CXX)
The complete tested shape is shown in Quick start.
Why are examples or applications missing from the build directory?¶
Check OpenPFC_BUILD_EXAMPLES and OpenPFC_BUILD_APPS. Both are enabled by
default, but a previous CMake configuration may have cached them as OFF. See
CMake options.
Should CPU, CUDA, and HIP use the same build directory?¶
No. Use separate build directories and matching HeFFTe installation prefixes. See CPU and GPU build trees.
Running¶
Where are the example executables?¶
They are normally under <build>/examples/. Exact placement can vary with the
CMake generator. The authoritative list is the
Examples catalog.
Why can an application not find its JSON or TOML file?¶
Configuration paths are interpreted relative to the process working directory,
not necessarily the source directory. Use an absolute path or calculate the
relative path from the directory in which mpirun or srun starts the
executable.
How do I know a run succeeded?¶
The process must exit with status zero. Rank zero usually prints setup and time integration messages, and configured writers may produce files. There is no single success string shared by every example. See Example run output.
Where are result formats documented?¶
Start with Result files. The exact raw binary contract is in Binary field file layout.
Extending OpenPFC¶
How do I add a model or a config-driven application?¶
Follow the extension guide, then use the
minimal custom application tutorial for an
out-of-tree App<Model> executable.
How do I add an initial or boundary condition?¶
Use a FieldModifier extension point or functional field operations, depending
on whether the behavior must be selected through configuration. See
Extending OpenPFC and
Functional field operations.
Where do exact configuration keys belong?¶
Use the Spectral App configuration reference. Tutorials should demonstrate a small configuration but should not duplicate the full key reference.
Where is the API reference?¶
The generated C++ reference is part of this site: API reference. Use the Tour of main types when you need to connect a class or namespace to the larger architecture.
Contributing¶
Documentation structure, preview commands, and CI checks are described in
Contributing to documentation. General code,
test, commit, and changelog rules are in CONTRIBUTING.md.