Mesh independence
When is a result a result, rather than a property of the mesh you happened to build?
This is the first question a reviewer asks and the one a single run cannot answer. It is also the reason a case in this application holds several simulations rather than one: the comparison is the deliverable, not a diagnostic you run when something looks odd.
Where the mesh gets into the answer
Section titled “Where the mesh gets into the answer”The finite volume method replaces the flow equations with algebraic relations between cell values. That replacement is not exact. The difference between the discrete solution and the exact solution of the same equations is the discretisation error, and it depends on the cell size.
So every number the solver produces is the sum of two things: the answer, and an error contributed by the mesh. A single run gives you the sum. It cannot tell you how the sum divides, because it has nothing to compare against.
Refining the mesh shrinks the second term. The whole method rests on that: you do not measure the mesh error directly, you watch what happens to the answer as the mesh gets finer, and you keep refining until the answer stops moving. A quantity that stops moving is one whose remaining mesh error is small compared with the change you can still see.
The study
Section titled “The study”flowchart TD A["Run the case on your working mesh"] --> B["Duplicate the simulation"] B --> C["Refine: reduce the base cell size,<br/>hold everything else"] C --> D["Regenerate the mesh, run"] D --> E["Compare the quantity you will report"] E --> F{"Did it move by more<br/>than you would act on?"} F -->|Yes| B F -->|No| G["The coarser of the two<br/>is your working mesh"] G --> H["State the study alongside the result"]Refine, do not tinker
Section titled “Refine, do not tinker”A mesh study only means anything if the mesh is the only thing that changed. In practice that means changing the base cell size and letting everything derived from it follow, rather than adjusting a refinement box here and a layer count there. A locally refined region that grows while the wake stays coarse is not a finer mesh; it is a different mesh, and the answer moving tells you nothing about the asymptote.
Refine over the whole domain, or at least over everything the answer depends on. For external aerodynamics that includes the wake, which is where people most often leave the mesh alone because the body looks well resolved.
Refine by enough to see
Section titled “Refine by enough to see”A small refinement produces a small change, which is indistinguishable from noise. The usual guidance in the grid-convergence literature is that successive meshes should differ by a refinement ratio of at least about 1.3 in cell size — that is the conventional recommendation, not a property of this software. Halving the cell size is cleaner still, and in three dimensions costs roughly eight times the cells and rather more than eight times the run time.
That cost is why mesh studies get skipped, and why doing the study on a deliberately cheap version of the case — two-dimensional, or a reduced domain — is often the right move. A study on a cheap case still tells you where the knee in the curve is.
Three meshes, not two
Section titled “Three meshes, not two”Two meshes give you a difference. Three give you a trend, and the trend is what says whether you are in the asymptotic range at all — the region where each refinement reduces the error by a predictable factor. If the change from coarse to medium is larger than the change from medium to fine, you are converging. If it is not, you are not yet in that region and the finest answer is still not trustworthy, however tidy it looks.
The formal treatment of this — Richardson extrapolation and the Grid Convergence Index — estimates the mesh-independent value and puts an uncertainty band on it from three meshes. It is worth knowing about if you are writing a report somebody will audit. It is published methodology; it is not built into this application.
Watch the quantity you will report
Section titled “Watch the quantity you will report”Different quantities converge at different rates, and they converge in a predictable order.
- Integrated quantities — drag, lift, mass flow, pressure drop, total heat transfer — converge fastest, because the errors partly cancel over the surface.
- Distributions — a pressure coefficient along a chord, a velocity profile across a duct — converge more slowly.
- Point values and maxima — peak wall shear, maximum velocity, the exact location of a separation point — converge slowest, and a maximum on a fine mesh will often keep climbing after everything else has settled, because a finer mesh simply gets nearer the singularity.
So decide what the case is for before running the study, and judge convergence on that. A study that declares independence on the basis of drag and then quotes a peak local pressure has not established what it thinks it has.
When to stop
Section titled “When to stop”Not when the change is zero — it never is. Stop when the change between the last two meshes is smaller than the difference you would act on. If a 2% change in drag would not alter the design decision, then 2% is your tolerance and you have converged. If you are chasing a 1% improvement from a shape change, the mesh error has to be well below 1% or the improvement is indistinguishable from the mesh.
The mesh study also sets a floor on every other comparison you make. Two turbulence models that differ by less than your mesh uncertainty have not been distinguished.
What a mesh study is not
Section titled “What a mesh study is not”Not a fix for a bad mesh. Refining a mesh with poor cell quality refines the bad cells too. Check non-orthogonality, skewness and aspect ratio under Quality first; a mesh that fails those does not usually announce itself by crashing, it announces itself by converging to a slightly wrong answer.
Not valid across a change of wall treatment. If refining the surface pulls the first cell height down such that y+ crosses out of the wall-function range, the two runs are using the turbulence model in two different regimes and the difference between them is not a mesh effect. See y+ and wall treatment. This is why the Comparison table lists the target y+ for each study beside the cell count — so that a study where it moved is visible rather than assumed away.
Not a substitute for validation. A mesh-independent answer is an answer that has stopped depending on the mesh. It can be mesh-independently wrong, and it will be if the physics or the boundary conditions are wrong. See Verification and validation.
Not meaningful on an unconverged run. If either simulation has not settled, you are comparing two arbitrary points on two histories. Establish iterative convergence first — see Convergence and residuals.
Not meaningful across an unsteady flow. If the flow has no steady solution, the plateau a steady solver reaches is not a value to compare. See Steady or transient.
How the application supports it
Section titled “How the application supports it”A case holds one body and any number of simulations of it. The geometry sits at the top of the tree and belongs to the case; the mesh, the physics and the run belong to each simulation. That structure exists specifically so that a mesh study does not mean copying a case folder and losing track of which is which.
Duplicating a simulation copies the whole setup, so the refined study differs from the original only in what you deliberately change.
The Comparison node then puts every study in the case on one basis and reports, per study:
| Row | Why it is there |
|---|---|
| Solver | Confirms nothing else changed underneath |
| Turbulence | A model change invalidates the comparison as a mesh study |
| Cells | The independent variable |
| Base cell | What you actually changed, rather than what it produced |
| Target y+ | Whether the wall treatment regime was held |
| Iterations | Whether both runs were given the same chance to settle |
| Outcome | “not run” rather than a blank |
That last one is the row that matters most, and it is the reason every figure in the panel is read back out of the stored study rather than recomputed. A comparison table that silently shows a stale number from a study that was edited and never re-run looks better than the truth, and is worse than no table at all.
The comparison report exports the lot as a single PDF: the table, then each study’s own setup and results. That is the artefact to attach when somebody asks whether the result depends on the mesh — a claim of mesh independence with no table behind it is a claim, not an answer.
Where you act on this
Section titled “Where you act on this”- How-to → Produce a comparison report
- Reference → Comparison panel — every row and where its value comes from
- Reference → Mesh panel — base cell size, and what the estimate is derived from
- Verification and validation — where a mesh study sits among the things that make a result evidence