Skip to content
cfd-lab:~/en/posts/2026-05-09-saurel-2009-p…● online

Translated from the author's Korean original. Read the original (한국어)

NOTE #036DAY SAT 논문리뷰DATE 2026.05.09UPDATED 2026.10.19READ 6 min read#Paper-Review#Compressible-Multiphase#Diffuse-Interface#Saurel#Pressure-Relaxation#Kapila-Model

[Paper Review] Solve with Two Pressures, Merge to One — Saurel (2009) on Multiphase Pressure Relaxation

In a water-air cell the Wood speed falls near 24 m/s, and the impedance mean sits on the air pressure, not the water pressure.

A nuclear safety simulation at Idaho National Laboratory once stopped dead. Inside a cell trapped between liquid sodium and a tiny gas pocket, the mixture sound speed had collapsed to about 25 m/s. That was the limit of the five-equation model with its pressure-equilibrium assumption. In 2009 Saurel and his coauthors stepped back. Solve the two pressures apart. Glue them only at the end of the step.

Move the ρk\rho_k and ckc_k sliders and the gap between the Wood curve and the frozen curve changes.

Wood (equilibrium) sound speed dips far below either pure-fluid value near intermediate α; frozen speed stays inside the [c₂, c₁] band.

Near water at 1500 m/s and air at 340 m/s, only the Wood branch drops to the floor. The frozen branch stays between the two pure speeds.

The one-line takeaway#

The five-equation model breaks at the sound speed. Step back to a six-equation model, solve it, and use stiff relaxation to merge the two pressures again. The interface pressure p^I=(Z2p1+Z1p2)/(Z1+Z2)\hat{p}_I = (Z_2 p_1 + Z_1 p_2)/(Z_1+Z_2) is the single line that ties everything together.

The Wood sound speed is a sandbag#

Kapila's (2001) five-equation model assumes pressure equilibrium — both phases share one pressure inside each cell. It looks clean, but the resulting mixture sound speed misbehaves. The equilibrium speed ceqc_{eq} obeys the Wood (1930) formula

1ρceq2=α1ρ1c12+α2ρ2c22\frac{1}{\rho c_{eq}^2} = \frac{\alpha_1}{\rho_1 c_1^2} + \frac{\alpha_2}{\rho_2 c_2^2}

where αk\alpha_k is the volume fraction of phase kk, ρk\rho_k the density, and ckc_k the pure-phase sound speed. The trouble is that this curve is not monotonic. A water (1500 m/s) and air (340 m/s) mixture inside a single cell can drop to roughly 24 m/s — far below either pure-phase value.

In the numerical diffusion zone an artificial mixture appears between the two pure states, and acoustic waves slow down dramatically inside it. Wave arrival times shift, shock tracking breaks. On top of that, keeping α\alpha strictly positive near 0 or 1 is also delicate.

Drop the cell from the code into Wood's formula and the quoted 24 m/s comes back. With α1=0.7\alpha_1 = 0.7, ρ1=1000\rho_1 = 1000, c1=1500c_1 = 1500, one gets ρ1c12=2.25×109\rho_1 c_1^2 = 2.25\times 10^9. On the air side α2=0.3\alpha_2 = 0.3, ρ2=1\rho_2 = 1, c2=340c_2 = 340, so ρ2c22=1.156×105\rho_2 c_2^2 = 1.156\times 10^5. The air term on the right is near 2.6×10−62.6\times 10^{-6}; the water term is near 3×10−103\times 10^{-10} and barely shows. Mixture density is 0.7×1000+0.3=700.30.7\times 1000 + 0.3 = 700.3. Once 1/(ρceq2)1/(\rho c_{eq}^2) is eaten by the air term, ceqc_{eq} sits near 24 m/s. The frozen formula in the same cell, cf2=Y1c12+Y2c22c_f^2 = Y_1 c_1^2 + Y_2 c_2^2, goes the other way. Almost all the mass is water, so cfc_f sticks beside 1500 m/s. The two speeds in one cell differ by about sixty. That collapse is what a half-and-half water-air sound speed digs into further.

The detour — let the pressures disagree#

Saurel takes a step back. Drop the pressure-equilibrium assumption and let each phase carry its own pressure p1p_1, p2p_2. Starting from the seven-equation Baer–Nunziato model and taking the velocity-relaxation limit alone gives the six-equation model.

∂tα1+u ∂xα1=μ(p1−p2)\partial_t \alpha_1 + u\,\partial_x \alpha_1 = \mu(p_1 - p_2) ∂t(αkρk)+∂x(αkρku)=0\partial_t (\alpha_k \rho_k) + \partial_x(\alpha_k \rho_k u) = 0 ∂t(ρu)+∂x(ρu2+α1p1+α2p2)=0\partial_t (\rho u) + \partial_x(\rho u^2 + \alpha_1 p_1 + \alpha_2 p_2) = 0 ∂t(αkρkek)+∂x(αkρkeku)+αkpk ∂xu=±pIμ(p1−p2)\partial_t (\alpha_k \rho_k e_k) + \partial_x(\alpha_k \rho_k e_k u) + \alpha_k p_k\,\partial_x u = \pm p_I \mu (p_1 - p_2)

Here μ\mu is the pressure-relaxation rate (stiff), pIp_I the interface pressure, and eke_k the phasic internal energy. The mixture sound speed of this model becomes

cf2=Y1c12+Y2c22c_f^2 = Y_1 c_1^2 + Y_2 c_2^2

with Yk=αkρk/ρY_k = \alpha_k \rho_k / \rho the mass fraction. The curve is monotonic; the Wood sandbag is gone.

The interface pressure p^I\hat{p}_I — an impedance-weighted average#

The pIp_I that appears on the right-hand side of the internal energy equations is the velocity-equilibrium limit of the asymmetric interfacial term in the seven-equation model, and it falls out as

pI=Z2p1+Z1p2Z1+Z2,Zk=ρkckp_I = \frac{Z_2 p_1 + Z_1 p_2}{Z_1 + Z_2}, \quad Z_k = \rho_k c_k

where ZkZ_k is the acoustic impedance. The stiffer phase carries the larger weight. Intuitively, when work crosses an interface, the harder side moves less and the softer side moves more in exactly that ratio. This single line is what enforces both energy conservation and the entropy inequality.

The relaxation step — a single equation in one unknown#

Numerically you do not march the μ→∞\mu \to \infty ODE directly. Instead you split the time step: solve the hyperbolic part first, then integrate only the relaxation source. During relaxation uu, ρE\rho E, and αkρk\alpha_k \rho_k stay frozen, and only the specific volumes vk=1/ρkv_k = 1/\rho_k evolve. Using the stiffened-gas EOS

pk=(γk−1)ρkek−γkp∞,kp_k = (\gamma_k - 1)\rho_k e_k - \gamma_k p_{\infty,k}

the integration closes in closed form,

vk(p)=vk0 p0+γkp∞,k+(γk−1)p^Ip+γkp∞,k+(γk−1)p^Iv_k(p) = v_k^0\,\frac{p^0 + \gamma_k p_{\infty,k} + (\gamma_k - 1)\hat{p}_I}{p + \gamma_k p_{\infty,k} + (\gamma_k - 1)\hat{p}_I}

and the saturation constraint ∑k(αρ)kvk(p)=1\sum_k (\alpha\rho)_k v_k(p) = 1 pins down a single relaxed pressure pp. One bisection sweep is enough. That is the heart of the algorithm.

Reinitialization — re-anchor on conserved energy#

The relaxed pp and αk\alpha_k are consistent with each phasic EOS, but they may drift from the conserved mixture energy because the non-conservative internal-energy equations accumulate small shock errors. Saurel applies one more touch-up. From the conserved mixture total energy, recompute the pressure through the mixture EOS

p(ρ,e,α1,α2)=ρe−(α1γ1p∞,1γ1−1+α2γ2p∞,2γ2−1)α1γ1−1+α2γ2−1p(\rho, e, \alpha_1, \alpha_2) = \frac{\rho e - \big(\frac{\alpha_1 \gamma_1 p_{\infty,1}}{\gamma_1 - 1} + \frac{\alpha_2 \gamma_2 p_{\infty,2}}{\gamma_2 - 1}\big)}{\frac{\alpha_1}{\gamma_1 - 1} + \frac{\alpha_2}{\gamma_2 - 1}}

and re-derive each phasic eke_k at that pressure. The model started non-conservative, but at shocks it now behaves like a conservative one. Cost: one extra EOS evaluation per cell.

Code — the moment two pressures meet inside one cell#

The relaxation step in roughly thirty lines of NumPy. Stiffened gas plus bisection on the saturation constraint.

import numpy as np
 
def stiffened_gas_volume(p, p0, v0, gamma, p_inf, p_hat_I):
    num = p0 + gamma * p_inf + (gamma - 1.0) * p_hat_I
    den = p   + gamma * p_inf + (gamma - 1.0) * p_hat_I
    return v0 * num / den
 
def saturation_residual(p, alpha_rho, p0, v0, gamma, p_inf, p_hat_I):
    total = 0.0
    for k in range(2):
        v_k = stiffened_gas_volume(p, p0[k], v0[k], gamma[k], p_inf[k], p_hat_I)
        total += alpha_rho[k] * v_k
    return total - 1.0
 
def stiff_pressure_relax(p0, v0, alpha_rho, gamma, p_inf, Z, tol=1e-9):
    p_hat_I = (Z[1] * p0[0] + Z[0] * p0[1]) / (Z[0] + Z[1])
    lo, hi = 1.0, 1.0e10
    for _ in range(80):
        mid = 0.5 * (lo + hi)
        r = saturation_residual(mid, alpha_rho, p0, v0, gamma, p_inf, p_hat_I)
        if r > 0:
            lo = mid       # pressure too low -> volumes sum above 1
        else:
            hi = mid
        if hi - lo < tol * mid:
            break
    return 0.5 * (lo + hi), p_hat_I
 
# Water (alpha=0.7) and air (alpha=0.3), two different starting pressures
gamma  = np.array([4.4, 1.4])
p_inf  = np.array([6.0e8, 0.0])
rho0   = np.array([1000.0, 1.0])
alpha0 = np.array([0.7, 0.3])
p0     = np.array([5.0e5, 1.0e5])
Z      = np.array([1500.0 * 1000.0, 340.0 * 1.0])
 
alpha_rho = alpha0 * rho0
v0        = 1.0 / rho0
 
p_eq, p_hat_I = stiff_pressure_relax(p0, v0, alpha_rho, gamma, p_inf, Z)
print(f"impedance mean ^pI = {p_hat_I:.3e} Pa")
print(f"relaxed pressure p = {p_eq:.3e} Pa")

Water's impedance (Z1=1.5×106Z_1 = 1.5\times 10^6) is about 4400 times air (Z2=340Z_2 = 340). The formula is p^I=(Z2p1+Z1p2)/(Z1+Z2)\hat{p}_I = (Z_2 p_1 + Z_1 p_2)/(Z_1 + Z_2). The large weight lands on the smaller pressure. Insert p1=5×105p_1 = 5\times 10^5 and p2=1×105p_2 = 1\times 10^5 and the numerator's Z1p2Z_1 p_2 is 1.5×10111.5\times 10^{11}, while Z2p1Z_2 p_1 stops at 1.7×1081.7\times 10^8. So p^I\hat{p}_I does not sit by the water pressure. It stands next to the air pressure 1×1051\times 10^5, near 1.001×1051.001\times 10^5 Pa. The stiff phase does not own the interface. The shared pressure after relaxation is a later search, the bisection on the saturation constraint.

Watch — the moment two pressures meet#

A single cell hides the dynamics. On a 1D grid with a simplified ODE, each cell has p1p_1 and p2p_2 converge exponentially toward the impedance mean p^I\hat{p}_I — faster as μ⋅Δt\mu \cdot \Delta t grows.

Stiff relaxation drives both p₁ and p₂ toward the impedance-weighted average p̂ᴵ = (Z₂p₁ + Z₁p₂)/(Z₁+Z₂). Increase μ·Δt for faster pull-in.

Increasing Z1Z_1 pulls p^I\hat{p}_I closer to the phase 1 pressure; the impedance ratio is the weighting law, no more. With μ⋅Δt\mu \cdot \Delta t near 1, equilibrium is reached in essentially one step — that is what stiff relaxation means. Saurel applies this procedure unconditionally at the end of every time step and recovers the stiff limit of the five-equation model.

Limits — the seven-equation shadow#

Six equations are not the universal answer. Velocity equilibrium is still an assumption. Porous media or granular explosives, where the two phases can move at very different speeds, demand the full seven-equation Baer–Nunziato system. Under very strong shocks the non-conservative internal-energy errors are non-negligible, and Petitpas's artificial heat exchange correction enters (paper Section 5). And μ→∞\mu \to \infty implies an infinitely fast interface response; once surface tension or mass transfer joins the picture, you need separate models for each.

Even so, six equations plus stiff relaxation is the most widely used foundation for compressible multiphase simulation today. AP-IMEX time integration and MUSCL-THINC-BVD reconstruction both run on this six-equation skeleton.

Leave the five-equation model in that cell?#

Hand a cell whose Wood speed has fallen to 24 m/s to the five-equation model and acoustic arrivals slip, shock positions wander. That cell steps back to six equations, carries two pressures, and glues them with the impedance mean only at the end of the step.

Once the velocities disagree, the compromise is over. Porous media and granular explosives go back to seven equations. Whether to close the interface with still fewer equations is a separate question, asked by four-equation equilibrium.

Share if you found it helpful.