Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,747 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenPFC

DOI Documentation Release CI Documentation build Coverage License

OpenPFC simulation result

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.

Start here

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.

Capabilities

  • 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.

Build and run

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_simulator

Increase the rank count after the single-rank run succeeds and your local MPI or scheduler allocation provides the requested slots.

Use the installed library

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.

Scalability

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.

OpenPFC scalability

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 and quality checks

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.

Citation

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}
}

About

Open-source solver for phase field crystal type (PFC) type problems.

Resources

Contributing

Stars

27 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages