Welcome to NeoN!

NeoN is an open-source C++20 library for developing high-performance computational fluid dynamics (CFD) software on heterogeneous computing systems, from multi-core CPUs to NVIDIA, AMD and Intel GPUs. It provides data structures, parallel algorithms and a domain-specific language (DSL) for the finite volume method (FVM).

Statement of Need

Many widely used CFD codes were originally designed for single-core or moderately parallel CPUs. On modern high-performance computing systems, which increasingly rely on GPUs, CFD workloads are typically limited by memory bandwidth rather than by compute capability, and porting existing codes to accelerators often requires backend-specific rewrites. At the same time, the finite-volume abstractions of established frameworks are usually tied to a specific solver infrastructure and are difficult to reuse elsewhere.

NeoN addresses this gap by providing a reusable, performance-portable finite-volume core:

  • Equation-level DSL: partial differential equations are written close to their mathematical form, for example

    auto expr = dsl::imp::ddt(U) + dsl::imp::div(phi, U) - dsl::imp::laplacian(nu, U);
    

    Here, imp denotes implicit operators, which contribute coefficients to the system matrix, while exp denotes explicit operators, which contribute to the right-hand side. Expressions are evaluated lazily, deferring matrix assembly until it is needed and avoiding unnecessary temporaries.

  • Discretisation and assembly: discretisation schemes generate stencil coefficients that are assembled into standard sparse matrix formats (e.g., CSR), with the resulting linear systems solved by external libraries such as Ginkgo.

  • Performance portability: Kokkos provides execution on serial CPUs, multi-threaded CPUs and GPUs from a single code base, while MPI supports distributed-memory parallelism.

  • Python access: the DSL can also be used from Python, see Python bindings (neon_pde).

Target Audience

NeoN is intended for

  • developers of new CFD solvers that should run efficiently on CPUs and GPUs without architecture-specific code;

  • researchers developing and testing discretisation schemes and numerical methods for the finite volume method;

  • maintainers of existing CFD frameworks who want to modernise them incrementally. NeoFOAM demonstrates this for OpenFOAM-based solvers;

  • Python users who want to prototype finite-volume discretisations.

NeoN is not a standalone CFD application. Time loops, solver control and I/O are handled by the application that uses NeoN; complete solvers built on NeoN are available in NeoFOAM.

Key Features

  • extensively unit-tested;

  • extensible via runtime-selectable components (e.g., discretisation schemes and boundary conditions), see Derived class discovery at compile time;

  • designed to be integrated into other CFD frameworks through its API, as demonstrated by NeoFOAM.

NeoN is a community-driven project and we welcome contributions from everyone, see Contributing.

Table of Contents

Indices and tables