An AI-accelerated CFD framework by Sensifai BV integrating multi-fidelity neural warm-starts with residual-gated pressure-correction assistance inside OpenFOAM C++ solvers (`aeroRun`, technically validated on the latest OpenFOAM 14 release). Targeting 3x to 5x (up to 6x) wall-clock solver execution speedup while strictly preserving 100% authoritative physical equations, mesh discretisation, and convergence criteria.
AERO addresses the primary computational bottlenecks of urban CFD RANS solvers through a two-stage controlled AI framework while maintaining strict OpenFOAM solver authority.
During selected SIMPLE iterations, an in-solver C++ AI module proposes pressure-correction initial guesses to reduce repeated pressure Poisson equation solving overhead, targeting 3x to 5x wall-clock speedups.
A 3D U-Net neural model maps coarse CFD solutions, geometry, wall distances, and boundary parameters to production-mesh initial velocity fields ($U$), eliminating early wake flow setup delay.
Monitors residual histories, mass continuity, and iteration progress. Any non-accelerating or unphysical AI proposal automatically reverts to standard stock OpenFOAM cold-start baselines without exceeding a ~15% runtime overhead.
In-memory tensor inference via aero_infer.cpp avoids disk I/O bottlenecks, transferring tensor predictions directly into OpenFOAM memory buffers (`volVectorField` $U$).
Governing Navier-Stokes equations, mesh discretisation, $k-\epsilon$ turbulence parameters, boundary conditions, and residual stopping tolerances ($10^{-3}$) remain identical to standard OpenFOAM solvers (tested on OpenFOAM 14).
Core components provide documented C++ interfaces, automated benchmark scripts, and complete case-level reproducible audit trails.
Rigorously audited across 10 held-out test cases (7 × 3D urban layouts ~40k cells, 3 × 2D urban layouts ~12k cells) solved with OpenFOAM 14 (`foamRun` / SIMPLE $k-\epsilon$, residual tolerance $10^{-3}$).
| Case ID | Dim | Cells | Cold Iters | Warm Iters | Cold Time | Warm Time | Iter Speedup | Wall-Clock Speedup | Status |
|---|---|---|---|---|---|---|---|---|---|
| 3d_10 | 3D | 40,305 | 179 | 96 | 6.57 s | 3.61 s | 1.87x | 1.82x | Accepted |
| 2d_1 | 2D | 12,560 | 121 | 79 | 1.49 s | 0.97 s | 1.53x | 1.53x | Accepted |
| 3d_28 | 3D | 40,220 | 115 | 80 | 4.31 s | 3.11 s | 1.44x | 1.39x | Accepted |
| 3d_4 | 3D | 39,222 | 76 | 58 | 2.76 s | 2.27 s | 1.31x | 1.22x | Accepted |
| 3d_2 | 3D | 41,448 | 84 | 67 | 3.23 s | 2.65 s | 1.25x | 1.22x | Accepted |
| 3d_27 | 3D | 39,406 | 103 | 88 | 3.83 s | 3.32 s | 1.17x | 1.15x | Accepted |
| 2d_11 | 2D | 13,040 | 145 | 126 | 1.80 s | 1.56 s | 1.15x | 1.15x | Accepted |
| 2d_8 | 2D | 12,448 | 93 | 80 | 1.14 s | 0.99 s | 1.16x | 1.15x | Accepted |
| 3d_11 | 3D | 41,036 | 775 | 1000 | 29.98 s | 38.68 s | 0.78x | 0.97x | Fallback |
| 3d_22 | 3D | 38,955 | 143 | 587 | 5.30 s | 22.18 s | 0.24x | 0.85x | Fallback |
Direct C++ ONNX Runtime integration loading model tensors into OpenFOAM volVectorField ($U$) prior to executing solver loops.
// Seeding U velocity field from AERO raw neural tensor in aeroRun.C
if (enableWarmStart)
{
Info<< "=== aeroRun: Seeding ML Velocity Warm-Start Initialization ===" << endl;
label nCells = mesh.nCells();
if (mesh.foundObject<volVectorField>("U"))
{
volVectorField& U = const_cast<volVectorField&>(
mesh.lookupObject<volVectorField>("U")
);
std::string inputRawPath = runTime.path() / "0" / "u_ml.raw";
std::vector<int64_t> dims;
std::vector<float> data;
if (readAeroRaw(inputRawPath, dims, data))
{
for (label celli = 0; celli < nCells; ++celli)
{
U.primitiveFieldRef()[celli].x() = data[celli * 3 + 0];
U.primitiveFieldRef()[celli].y() = data[celli * 3 + 1];
U.primitiveFieldRef()[celli].z() = data[celli * 3 + 2];
}
U.correctBoundaryConditions();
Info<< "Successfully seeded U field (" << nCells << " cells)" << endl;
}
}
}
Quantified visual documentation from reports/AERO_TECHNICAL_REPORT.md.