Welcome to NeoFOAM!

The NeoFOAM project has set itself the goal of bringing modern software development methods to the core libraries of OpenFOAM. By reimplementing the libfiniteVolume and libOpenFOAM we want to deliver a code that:

  • is compliant with modern C++20;

  • is extensively unit-tested;

  • is platform portable and GPU ready;

  • is highly extensible via Plugins

We aim for a high level of interoperability with OpenFOAM, however, if reasonable, NeoFOAM might deviate from the OpenFOAM API. NeoFOAM is a community-driven project and we welcome contributions from everyone.

Table of Contents

Compatibility with OpenFOAM

We are aiming for a high level of compatibility with OpenFOAM. However, we don’t expect binary or ABI compatibility. This means you NeoFOAM won’t produce a libfiniteVolume.so and libOpenFOAM.so which could serve as a plugin replacement for existing libfiniteVolume.so and libOpenFOAM.so. Instead, we aim for source compatibility, i.e. the possibility to compile application OpenFOAM code like pimpleFoam and others against the NeoFOAM libraries.

Building OpenFOAM Applications with NeoFOAM

Currently, the support for building applications is very limited. The simplest way to build applications with the NeoFOAM core is by adopting the CMake build procedure showcased in our applications folder. For now, we only have a minimal example as we are still working on the basic implementations. But we will gradually add example applications as we move along. Most likely we will initially work on porting solver applications, since pre- and postprocessing tools that work on a file-level basis are trivially interoperable.

Indices and tables