Skip to content
SHD Sim
Menu

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.

VerificationNusselt 2.2466 ± 0.0192 %, observed order 2.63

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)
CaseDifferentially heated square cavity at Ra = 10⁴, steady
SolverbuoyantBoussinesqSimpleFoam, 60 000 iterations, no residualControl
FunctionalMean Nusselt number on the hot wall
MeshesFour uniform Cartesian, 20 to 160 cells a side, r = 2 exactly
Formal order2
ResultNu = 2.2466 ± 0.0192 %, observed order 2.6333
Last run2026-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      identically

It 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.

The Roache ratio against the quantity it reduces to, on this study
RunGCI₂₃ / (rᵖ·GCI₁₂)f₁ / f₂
Second order0.99920064898102520.9992006489810255
First-order convection0.99788663630757880.9978866363075791
Equal to every digit carried, on both runs. It is not approximately the same quantity — it is the same quantity.

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.

The observed order measured over each of the two overlapping triplets
TripletMeshesObserved order p
Fine160, 80, 402.633289517705667
Coarse80, 40, 202.257530495858386
Difference0.3758
The judge refuses a difference above 0.5. The 20-square run costs about half a minute and is the cheapest thing in the study by two orders of magnitude.

Result

Hot-wall Nusselt number on four systematically refined meshes
Meshh (m)Nusselt numberIterative drift
20 × 200.0008862.31289472790
40 × 400.0004432.25957363950
80 × 800.0002222.24842261900
160 × 1600.0001112.24662534010
The drift is exactly zero on all four meshes: 60 000 SIMPLE iterations with no residualControl, and the Nusselt number identical to ten decimal places across the last three writes.
The grid convergence index on the fine triplet
QuantityValue
Refinement ratio r2 (uniform Cartesian, simpleGrading 1 1 1)
R = (f₂−f₁)/(f₃−f₂)0.16117618351071208 — monotonic
Observed order p2.633289517705667, against a formal 2
Richardson extrapolate2.246280001162646
GCI₁₂, fine pair0.0192 %
GCI₂₃, coarse pair0.1191 %
Nu = 2.2466 ± 0.0192 %. That band is the answer this page exists to produce.
Nusselt number falling towards the Richardson-extrapolated limit as the mesh spacing is reduced
The measured Nusselt number on the four meshes against cell spacing, with the Richardson-extrapolated limit of 2.2463 drawn across. Both are plotted from the same four runs; the limit is not a reference value.

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.

  1. 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.
  2. 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.
  3. 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.
  4. The observed order against the formal order of the schemes actually staged.
  5. Order stability across the two triplets — the real asymptotic check, and the one that licenses quoting the band at all.
  6. 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.

All validation cases · Written by the team building SHD Sim.