Validation/Solution verification
How much of the answer is the mesh
Every other page here asks how far the answer is from a reference. This one asks how much of it is the mesh — and puts an uncertainty on a result that has no reference at all.
Why this case
Every other page in this section asks how far our answer is from a reference. This one asks a question no reference can answer: how much of the number is the mesh? A result quoted without a numerical uncertainty cannot be signed against, however close to a published value it happens to sit.
The method is Roache’s Grid Convergence Index. Systematically refined meshes with a constant refinement ratio r, one scalar functional f measured on each, and with f₁ the fine solution, f₂ the medium and f₃ the coarse:
observed order p = ln(|f3-f2| / |f2-f1|) / ln(r)
Richardson f_exact ~= f1 + (f1-f2)/(r^p - 1)
band on the fine mesh GCI_12 = Fs |(f1-f2)/f1| / (r^p - 1), Fs = 1.25
band on the coarse pair GCI_23 = Fs |(f2-f3)/f2| / (r^p - 1)| Case | Differentially heated square cavity at Ra = 10⁴, steady |
|---|---|
| Solver | buoyantBoussinesqSimpleFoam, 60 000 iterations, no residualControl |
| Functional | Mean Nusselt number on the hot wall |
| Meshes | Four uniform Cartesian, 20 to 160 cells a side, r = 2 exactly |
| Formal order | 2 |
| Result | Nu = 2.2466 ± 0.0192 %, observed order 2.6333 |
| Last run | 2026-08-28 |
The check everyone quotes with a GCI cannot fail
This is the most interesting thing on the page, so it comes first. The asymptotic-range test normally reported alongside a GCI is
GCI_23 / (r^p * GCI_12) ~= 1
and it is meant to say that the solutions lie in the asymptotic range, so the band may be believed. On three grids it says nothing at all. Substitute the definitions:
GCI_23 Fs |e32/f2| / (r^p - 1) |e32| f1 1
──────────── = ───────────────────────── = ───── . ── . ───
r^p * GCI_12 r^p Fs |e21/f1| / (r^p - 1) |e21| f2 r^p
and p is DEFINED by r^p = |e32| / |e21|, so the first and
last factors cancel exactly and the whole thing collapses to
GCI_23 / (r^p * GCI_12) == f1 / f2 identicallyIt is the ratio of the two finest solution values. It is close to 1 whenever the two finest meshes agree with each other, which is true of every refinement study anybody would bother to run — including one nowhere near the asymptotic range.
| Run | GCI₂₃ / (rᵖ·GCI₁₂) | f₁ / f₂ |
|---|---|---|
| Second order | 0.9992006489810252 | 0.9992006489810255 |
| First-order convection | 0.9978866363075788 | 0.9978866363075791 |
What is checked instead: four meshes, two triplets
A fourth, coarser mesh, and the observed order computed twice on overlapping triplets. If the solutions really are on a single power law in h, the exponent measured over the fine end and the exponent measured over the coarse end must agree. If they do not, the error is not a single power of h across the sequence, and the Richardson extrapolation from the fine triplet is fitting a curve the data does not have — which is exactly what “not in the asymptotic range” means. That statement can come out false, which is the only property that makes a check worth running.
| Triplet | Meshes | Observed order p |
|---|---|---|
| Fine | 160, 80, 40 | 2.633289517705667 |
| Coarse | 80, 40, 20 | 2.257530495858386 |
| Difference | 0.3758 |
Result
| Mesh | h (m) | Nusselt number | Iterative drift |
|---|---|---|---|
| 20 × 20 | 0.000886 | 2.3128947279 | 0 |
| 40 × 40 | 0.000443 | 2.2595736395 | 0 |
| 80 × 80 | 0.000222 | 2.2484226190 | 0 |
| 160 × 160 | 0.000111 | 2.2466253401 | 0 |
| Quantity | Value |
|---|---|
| Refinement ratio r | 2 (uniform Cartesian, simpleGrading 1 1 1) |
| R = (f₂−f₁)/(f₃−f₂) | 0.16117618351071208 — monotonic |
| Observed order p | 2.633289517705667, against a formal 2 |
| Richardson extrapolate | 2.246280001162646 |
| GCI₁₂, fine pair | 0.0192 % |
| GCI₂₃, coarse pair | 0.1191 % |
As a cross-check rather than as the result: the Richardson value of 2.2463 sits 0.34 % from Wan, Patnaik & Wei’s 2.254 for this cavity. That is the mesh-converged answer agreeing with a published reference, rather than a single mesh happening to.
The order came out above the formal order
2.6333 against a formal 2, and it is reported rather than explained away. It is stable across the sequence — 2.63 on the fine triplet, 2.26 on the coarse — so it is not noise, and converging faster than the scheme promises is not a defect. It is what happens when the leading error term is small on this functional and two contributions partly cancel. The band it produces is conservative rather than optimistic.
The judge’s band around the formal order is deliberately asymmetric for this reason: 0.5 below and 1.0 above. An order below the formal order is the symptom that matters, because an implementation that has quietly lost an order looks exactly like it.
What this study does NOT see
What had to be true first
The checks are deliberately not independent, and they run coarsest-question-first, because a failure in an early one makes the later numbers meaningless rather than merely wrong.
- Iterative stillness, on every mesh. The GCI is built from differences between meshes. If each run stopped somewhere of its own choosing, those differences measure the stopping points and the observed order becomes a property of the convergence controls. Stopping every mesh short at 2 000 iterations turns this same sequence divergent — Nusselt climbing 2.26 → 2.39 → 2.66 as the mesh is refined, because each run is further from its own steady state than the last, and nothing else about those runs looks wrong.
- The refinement ratio. Roache asks for r ≥ 1.3; below that the difference between grids sinks towards the round-off and iterative noise in each of them, and p is a logarithm of one noise over another.
- Monotonic convergence. R must lie in (0, 1). Taking the logarithm of a negative ratio is how a refinement study produces a confident nonsense, so the sign is tested before the log is taken.
- The observed order against the formal order of the schemes actually staged.
- Order stability across the two triplets — the real asymptotic check, and the one that licenses quoting the band at all.
- The band itself, last. Only once the five above hold is GCI₁₂ an uncertainty.
Repeat this yourself
Every case here is set up from the worked examples in the product, with no hand-editing of solver files — so you can run it, and get the same numbers. The free tier runs real cases up to 250,000 cells of fluids, or 100,000 nodes of solid, with no account needed to download and no time limit.
Other cases
- A manufactured solutionThe only case here that checks the arithmetic rather than the answer. Pick the solution first, work out what source term it needs, and the error is then known exactly on every mesh.
- Natural convection in a heated cavityThe only case here where the flow is caused by the temperature field rather than imposed on it — and the one that showed “converged” is a claim about residuals.
All validation cases · Written by the team building SHD Sim.