Gaspar García, CFD portfolio

All cases

Compared

Tall-cavity natural convection: mean Nusselt number 20 % below the quoted experiment, and refining the grid does not close the gap

I ran wall-resolved k-omega SST on four systematically refined grids of the cavity mid-plane. The grid changes mean Nu by little: the numerical uncertainty is 0.55 %, and the gap to the experimental value is about 47 times that. The gap therefore comes from the model, the inputs, the measurement or the way the experiment defines Nu, and with the data I have I cannot tell which.

Mean Nu, simulation
4.658
finest of four grids
Mean Nu, experiment
5.85
quoted second-hand (KBwiki UFR 4-10)
Signed difference
−20.4 %
simulation minus experiment
Numerical uncertainty
±0.025
least squares on four grids, 95 %
Case
ERCOFTAC C-079, tall differentially heated air cavity
Solver
OpenFOAM v2412, buoyantSimpleFoam
Turbulence model
k-omega SST, resolved to the wall
Cells
8,000 to 64,410 (four grids)
Rayleigh number
0.86 × 10⁶ (cavity width)
Status
Compared
Updated
2026-11-14

2Geometry, mesh, results

Tall air-filled cavity, 2-D section: heated and cooled side walls, top and bottom walls held at the measured temperature profile; walls drawn as lines. Not to scale: the cavity is 28.7 times taller than wide, so its width is drawn 6 times true scale and it is turned on its side (hot wall at the bottom, top end at the right); probe positions are in true coordinates.

Not to scale: x drawn 6 times true scale. Probe positions are given in true coordinates.

Geometry: Tall air-filled cavity, 2-D section: heated and cooled side walls, top and bottom walls held at the measured temperature profile; walls drawn as lines. Not to scale: the cavity is 28.7 times taller than wide, so its width is drawn 6 times true scale and it is turned on its side (hot wall at the bottom, top end at the right); probe positions are in true coordinates.

3Case parameters

Rayleigh number (cavity width)0.86 × 10⁶
Height, width, depth2.18 m, 0.076 m, 0.52 m
Wall temperatures307.75 K and 288.15 K (19.6 K)
FluidAir, Pr 0.705
SolverOpenFOAM v2412, buoyantSimpleFoam
Turbulence modelk-omega SST, wall-resolved
Wall y+ max0.097 finest, 0.26 coarsest
Cells8,000 to 64,410
Fluid propertiesperfect gas, constant properties: Cp 1004.4 J/kg K, viscosity 1.831e-05 Pa s, molar mass 28.96 kg/kmol
Gravity(0 −9.81 0) m/s²
Run costNot recorded

4Experiment

Betts and Bokhari built an air-filled cavity 2.18 m high, 0.076 m wide and 0.52 m deep, with isothermal aluminium side walls 19.6 K apart and 5 cm hard rubber, k = 0.155 W/mK top and bottom walls with thermocouples at mid-thickness. Velocity was measured by laser-Doppler velocimetry and temperature with a traversed thermocouple. The source describes the flow on the mid-plane as closely two-dimensional.

The open ERCOFTAC files give mean temperature and mean vertical velocity across the cavity at 9 heights (y/H 0.05 to 0.95), temperature normal to the floor and roof at x = 38.1 mm, and the temperature inside the rubber walls, which I used as boundary conditions. The mean Nusselt number 5.85 is not in those files: it is quoted on the ERCOFTAC KBwiki page UFR 4-10, without its definition.

One file has a defect: at y/H 0.10, four points at x = 40.6–55.8 mm alternate 4–5 K above their neighbours. They are plotted as given.

Stated uncertaintyNot stated in the source. The experimental uncertainty and the experiment's definition of the mean Nusselt number are on neither open page; the journal paper is closed access and I have not read it.
Blockage and correctionsNot applicable: a closed cavity, no tunnel.
LicenceERCOFTAC Classic Collection case 079 (University of Manchester), data of Betts and Bokhari, CC BY-NC-SA 4.0. The tables and CSV files here are derived from that data and carry the same licence.

Mean temperature at y/H 0.5 (x in mm, T in °C)

Experimental values (51 points)
x from the cold wall (mm)Experiment (Betts and Bokhari)
0.3315.62
0.5815.94
0.8416.45
1.0916.78
1.617.58
2.1118.48
2.6119.05
3.2519.43
3.8819.96
5.1520.46
6.4221.32
7.6921.74
8.9622.01
10.2322.21
11.522.53
12.7722.74
15.3123.02
17.8523.35
20.3923.76
22.9323.69
25.4724.17
28.0124.25
30.5525.08
33.0925.15
35.6325.33
38.1725.26
40.5725.23
43.1125.57
45.6525.92
48.1926.12
50.7325.87
53.2726.3
55.8126.55
58.3526.99
60.8927.05
63.4327.53
64.727.65
65.9727.77
67.2427.71
68.5128.38
69.7828.61
71.0529.44
72.3230.06
72.9530.5
73.5931.12
74.0931.66
74.632.37
75.1133.08
75.3633.37
75.6233.94
75.8734.21

Download CSV

Mean vertical velocity at y/H 0.5 (x in mm, V in m/s)

Experimental values (28 points)
x from the cold wall (mm)Experiment (Betts and Bokhari)
1.2-0.081
2.2-0.115
3.2-0.124
4.2-0.133
6.2-0.135
8.2-0.134
10.2-0.12
12.2-0.112
14.2-0.11
16.2-0.1
18.2-0.089
23.2-0.062
28.2-0.048
33.2-0.011
38.20.012
43.20.041
48.20.054
53.20.077
58.20.091
60.20.099
62.20.106
64.20.12
66.20.127
68.20.133
70.20.137
71.20.14
72.20.131
73.20.121

Download CSV

Mean temperature at all nine heights, as distributed

Download CSV

Mean vertical velocity at all nine heights, as distributed

Download CSV

Temperature normal to the floor and roof at x 38.1 mm, as distributed

Download CSV

5Set-up

A 2-D slice of the cavity mid-plane, 2.18 m by 0.076 m, one cell (0.01 m) thick with empty front and back faces. The parent case is the stock buoyantCavity tutorial (3-D, wall functions, adiabatic top and bottom). I changed three things on purpose: the 2-D slice, wall-resolved SST, and top and bottom walls held at the measured rubber-wall temperature instead of adiabatic.

The cavity is closed, so there is no inlet or outlet: the flow is driven by the 19.6 K between the side walls. Values below are from the finest grid's 0/ files; the other grids use the same recipe.

Boundary conditions
BoundaryTypeValue
Hot wall (x = W)no-slip; fixed temperature307.75 K
Cold wall (x = 0)no-slip; fixed temperature288.15 K
Bottom and top wallsno-slip; fixed temperature, one value per facenon-uniform list of measured values (the rubber-wall temperature profile)
All four walls, turbulencek fixed; omega omegaWallFunction; nut nutLowReWallFunction; alphat compressible::alphatWallFunctionk 1e-12 m²/s²; turbulent Prandtl number 0.85
All four walls, pressurefixedFluxPressure (p_rgh)1e5 Pa
Front and backempty (2-D)

Numerics and convergence

Steady buoyantSimpleFoam with gravity (0 −9.81 0) m/s², initial temperature 297.95 K. Convection terms for U, energy and turbulence: bounded Gauss limitedLinear 0.2. Pressure relaxation 0.7.

Convergence was judged from the Nusselt-number history. The finest grid was extended from 20,000 to 35,000 iterations because Nu was still drifting in one direction. At the end, the hot-wall Nu varies by 2.17e-05 (relative) over the last 2000 iterations, and the heat balance over all walls closes to 7 × 10⁻⁵ of the wall flux.

The Nusselt number is my definition, Nu = q_mean W / (k ΔT), with W the cavity width and k from Cp, viscosity and Prandtl number. On the finest grid the hot wall gives 4.6607 and the cold wall 4.6551; the page uses their mean.

6Mesh

Cells, finest grid64,410
StructureOne block, 114 × 565 cells, graded towards every wall
y+ max, finest grid (cold wall)0.097
Max non-orthogonality0
Max skewness1.2e-11
Max aspect ratio80
checkMesh verdict, finest grid“Mesh OK.”
The four grids, same recipe, grid-size ratio about 1.41 between neighbours. Mean Nu and the signed difference from the quoted 5.85 are as written by compare.py for each grid.
GridCellsIterationsMean Nuvs experimentcheckMesh
g0.5 (coarsest)8,00020,0004.5962−21.43 %“Mesh OK.”
g0.707115,84820,0004.6262−20.92 %“Mesh OK.”
g1.032,00020,0004.6459−20.58 %“Mesh OK.”
g1.4142 (finest)64,41035,0004.6579−20.38 %“Mesh OK.”

Every grid passed checkMesh; the log of each exact mesh was read before it was solved. The mesh is a single orthogonal block, so non-orthogonality is zero and skewness is at round-off level.

7Results

On the finest of four grids the mean Nusselt number is 4.658 ±0.025, against 5.85 quoted for the experiment: −20.4 %.

Mean Nusselt number on the four grids (4.5962 on 8,000 cells to 4.6579 on 64,410), the least-squares extrapolation 4.678, and the experimental 5.85 as a dashed reference line. The grid moves Nu by a small fraction of the gap.
Mean temperature across the cavity at mid-height, y/H 0.5. RMS difference 0.513 K. Simulation values converted to the experiment's units in one place (pipeline/case_data/betts-bokhari-cavity.py), the same conversion compare.py uses: x [mm] = 1000 × x [m], T [°C] = T [K] − 273.15.
Mean vertical velocity across the cavity at mid-height, y/H 0.5: upward next to the hot wall, downward next to the cold wall. Peak up and peak down, experiment then simulation: 0.140 and 0.166 m/s; −0.135 and −0.165 m/s. Velocities are in m/s in both files; x converted as x [mm] = 1000 × x [m].
Mean temperature near the floor, y/H 0.10. Hollow markers: four points of the ERCOFTAC file mt_z0_10_lo.dat, at x = 40.57, 45.65, 50.73 and 55.81 mm, that sit 4–5 K above their neighbours and match the mid-height values of mt_z0_40_lo.dat and mt_z0_50_lo.dat at the same x; the file header does not explain them and the cause upstream is not determined. They are shown as published, not deleted or moved. The RMS difference copied from the run's RESULT.txt, 1.448 K, includes them; without them it is 0.32 K. Units converted as x [mm] = 1000 × x [m], T [°C] = T [K] − 273.15.
Mean vertical velocity near the floor, y/H 0.1. Peak up and peak down, experiment then simulation: 0.193 and 0.178 m/s; −0.101 and −0.112 m/s. x converted as x [mm] = 1000 × x [m].
Mean temperature near the roof, y/H 0.9. RMS difference 0.662 K. Units converted as x [mm] = 1000 × x [m], T [°C] = T [K] − 273.15.
Mean vertical velocity near the roof, y/H 0.9. Peak up and peak down, experiment then simulation: 0.103 and 0.112 m/s; −0.180 and −0.174 m/s. x converted as x [mm] = 1000 × x [m].
QuantityExperimentSimulation, finest gridSigned difference
Mean Nusselt number5.854.658−20.4 %
Peak upward velocity at y/H 0.50.140 m/s0.1664 m/s+19 %
Mean temperature, RMS difference across the cavity, 9 heights––0.41–1.45 K
Temperature normal to floor / roof at x 38.1 mm, RMS difference––0.31 K / 0.85 K

Refining the grid moves Nu towards the experiment, but by very little. The least-squares extrapolation is 4.678, still −20 % from 5.85, so the difference is not a grid effect.

The temperature in the core of the cavity agrees to about 0.5 K; across the whole width the RMS difference is 0.41–1.45 K over the nine heights (0.32 K at y/H 0.10 if the four suspect points are left out). The velocity peaks are too high: at mid-height the upward peak is 0.1664 m/s against 0.140 m/s.

The measured temperature gradients next to the side walls are steeper than mine at every height, by 15–55 % (my 3-point fits to the measured points at x = 0.33–0.84 mm). That is consistent with the heat-transfer deficit sitting in the wall layers, but it is my inference from three points per wall, not a measurement of the cause.

8Numerical accuracy

Method: the Eça and Hoekstra least-squares procedure on all four grids, run with the project's one shared implementation (gci.py). It finds an observed order of 1.344 (formal order 2), monotone convergence, an extrapolated value of 4.678 and an uncertainty of 0.0254 on the finest-grid Nu (0.545 %, safety factor 1.25). The case write-up rounds these to order 1.34 and ±0.025 (0.55 %).

The observed order is well below 2, so the grids are not in the textbook asymptotic range; four grids are what make that visible. The least-squares code has unit tests but no regression against a published numerical example yet.

The peak velocity has no asymptotic order: its uncertainty is only bounded, ≤ 0.0019 m/s. The temperature profiles change by at most 0.02 K across the ladder.

Output of the shared GCI tool, unedited

Mean Nu, four grids, least squares

LSR      Eca & Hoekstra 2014 least-squares, ng=4  (h sorted finest->coarsest: 1.0000, 1.4187, 2.0160, 2.8375)
         f: 4.657889, 4.645900, 4.626232, 4.596175
         delta_RE unweighted p =   1.3392   sigma = 0.0001339
         delta_RE eq16       p =   1.3440   sigma = 0.0001332
         observed order p = 1.344   (formal 2.0)   verdict: apparently monotonic
         chosen fit: p-free (eq16)   phi0 = 4.678092   alpha = -0.0201744
         sigma = 0.0001332   Delta_phi = 0.02057   F_sigma = 0.006  (want < 1)
         U_phi(finest) = 0.0253794  (0.545 % of f_fine; eq (20); Fs=1.25; eps=0.02017, sigma=0.0001332, |f-fit|=2.824e-05)

From data/betts-bokhari-cavity/gci.json (lsr_4grid), written by pipeline/build_assets.py.

9Why they differ, and what I distrust

Limits, as recorded in the ledger. A comparison, not an ASME V&V 20 validation: the experimental mean Nu 5.85 is quoted second-hand from the ERCOFTAC KBwiki UFR 4-10 page, with its definition and uncertainty unknown. 2-D slice of a 3-D rig; top and bottom wall temperatures are imposed from the experiment. The 20 % deficit appears in the wall layers (experimental gradient about 40 % steeper at mid-height, a 3-point inference); the 'too laminar' hypothesis is untested. Order 1.34 on 4 grids, LSR band 0.5 %. Data CC BY-NC-SA 4.0.

  • The experimental 5.85 is quoted second-hand from the KBwiki page. Its definition (which walls, which reference temperature difference, whether losses are corrected) and its uncertainty are unknown, so part of the gap may be definitional. Until I read the Betts and Bokhari paper this is a comparison, not an ASME V&V 20 validation.
  • The rig is 3-D and I solve a 2-D slice of its mid-plane.
  • The top and bottom wall temperatures are imposed from the same experiment's measurements, not predicted.
  • The wall-layer location of the deficit rests on 3-point gradient fits to thermocouple readings less than a millimetre from the wall, whose position uncertainty I do not know.
  • My hypothesis that the RANS model keeps the wall layers too laminar, which would also explain the over-predicted velocity peaks, is untested: a second turbulence model on the finest grid is owed.
  • The solver treats air as a constant-property perfect gas; the source places the flow in the Boussinesq regime (temperature ratio 0.033), so this should matter little, but I have not checked it.
  • The peak velocity is read from the sampled points, so its value snaps between sample positions.

10References

  1. Betts, P.L., Bokhari, I.H. (2000). Experiments on turbulent natural convection in an enclosed tall cavity. Int. J. Heat and Fluid Flow, Vol. 21, pp. 675-683. (Cited from the ERCOFTAC page; closed access, not read.)
  2. ERCOFTAC Classic Collection, case 079: turbulent natural convection in an enclosed tall cavity (University of Manchester). Data CC BY-NC-SA 4.0. http://cfd.mace.manchester.ac.uk/ercoftac/doku.php?id=cases:case079
  3. ERCOFTAC KBwiki, UFR 4-10: natural convection in simple closed cavity, N. Waterson (Mott MacDonald Ltd), ERCOFTAC 2004. Source of the quoted mean Nusselt number. https://www.kbwiki.ercoftac.org/w/index.php?title=UFR_4-10_Test_Case
  4. Eça and Hoekstra (2014): the least-squares numerical-uncertainty procedure, as implemented in the project's gci.py.

Source files

  • D:/CFD/heat-transfer/betts-bokhari-cavity/CASE-STUDY.md
  • D:/CFD/heat-transfer/betts-bokhari-cavity/ladder.txt
  • D:/CFD/heat-transfer/betts-bokhari-cavity/compare.py
  • D:/CFD/heat-transfer/betts-bokhari-cavity/g0.5/, g0.7071/, g1.0/, g1.4142/ (RESULT.txt, log.checkMesh)
  • D:/CFD/heat-transfer/betts-bokhari-cavity/g1.4142/0/, constant/, system/
  • D:/CFD/heat-transfer/betts-bokhari-cavity/g1.4142/postProcessing/profiles/35000/
  • D:/CFD/data/heat-transfer/betts-bokhari-cavity-case079/Low-Ra/ and SOURCE.md
  • site/public/data/betts-bokhari-cavity/ (CSV copies, README.txt, chart JSON and gci.json from pipeline/case_data/betts-bokhari-cavity.py)

Last updated 2026-11-14. One-page summary (prints to one A4 page), also as a PDF. Every number on this page is checked against its source file by pipeline/check_numbers.py.