Skip to content
SHD Sim
Menu

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.

VerificationSlip velocity 1.264380 × 10⁻³ m/s against a balance of 1.264363 × 10⁻³ — +0.0013 %, and within 0.005 % at three concentrations

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.

PhysicsEuler–Euler two-fluid, air bubbles in water, laminar in both phases
Column0.15 × 1 × 0.1 m, 800 cells, sealed at both ends, slip on every wall
FillUniform phase fraction 0.05, bubble diameter 50 µm
FluidsWater 998.2 kg/m³, µ 9.982 × 10⁻⁴; air 1.2014 kg/m³ at 101 325 Pa, 293.15 K
DragSchiller–Naumann both ways, no lift, wall lubrication or turbulent dispersion
Gravity9.81 m/s², bubble Reynolds number 0.0632
Time0.5 s — 7183 particle relaxation times of 6.96 × 10⁻⁵ s
ReferenceThe steady, uniform, one-dimensional buoyancy–drag balance closed by the published Schiller–Naumann drag correlation and solved by bisection
AgreementSlip 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.

The same formula against three runs, nothing changed between them but the initial fraction
Phase fractionBalanceMeasuredWith the (1 − a)Without it
0.021.303680 × 10⁻³1.303694 × 10⁻³+0.0010 %−1.9687 %
0.051.264363 × 10⁻³1.264380 × 10⁻³+0.0013 %−4.9249 %
0.101.198766 × 10⁻³1.198819 × 10⁻³+0.0044 %−9.8547 %
All in m/s, from the fixtures. The 0.02 and 0.10 runs are two seconds; the 0.05 row is the accepted half-second run. The last column is the same measurement against the unhindered balance, which is 1.329875 × 10⁻³ m/s at every concentration.

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

The accepted run: 50 µm bubbles at a phase fraction of 0.05, 800 cells, 0.5 s
QuantityValue
Balance, Schiller–Naumann, hindered1.264363 × 10⁻³ m/s
The same by Stokes1.292817 × 10⁻³ m/s — +2.25 %
The same without the (1 − a)1.329875 × 10⁻³ m/s — +5.18 %
Measured slip velocity1.264380 × 10⁻³ m/s — +0.0013 %
Spread across the 30 bulk layers1.262384 × 10⁻³ to 1.266358 × 10⁻³ — 0.314 %
Bulk mean phase fraction0.049986 — −0.027 % of the 0.05 it started at
Bubble Reynolds number0.0632
Relaxation time6.96 × 10⁻⁵ s — 7183 of them in the run
From the fixture. The slip velocity is measured across the 30 interior layers of the column, away from the sealed ends.
The conservation checks, which are what the headline cannot see
QuantityAirWater
Phase mass against the initial condition7.97 × 10⁻⁴1.76 × 10⁻⁶
Spread of phase mass across the ten writes2.19 × 10⁻⁴3.67 × 10⁻⁷
The same across the settled half of the run1.88 × 10⁻⁷1.32 × 10⁻⁹
Relative, from the fixture. The air drift is almost all in the first write, while the solver builds a hydrostatic pressure field under a gas that was initialised at a uniform one; across the settled half the sealed column holds its air to two parts in ten million.

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.

Every one of these is required to be rejected
RunSlip vs the balanceAir mass driftNet fluxWrites
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 control0
Zero gravity (control)02.39 × 10⁻⁷3.6 × 10⁻¹⁵10
From the fixtures. Net flux is the net volumetric flow across a horizontal plane at the last write, as a multiple of the slip velocity; continuity makes it zero in a sealed column.

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.

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