Method
The rules every case on this site follows, and what the labels mean.
Before a number is shown
These are the standing rules of the September 2026 campaigns. The July work (Ahmed body, Windsor, wheel) predates some of them, and the ledger says where that matters.
- Parent tutorial first. A case is derived from a stock OpenFOAM tutorial or a published setup, and every deliberate difference is listed in its generator script.
- checkMesh on the exact mesh. Every mesh has its checkMesh log read before solving. Where a check failed and the run went ahead, the waiver is on the ledger: propeller (2 skew faces), the Windsor 1.2M grid (1 skew cell), the NACA 0012 finest grid (12 high-aspect-ratio cells) and the Ahmed GCI fine grid. One Windsor-with-wheels grid has no surviving checkMesh log and is marked as such.
- Wall treatment is measured, not assumed. y+ is read from the solution, not taken from the recipe.
- Iterative convergence is judged from histories. A verdict is taken when the quantity drifts less than a stated amount, not at a fixed iteration count.
Numerical uncertainty
Grid studies use the Eça and Hoekstra least-squares procedure through one shared, unit-tested implementation. Where the grids are non-monotone, the tool refuses to extrapolate and the case is labelled accordingly (motorBike, 30P-30N, the Clark-Y cavitation ladder).
Comparison is not validation
A validation in the ASME V&V 20 sense needs the experimental uncertainty and the input uncertainties. Where those are unknown (Betts and Bokhari cavity, the Windsor wheel campaign, tandem bodies) the site says comparison and states the error without claiming agreement.
Retractions are kept
Earlier numbers that were wrong are not quietly replaced: a NACA 0012 grid-convergence value was retracted and corrected, a wheel agreement that was cancellation did not survive refinement, and a cavitation-onset finding was withdrawn after a Courant-number error was found. A fourth Windsor grid, run after the write-up, showed that the three-grid extrapolation was not supported, and the extrapolated number was withdrawn. They appear in the ledger.
How these pages are structured, and why
Every case page runs in the same order: verdict, the 3-D stage, parameters, experiment, set-up, mesh, results, numerical accuracy, what I distrust, references. I took that spine from the ERCOFTAC application-challenge template, which gives the experiment, its measurement errors ("error bars are desirable"), the numerical accuracy and the application uncertainties their own sections.
What I report about accuracy follows the Journal of Fluids Engineering policy on numerical accuracy, which says that "'reasonable agreement' with experimental data alone will not be enough to justify a given single-grid calculation", and the Celik et al. (2008) grid-convergence procedure printed with it. ITTC 7.5-03-02-03 adds that "the uncertainty must be estimated for every quantitative result gathered from the simulation". From ASME V&V 20, which I have read only through a committee member's overview, I take the comparison error E = S - D, judged against a validation uncertainty built from the experimental, numerical and input uncertainties. Where I cannot estimate those, I write comparison, not validation.
None of the vendor and consultancy samples I read stated a grid-convergence uncertainty, an iterative error, a limitations heading or experimental error bars. These pages state each one, or say plainly that it is missing.
How the 3-D views are made
A Python script reads each case directory with pyvista (VTK's OpenFOAM reader). It exports the boundary surfaces, the real cell edges of the mesh with a cut through it, and the solver fields as values at each vertex. Nothing is drawn by hand. The browser colours every surface from those stored values, so the field, the colour range and the legend are computed on the page. Some views are stretched or mapped, and the stage says so: the micro-channel heat sink is drawn with its width 20 times true scale, the tall cavity with its width 6 times; the Windsor body's surface pressure is mapped from the fine grid's sampled surface onto the body STL by nearest sample, and the impinging jet's wedge face is rotated flat onto one plane.
Source of every number
Each headline figure is stored with the output file it came from, and a script (pipeline/check_numbers.py) fails the build if the figure is not literally present in that file. The cited file is raw solver output where one exists; where it is a write-up, the case says so.