OpenPFC is an open-source C++20 framework for high-performance phase-field
crystal and related spectral phase-field simulations on structured grids. It
combines MPI domain decomposition with HeFFTe-based distributed FFTs and can be
used either as a library or through the configuration-driven applications
shipped under apps/.
OpenPFC is intended for research workflows that need atomic-resolution microstructure information on diffusive time scales, including solidification, defect evolution, elastic-plastic response, epitaxial growth, phase transformations, and related coupled phenomena.
Choose the shortest path that matches your goal:
| Goal | Start with |
|---|---|
| Build and run one MPI example | 15-minute start |
| Run a shipped JSON or TOML application | Quick start |
| Choose a sequenced path by role | Learning paths |
| Decide whether OpenPFC fits the problem | When not to use OpenPFC |
| Install dependencies and toolchains | Installation guide |
| Run on a cluster or GPU | HPC operator guide |
| Add a model, application, or writer | Extension guide |
| Look up classes and function signatures | Integrated C++ API reference |
The complete source documentation index is docs/README.md. The published site combines tutorials, configuration, cluster operation, architecture, and generated C++ declarations in one navigation tree and search index.
- distributed-memory simulations using MPI and HeFFTe;
- CPU spectral execution through FFTW;
- CUDA and HIP execution paths when built with matching GPU toolchains and HeFFTe backends;
- configuration-driven applications with JSON and TOML input;
- parameter validation with actionable startup diagnostics;
- binary, VTK, PNG, and application-specific result workflows;
- extension points for models, field modifiers, coordinate systems, writers, and application wiring;
- examples, tutorials, recipes, testing guidance, and HPC runbooks maintained alongside the source.
See the CMake option reference for the exact build switches supported by the current checkout.
OpenPFC requires a consistent compiler, MPI, and HeFFTe stack. Follow the installation guide, then use the minimal first-run sequence:
cmake -DCMAKE_BUILD_TYPE=Release -S . -B build
cmake --build build -j"$(nproc)"
cd build
mpirun -n 1 ./examples/05_simulatorIncrease the rank count after the single-rank run succeeds and your local MPI or scheduler allocation provides the requested slots.
An installed OpenPFC package exports OpenPFC::openpfc. The minimal downstream
CMake project enables both C and C++ because the package resolves MPI C and C++
components:
cmake_minimum_required(VERSION 3.21)
project(my_sim LANGUAGES C CXX)
find_package(OpenPFC REQUIRED)
add_executable(my_sim main.cpp)
target_link_libraries(my_sim PRIVATE OpenPFC::openpfc)Set CMAKE_PREFIX_PATH or OpenPFC_DIR to the OpenPFC installation prefix.
The longer walkthrough is in
docs/getting_started/01-basics/README.md.
OpenPFC has been exercised on domains up to 8192 x 8192 x 4096 using 25,600
CPU cores and approximately 25 TB of memory. The spectral solver is dominated
by distributed FFT work with O(N log N) complexity.
For experiment context, assumptions, and current performance guidance, use the performance profiling guide and the scalability analysis plan rather than treating the landing page as a benchmark specification.
Documentation changes are checked for relative-link integrity, example-catalog consistency, shell syntax, Doxygen XML warnings, and strict Sphinx rendering. Contributor instructions are in CONTRIBUTING.md and docs/development/contributing-docs.md.
The development documentation follows the repository default branch. For reproducible simulations, record the OpenPFC commit or release tag together with the HeFFTe and MPI versions; see documentation versioning.
If OpenPFC contributes to published work, cite:
T. Pinomaa, J. Aho, J. Suviranta, P. Jreidini, N. Provatas, and A. Laukkanen, “OpenPFC: an open-source framework for high performance 3D phase field crystal simulations,” Modelling and Simulation in Materials Science and Engineering, 2024. DOI: 10.1088/1361-651X/ad269e.
@article{pinomaa2024openpfc,
title = {OpenPFC: an open-source framework for high performance 3D phase field crystal simulations},
author = {Pinomaa, Tatu and Aho, Jukka and Suviranta, Jaarli and Jreidini, Paul and Provatas, Nikolaos and Laukkanen, Anssi},
journal = {Modelling and Simulation in Materials Science and Engineering},
year = {2024},
doi = {10.1088/1361-651X/ad269e}
}
