Validation/Euler–Euler multiphase
A sealed bubble column at its slip velocity
A uniform suspension of 50 µm bubbles in a sealed column, against the slip velocity its own declared drag law gives — tested at three concentrations so the hindering factor is a prediction and not a fit.
Why this case, and what is external about it
The Euler–Euler two-fluid family — four solvers that treat both phases as interpenetrating continua — had no reference behind it at all. This case gives it one, and the honest description of that reference needs two sentences rather than one.
The balance is derived from the momentum equations the solver itself writes. It is not fetched from a paper. Taken on its own that would be circular, and this page says so before it says anything else.
The drag law inside that balance is not ours. Cd is the Schiller–Naumann correlation, published, and it is what the product’s own case file declares. And the balance makes a prediction the case was not built on: the suspension is hindered, by a factor (1 − a) that the mixture’s own weight puts into the pressure gradient. That factor is worth 5 % at the concentration this case runs, and it moves with concentration in a way that can be tested at concentrations it was never fitted to. That test — three concentrations, one formula — is what carries this page.
| Physics | Euler–Euler two-fluid, air bubbles in water, laminar in both phases |
|---|---|
| Column | 0.15 × 1 × 0.1 m, 800 cells, sealed at both ends, slip on every wall |
| Fill | Uniform phase fraction 0.05, bubble diameter 50 µm |
| Fluids | Water 998.2 kg/m³, µ 9.982 × 10⁻⁴; air 1.2014 kg/m³ at 101 325 Pa, 293.15 K |
| Drag | Schiller–Naumann both ways, no lift, wall lubrication or turbulent dispersion |
| Gravity | 9.81 m/s², bubble Reynolds number 0.0632 |
| Time | 0.5 s — 7183 particle relaxation times of 6.96 × 10⁻⁵ s |
| Reference | The steady, uniform, one-dimensional buoyancy–drag balance closed by the published Schiller–Naumann drag correlation and solved by bisection |
| Agreement | Slip velocity 1.264380 × 10⁻³ m/s against a balance of 1.264363 × 10⁻³ — 0.0013 % apart |
The balance
Steady, uniform and one-dimensional, with the velocities constant in space so every convective and viscous term vanishes, the two momentum equations reduce to a pair of algebraic statements — one per phase, coupled by the drag K:
0 = -a_d grad(p) + a_d rho_d g + K (u_c - u_d)
0 = -a_c grad(p) + a_c rho_c g + K (u_d - u_c)Adding them removes the drag and leaves the mixture hydrostatic balance, grad(p) = ρmix g. Putting that back into the dispersed equation, and using the solver’s own drag coefficient K = 0.75 Cd Re ρc νc ad/ d², the dispersed fraction cancels off the front of both sides and what is left is
(1 - a) (rho_c - rho_d) |g| = 0.75 Cd rho_c u_r^2 / d
— the single-sphere terminal-velocity balance, hindered by a (1 − a). At a = 0 it is exactly the terminal velocity of one sphere.
Cd is the case’s own Schiller–Naumann: 24/Re (1 + 0.15 Re0.687) below Re 1000, and 0.44 above it. Re depends on the slip velocity, so the balance is implicit and is solved by bisection rather than quoted — which makes it exact for the drag model the product actually asks for rather than for an idealisation of it. At this Reynolds number, 0.0632, the answer also sits within 2.25 % of the Stokes formula, so the number is one an engineer can check on paper.
The (1 − a) was found by being wrong about it
This is the part of the derivation that has to be defended, and the defence is the strongest evidence on the page.
The first measured run came out 4.92 % below the unhindered balance — which at a = 0.05, in the Stokes regime, is the factor 0.95 to three figures. Before that was called either a product defect or a correction to the reference, the zero-gravity control was run: same case, gravity zero, nothing else changed. It said the case and the harness produce exactly nothing when nothing should happen, so the error was in the reference and not in the run.
But a factor recovered from one measurement is a fit. So the same closed form was then run at two concentrations it had not been derived from.
| Phase fraction | Balance | Measured | With the (1 − a) | Without it |
|---|---|---|---|---|
| 0.02 | 1.303680 × 10⁻³ | 1.303694 × 10⁻³ | +0.0010 % | −1.9687 % |
| 0.05 | 1.264363 × 10⁻³ | 1.264380 × 10⁻³ | +0.0013 % | −4.9249 % |
| 0.10 | 1.198766 × 10⁻³ | 1.198819 × 10⁻³ | +0.0044 % | −9.8547 % |
A factor tuned to the middle row cannot land within a thousandth of a per cent on the other two, and it certainly cannot track a discrepancy that grows from 2 % to 10 % across them. The right-hand column is what the same three runs look like without the hindering factor.
Result
| Quantity | Value |
|---|---|
| Balance, Schiller–Naumann, hindered | 1.264363 × 10⁻³ m/s |
| The same by Stokes | 1.292817 × 10⁻³ m/s — +2.25 % |
| The same without the (1 − a) | 1.329875 × 10⁻³ m/s — +5.18 % |
| Measured slip velocity | 1.264380 × 10⁻³ m/s — +0.0013 % |
| Spread across the 30 bulk layers | 1.262384 × 10⁻³ to 1.266358 × 10⁻³ — 0.314 % |
| Bulk mean phase fraction | 0.049986 — −0.027 % of the 0.05 it started at |
| Bubble Reynolds number | 0.0632 |
| Relaxation time | 6.96 × 10⁻⁵ s — 7183 of them in the run |
| Quantity | Air | Water |
|---|---|---|
| Phase mass against the initial condition | 7.97 × 10⁻⁴ | 1.76 × 10⁻⁶ |
| Spread of phase mass across the ten writes | 2.19 × 10⁻⁴ | 3.67 × 10⁻⁷ |
| The same across the settled half of the run | 1.88 × 10⁻⁷ | 1.32 × 10⁻⁹ |
Two more numbers close the case. The phase fractions sum to one to 5.0 × 10⁻⁹, which is the eighth significant figure of a 0.05 and a 0.95 written at eight-digit precision — it is the file format and not the solver. And the net volumetric flux across a horizontal plane, which continuity says is zero in a sealed column, is 1.29 × 10⁻⁷ m/s at the last write: 1.0 × 10⁻⁴ of the slip velocity.
The control is the zero-gravity run. Nothing drives it, so the exact answer is that nothing happens, and that is what it gives: the largest velocity component anywhere is 1.41 × 10⁻¹⁴ m/s, the slip velocity is −2.73 × 10⁻¹⁷ m/s, the phase fraction is 0.05 in every cell at every write, the two fractions sum to one exactly, and both phase masses are unchanged.
The headline alone would verify a column being refilled
Three of the fixtures are the accepted case with one thing put back to what the application writes by default, changing nothing else — so each says what that default costs.
| Run | Slip vs the balance | Air mass drift | Net flux | Writes |
|---|---|---|---|---|
| Accepted | +0.0013 % | 7.97 × 10⁻⁴ | 1.0 × 10⁻⁴ | 10 |
| Staged open ends | +2.8192 % | 9.43 × 10⁻¹ | 9.3 × 10¹ | 10 |
| Staged 3 mm bubble | +0.0539 % | 4.21 × 10⁻⁴ | 8.8 × 10⁻⁴ | 10 |
| Staged write control | — | — | — | 0 |
| Zero gravity (control) | 0 | 2.39 × 10⁻⁷ | 3.6 × 10⁻¹⁵ | 10 |
The column is staged open, and it is refilled while it is being measured. The staged inlet fixes the air fraction at 1 and the velocity at 0.1 m/s, against an outlet pair that lets the mixture leave. Over half a second the column takes on 94 % more air than it started with and its top cells reach a fraction of 0.932 — and it still reports a slip velocity 2.82 % from the balance, its bulk layers still agree with each other to 0.8 %, and its phase fractions still sum to one to 5 × 10⁻⁹. On the headline velocity alone that column reads as verified. Only the mass integral and the continuity check catch it, which is the entire argument for measuring them.
The staged 3 mm bubble passes the headline and verifies nothing. The balance is solved as honestly for 3 mm as for 50 µm and the run lands on it to +0.054 %. But the Reynolds number is then 850, where Schiller–Naumann sits 1543 % away from Stokes — so that agreement is a correlation agreeing with itself rather than a number anybody could check on paper. And the relaxation time is 0.25 s against a 0.5 s run: two time constants, with the column still on its way to a slip velocity rather than sitting at one. Both guards fire, and so does the one that says the suspension has separated.
The staged write control produces no answer at all. It pairs an interval of 100 with an end time of 1 s, which puts the first write at t = 100 s. The case solves, reaches the end, exits cleanly, and leaves nothing on disk but the initial directory. A harness that reported numbers from that directory would be reporting its own initial condition back to itself.
What this page does not establish
- One solver of the four in the family. Only the two-phase Euler solver, because that is what the product stages. The multiphase and reacting variants are untouched by this case.
- One drag law, at one Reynolds number. Re is 0.063. The 0.44 branch of Schiller–Naumann above Re 1000 is never entered, and no other drag model in the bundle is exercised.
- Lift, wall lubrication, turbulent dispersion, interphase heat and mass transfer, the dispersed-regime blending, population-balance diameters and every turbulence model are asserted absent rather than checked. If the product ever starts staging one of them, the harness stops rather than measuring past it.
- The bubble column this family is actually sold for is not verified at all. A sparged plume rising in a tank, hold-up against height, is a different problem. This is a uniform suspension in a sealed box, chosen because it has an exact answer.
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
- Flow over a circular cylinderThe only case with no steady state: the answer is a frequency, not a field. It found that a more symmetric mesh needs a LONGER run, not a shorter one.
- A sealed settling columnKynch predicts a rate, and predicts that it is constant — so one agreeing number is not enough to pass. Two of the checks need no theory at all: a sealed column cannot lose solid, and a volume fraction cannot leave [0, 1].
- How much of the answer is the meshEvery 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.
All validation cases · Written by the team building SHD Sim.