Repository navigation
Releases
brae v0.4.1
brae 0.4.1
interFoam - two-phase volume-of-fluid flow on the GPU.
A case whose controlDict says application interFoam now runs with the one command, brae.
- All 42
interFoamtutorials of OpenFOAM v2412 run. - Laminar, RAS (k-epsilon, k-omega SST) and LES (kEqn). MULES and CMULES, alpha sub-cycling,
Euler/CrankNicolson/localEuler, adjustable time step, restart, ASCII and binary output. - Held to OpenFOAM, not to expectations. The solver's steps are compared with serial OpenFOAM field by
field on staged tutorial rows; the suite is 856 tests. - The pressure solve is brae's own. Whatever a case names for
p_rgh, brae runs an AMG-preconditioned
conjugate gradient on the GPU and says so. Everything else follows the case. - Speed, per time step against OpenFOAM on all 20 cores of the same GB10: ahead on 30 of the 42 tutorials
at their shipped size, and on all 42 once the mesh is scaled up (1.1x to 4.9x at up to 3.6 million cells).
Meshes of a few thousand cells are still faster on the CPU.
brae v0.4.0
What's Changed
- added thermophysical subsystem by @tihiera in #31
- #26 scaffolding RSF by @tihiera in #33
- #26: fix LUST implicit weights by @tihiera in #34
- Foundation/of mirror for RSF by @tihiera in #36
- #26: install every registered solver, not just two by @tihiera in #39
- Foundation/of mirror by @tihiera in #40
Full Changelog: v0.3.1...v0.4.0
brae v0.3.1
brae 0.3.1
The solver is unchanged from 0.3.0; this adds the command surface around it. The public GPU network is not open
yet, so brae node ships for review rather than use.
brae benchmark— run a standard workload and compare machines. Every run writesbrae-benchmark.json;
there is no flag to remember.brae benchmark --list— samples are branches of
simd-ai/brae-bench, pulled and cached on first use: 4 for timing,
12 covering one brae capability each.brae node register | status | unregister— execsbrae-agent, a separate binary linking neither CUDA
nor the solver, so a machine keeps reporting when its brae build is broken.- Samples containing
codedFixedValue/codedMixedare refused: brae compiles those on the GPU, so a
benchmark carrying code would run it on every machine that benchmarks. - The transient solver refuses
adjustTimeStep yes, an activeMRFProperties, and anyfvOptionsfile rather
than marching without that physics. - Unified-memory GPUs (GB10) now report their memory instead of appearing to have none.
install.shinstallsbrae-agentwhen libcurl is present, and says so when it is not.
Upgrade with git pull && cmake --build build -j --target brae. 269 ctests on a GB10; sm_80/sm_90
compile-checked.
brae v0.3.0
brae 0.3.0, transient pimpleFoam
Brae now runs transient incompressible flow, and it runs it from the same command.
One command
You always type brae. It reads the application entry your case already has in controlDict and runs the
matching solver:
cd yourTransientCase && brae # application pimpleFoam -> transientNew: transient incompressible PIMPLE
Fully device-resident, sharing its momentum, pressure and turbulence phases with the validated steady solver:
- Time schemes:
Euler,backward,CrankNicolson(with off-centring coefficient) - Implicit
fvm::ddton the turbulence transport too — true URANS, not a quasi-steady turbulence field - Turbulence: laminar; k-epsilon, realizable k-epsilon, k-omega SST, k-omega SST-LM, Spalart-Allmaras;
and the hybrid set — SA-DDES, SA-IDDES, k-omega SST-DDES, k-omega SST-IDDES, Smagorinsky LES - Seamless restart: writes and re-reads
phiand theddt0(...)state, sostartFrom latestTimecontinues
the same trajectory rather than restarting the history - PIMPLE controls:
nOuterCorrectors,nCorrectors,nNonOrthogonalCorrectors,relaxationFactors - Standard OpenFOAM time directories out (
U,p,phi, turbulence), ASCII or binary mesh in
Accuracy
pitzDaily, k-omega SST, marched to steady: velocity within 0.07% of OpenFOAM v2412 pimpleFoam on the same
case.
Speed
1× H100 80GB, pitzDaily developed then advanced at fixed deltaT, both solvers converged at the same tolerance:
| cells | brae | SPUMA (OpenFOAM-GPU, best config) | |
|---|---|---|---|
| 4.9M | 56 s | 255 s | 4.5× faster |
Zero bytes move between CPU and GPU per time step.
Also in this release
codedFixedValue/codedMixedboundary conditions, compiled onto the device at run time, on both solvers- DES/LES models (SA-DDES/IDDES, SST-DDES/IDDES, Smagorinsky) available to the steady solver's shared core
- The AMG-hierarchy cache is reused by the transient solver, so repeat runs start warm
nNonOrthogonalCorrectorsdocumented correctly forsimpleFoam, it was supported, the docs said otherwise
Upgrading
Nothing to change.
git pull && cmake --build build -j --target braeFull solver scope: docs/solvers/pimplefoam.md ·
docs/solvers/simplefoam.md. ctest 261/261 on GB10; sm_80/sm_90 compile-checked.
brae v0.2.0
What's Changed
- Feat/cuda comment cleanup by @tihiera in #1
- Feat/of by @tihiera in #2
- fmt turbulencemodels by @tihiera in #3
- reformat functionObjects by @tihiera in #4
- reformat applications dir by @tihiera in #5
- reformat device_amg by @tihiera in #7
- reformat cuda headers by @tihiera in #6
- reformat finiteVolume by @tihiera in #8
- reformat cuda/device_pcg + device_simple by @tihiera in #9
- strip banners + comments in headers by @tihiera in #10
- Feat/multi gpu nvshmem by @tihiera in #13
- fixed coupled-bcType by @tihiera in #14
- Feat/multi gpu nvshmem by @tihiera in #15
New Contributors
Full Changelog: v0.1.1...v0.2.0
brae v0.1.1
Full Changelog: v0.1.0...v0.1.1
brae v0.1.0
Brae 0.1.0
The first public release of brae, a GPU-native CFD engine that runs OpenFOAM's steady-state incompressible solver entirely on a single GPU.
Point it at an existing OpenFOAM case and it solves the whole SIMPLE loop, assembly, momentum, turbulence, and the pressure multigrid, on the device from the first iteration to the last, with no per-iteration copies back to the CPU. It writes standard OpenFOAM time directories, so it drops into your existing ParaView / postProcess workflow unchanged.
- Device-resident simpleFoam. The entire solver loop lives on the GPU: no host/device migration tax, no serial-CPU bottleneck.
- Validated against OpenFOAM v2412, cell by cell. A clean-room reimplementation that agrees to sub-1% on the fields that matter (see the motorBike pressure comparison in the README).
- Fast. Roughly 5x faster than OpenFOAM's own GPU offload (AMGX, PETSc) on the same GPU, and parity-to-ahead of a 20-core CPU node once the mesh is large.
- Turbulence. k-epsilon, k-omega SST, Spalart-Allmaras, realizable k-epsilon, and the Langtry-Menter kOmegaSST transition model.
- Broad GPU support. Ampere, Ada, Hopper, and Blackwell (sm_80 through sm_121).
- Drop-in. Reads your existing
0/ constant/ system/case (ASCII or binary mesh), auto-partitions for the GPU (no decomposePar), and writes ordinary OpenFOAM output.
Notes on the claims (all traceable to your validation, so nothing here overreaches):
- "~5x vs AMGX/PETSc" and "parity-to-ahead of a 20-core node".
- "sub-1%, cell by cell" and the turbulence-model list are what you validated against OF v2412.
- "Ampere through Blackwell" is true as of the cluster-guard fix.
Full Changelog: https://github.com/simd-ai/brae/commits/v0.1.0