Skip to content

Repository files navigation

Requirements | Compilation | Integration | Documentation | Roadmap |

DOI c++ standard Gitter doxygen

image

NeoN

NeoN is an open-source, high-performance C++ CFD library for modern heterogeneous computing systems. It currently provides data structures, parallel algorithms, and numerical infrastructure for the finite volume method.

By combining finite-volume abstractions with modern C++ and performance-portable backends, NeoN enables developers to build maintainable, scalable, and high-performance fluid-flow solvers without writing architecture-specific code for each hardware platform.

Its modular architecture enables performance-portable execution and solver backends, currently using Kokkos and Ginkgo while remaining flexible to adopt alternative technologies as the framework evolves.

Key Features

  • Execution on
    • serial CPU
    • multithreaded CPU
    • MPI-based distributed systems
    • GPUs from NVIDIA, AMD, and Intel
  • Portability across Linux, macOS, and Windows
  • Performance-portable parallel and memory abstractions
  • Unified GPU execution model for NVIDIA, AMD, and Intel GPUs

Important

The NeoN project needs you! If you're interested in contributing to NeoN please open a PR! If you have any questions on where to start please contact us here or on gitter.

Requirements

NeoN has the following requirements

  • cmake > 3.22
  • gcc >= 13 or clang >= 19
  • Kokkos 5.0.2

For GPU support

  • NVIDIA: CUDA 12+
  • AMD: ROCm 6.4.1
  • Intel: oneAPI Base Toolkit 2024.2

For development it is required to use pre-commit.

C++ dependencies

C++ dependencies like Kokkos are handled via CPM and are cloned at the configuration step. However, the cmake build process will prefer system wide installed C++ dependencies like Kokkos, cxxopts, etc. If you prefer to clone, configure and build dependencies your self consider setting -DCPM_USE_LOCAL_PACKAGES = OFF, see CPM for more details.

Compilation

workflows/Build on linux workflows/Build on OSX workflows/Build on windows

NeoN uses cmake to build, thus the standard cmake procedure should work. From a build directory you can execute

cmake <DesiredBuildFlags> ..
cmake --build .
cmake --install .

Additionally, we provide several Cmake presets to set commmonly required flags if you compile NeoN in combination with Kokkos.

cmake --list-presets # To list existing presets
cmake --preset production # To configure for production use
cmake --build --preset production # To compile for production use

Executing Tests

We provide a set of unit tests which can be executed via ctest or

cmake --build . --target test

Python Wheels

The Python distribution name is neon_pde, which produces wheel filenames starting with neon_pde. The import package remains neon.

The package version in pyproject.toml is the source of truth. CMake reads that version during configuration, and the generated neon.__version__ uses the same value.

GitHub Actions uses cibuildwheel to build wheels for release tags and explicitly requested manual builds. Stable releases use tags named like v0.1.0. Manual non-tag builds use development versions like 0.1.1.dev202605270217123. The wheel workflow does not currently run for ordinary branch pushes, pull requests, or on a nightly schedule.

CPU wheels are built for:

  • Linux x86-64
  • Linux ARM64
  • Windows AMD64
  • macOS Apple Silicon
  • macOS Intel

The CPU matrix covers CPython 3.9 through 3.13. CPU wheels use the plain package version and are published to PyPI only for stable v*.*.* tags.

CUDA wheels are currently limited to CUDA 12.8 on Linux x86-64 with CPython 3.12. They use a local version suffix such as 0.1.0+cuda128, are uploaded as workflow artifacts, and are attached to the GitHub Release for stable tags. GitHub-hosted runners do not provide a GPU, so the CUDA wheel build does not run runtime tests against the resulting wheel.

Integration with other CFD Frameworks

Currently, NeoN is not a standalone CFD framework. It is designed to be used with other CFD Frameworks. Examples how to integrate NeoN into CFD frameworks and how to write applications is demonstrated in the NeoFOAM repository.

Documentation

An online documentation can be found here, be cautious since this repository is currently evolving the documentation might not always reflect the latest stage.

For building the documentation further dependencies like doxygen and sphinx are requirement. The list of requirements can be found here

About

WIP Prototype of a modern CFD core

Topics

Resources

Stars

95 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages