Validation/Buoyancy, full compressibility
A heated cavity without the Boussinesq approximation
The same cavity as the Boussinesq case, through the solver that does not make that approximation — which is how you find out what the approximation was worth.
Why this case
The differentially heated square cavity already has a page here, solved with the Boussinesq approximation. This is the same cavity, the same reference and the same measured quantity, run through buoyantSimpleFoam — the solver that makes no such approximation. Full compressibility, a perfect gas, an enthalpy equation rather than a transported temperature.
The buoyant family’s six solvers are not one implementation with a switch on it, and this one had never been measured against anything. It is the family’s default for a room or a cabinet with a real temperature difference in it, which is why it is the one worth resolving.
| Physics | Buoyancy-driven convection, full compressibility, perfect gas |
|---|---|
| Solver | buoyantSimpleFoam, 12 000 iterations, no residualControl |
| Rayleigh number | 10⁴ — and only 10⁴; see below |
| Prandtl number | 0.71, written out explicitly |
| Non-Boussinesq parameter | ε = ΔT/(2T₀) = 0.0329 |
| Meshes | 20, 30 and 40 cells across the cavity |
| Agreement | Nusselt 2.2831 against Wan’s finite-element 2.254 on the finest mesh |
| Last run | 2026-08-27 |
The comparison isolates the equation of state
Wan’s reference values are for a constant-property Boussinesq fluid. Handed to a compressible solver without care, four things differ at once — the equation of state, the Prandtl number, the temperature dependence of viscosity, and the thermal expansion coefficient — and a disagreement would then be unattributable. Three of the four are removed so the fourth is what is being measured.
- Prandtl number. As staged, transport is
sutherlandand the conductivity comes from the modified Eucken relation, which fixes Pr at 0.690. The reference is at 0.71, so the transport model is switched toconstwith Pr written out. - Temperature-dependent viscosity.
constremoves that too. The viscosity it is given is not invented: it is Sutherland’s own value at the mean of the two wall temperatures, computed from the coefficients the application writes, so the fluid is still the application’s air evaluated at one temperature. - The expansion coefficient. The Boussinesq case is handed β = 0.003. A perfect gas has β = 1/T, which at this mean is 0.003356 — eleven per cent different, and eleven per cent of Rayleigh number is not a detail. The side length is solved from the gas’s own β rather than the other case’s.
What is left is the equation of state. The non-Boussinesq parameter is ε = 0.0329, small enough that the compressible answer should sit on Wan’s values rather than merely near them — so a disagreement would be a result about the solver and not about the comparison.
Result
| Cells | Nusselt number | vs FEM 2.254 | Drift | Peak speed spread |
|---|---|---|---|---|
| 20 × 20 | 2.3375474 | +3.71 % | 0 | 0.0000 % |
| 30 × 30 | 2.2963172 | +1.88 % | 0 | 0.0000 % |
| 40 × 40 | 2.2831308 | +1.29 % | 0 | 0.0000 % |
The Boussinesq cavity on the same mesh at Ra = 10⁴ gives 2.2596. The compressible answer sits about one per cent above it at every mesh, which is the size the non-Boussinesq parameter of 0.033 would lead you to expect, and both sit inside the spread between Wan’s two procedures. That is the thing this page exists to establish: what the Boussinesq approximation was worth on this problem.
Every run is bit-identical across its last two writes — the Nusselt number is the same at 4 000, 8 000 and 12 000 iterations on all three meshes — and the peak speed in the cavity is flat across the whole second half of the iteration history. That stillness is recorded and checked rather than assumed, because this is the family that taught the project to distrust residualControl: left to its own criterion the Boussinesq cavity stopped between 476 and 2 617 iterations with the Nusselt number still climbing, and refining the mesh made it worse.
This page judges Ra = 10⁴ only, and here is why
Four controls, all at Ra = 10⁵ on the same mesh, place the fault:
| Configuration | Peak-to-peak swing |
|---|---|
| The case as staged, no transport edit | 27.4 % |
| nNonOrthogonalCorrectors raised from 1 to 2 | 27.4 % |
| p_rgh 0.3 → 0.1, U and T 0.7 → 0.3 | 0.00 % |
| The density relaxation, rho, raised from 0.05 to 1.0 | 0.00 % |
| buoyantBoussinesqSimpleFoam on the same cavity, untouched | 0.00 % |
The two configurations that fix it fix it to the same answer — peak speed 0.0405144 against 0.0405154, agreeing to five figures by two different routes. So a converged solution is there and the iteration simply is not finding it. The cause is the relaxation the application writes for this solver, relaxationFactors/fields/rho 0.05: under-relaxing density that hard, with the pressure at 0.3, is what sustains the cycle.
This is a product finding and it is not fixed in the benchmark. A benchmark measures what the application ships, so the judged sweep runs the Rayleigh number where the shipped configuration converges on every mesh it can afford.
Why the meshes stop at 40 cells
A second finding, written down rather than chased. Timed back to back inside one process, 3 000 iterations on the 40-cell mesh take 414 seconds at Ra = 10³ and 10.9 seconds at Ra = 10⁴ — the same mesh, the same solver, the same everything but the side length. Thirty-eight times, for a factor of ten in Rayleigh number.
It is not machine load. The same measurement at 20 cells gives 5.6, 5.5 and 6.3 seconds at Ra 10³, 10⁴ and 10⁵ — within 15 % of each other. So the cost is not a function of Rayleigh number and it is not a function of mesh size: it is a function of the two together, and what predicts it is the Rayleigh number per cell. Nor is it there from the start — the first 30 iterations of the slow case run at full speed.
The consequence is the reason this study uses 20, 30 and 40 cells where the Boussinesq cavity uses 40, 80 and 160: a refinement study gets rapidly more expensive the more it refines, which is the one thing a verification benchmark cannot afford. Ra = 10³ — which converges, and agrees — is not swept for the same reason.
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
- 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.
- Heat crossing a solid–fluid interfaceNeither check needs a reference table. If both regions start at one temperature nothing may move; and with no heat source anywhere, no temperature may leave the range its own data started in.
All validation cases · Written by the team building SHD Sim.