Skip to content
cfd-lab:~/en/posts/2026-06-27-baer-nunziato…● online

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

NOTE #085DAY SAT 논문리뷰DATE 2026.06.27UPDATED 2026.10.19READ 6 min read#CFD#Multiphase#Baer-Nunziato#Diffuse-Interface#Relaxation

Giving Each Phase Its Own Equations — The Baer–Nunziato Seven-Equation Model

Multiply the posted mu by the posted time step and the first move in volume fraction is about 0.00126.

In 1986 Baer and Nunziato wanted the moment a flame in a solid propellant turns into a detonation. The powder was a pile of fine grains. Hot gas seeped through the gaps and burned them. At one point, solid and gas sat at different pressures and different speeds. A mixture model with one pressure and one velocity could not hold that instant. So each phase got its own conservation laws.

Setting the relaxation rates μ and λ to zero keeps the two pressure curves from meeting, and raising them pulls both curves into one point.

종료 시 압력차 0.000 bar · 속도차 0.000 m/s

μ·λ를 0으로 내리면 두 상은 영영 평형에 도달하지 못한다 — 이것이 7-방정식의 “비평형” 상태다.

Watch whether pressure and velocity lock on separately. Raise only one slider and check that the other curve stays put.

Seven Equations Born from Powder Grains#

Diffuse-interface models, which give the boundary between two phases a finite thickness, come in branches. The simplest four-equation model assumes equal pressure, velocity, and temperature. Baer–Nunziato stands at the other end. No equilibrium is assumed. Each phase keeps its own density, velocity, and pressure. One more equation transports the volume fraction α\alpha, the share of volume one phase occupies.

That generality protects hyperbolicity. Allowing non-equilibrium makes the model unconditionally hyperbolic. A six-equation model that forces a single pressure can lose hyperbolicity and produce a negative square of sound speed. BN avoids that trap. The price is seven equations, plus terms that will not fit the standard conservation form.

Unfolding the Seven Equations#

Write the phases as k=1,2k=1,2. Volume fraction comes first.

∂α1∂t+uI∂α1∂x=μ (p1−p2)\frac{\partial \alpha_1}{\partial t} + u_I \frac{\partial \alpha_1}{\partial x} = \mu\,(p_1 - p_2)

The left side carries volume fraction at the interface velocity uIu_I. The right side is pressure relaxation. Larger μ\mu means faster equilibrium. The other six equations are mass, momentum, and energy in each phase.

∂(αkρk)∂t+∂(αkρkuk)∂x=0\frac{\partial (\alpha_k \rho_k)}{\partial t} + \frac{\partial (\alpha_k \rho_k u_k)}{\partial x} = 0 ∂(αkρkuk)∂t+∂(αkρkuk2+αkpk)∂x=pI∂αk∂x+λ (uk∗−uk)\frac{\partial (\alpha_k \rho_k u_k)}{\partial t} + \frac{\partial (\alpha_k \rho_k u_k^2 + \alpha_k p_k)}{\partial x} = p_I \frac{\partial \alpha_k}{\partial x} + \lambda\,(u_{k^*} - u_k) ∂(αkEk)∂t+∂(αk(Ek+pk) uk)∂x=pIuI∂αk∂x+λuI(uk∗−uk)\frac{\partial (\alpha_k E_k)}{\partial t} + \frac{\partial \big(\alpha_k (E_k + p_k)\,u_k\big)}{\partial x} = p_I u_I \frac{\partial \alpha_k}{\partial x} + \lambda u_I (u_{k^*} - u_k)

ρk\rho_k is the phasic density, uku_k the phasic velocity, pkp_k the phasic pressure. Ek=ρkek+12ρkuk2E_k=\rho_k e_k+\tfrac12\rho_k u_k^2 is the phasic total-energy density. k∗k^* is the other phase. λ\lambda is the velocity-relaxation rate. Each phase closes with its own equation of state. Often that is a stiffened gas.

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

γk\gamma_k is the ratio of specific heats. p∞,kp_{\infty,k} is a pressure constant for repulsion between molecules. A liquid that barely compresses, like water, has p∞p_\infty of several GPa.

Non-Conservative Terms and Interface Variables — The Truly Hard Part#

The momentum and energy equations carry ∂αk/∂x\partial\alpha_k/\partial x on the right. That term will not fold into a divergence. It cannot be written as ∂tU+∂xF(U)=0\partial_t U+\partial_x F(U)=0. Godunov-type finite volume stumbles in front of such a non-conservative term. When α\alpha jumps across a discontinuity, it is unclear which value to multiply. A bad discretization throws fake oscillations across the interface even when pressure and velocity start uniform.

The test is Abgrall's criterion. If pressure and velocity start uniform, they must stay uniform no matter how volume fraction is laid out. Two phases streaming at one pressure and one velocity should only transport the interface, not make a new wave. The record of a 21 percent pressure spike on a flow that should have stayed uniform is what happens when the non-conservative term is multiplied wrong.

The interface values uIu_I and pIp_I are modeling choices. The usual Saurel–Abgrall pick is a mass-weighted velocity and a volume-weighted pressure.

uI=α1ρ1u1+α2ρ2u2α1ρ1+α2ρ2,pI=α1p1+α2p2u_I = \frac{\alpha_1 \rho_1 u_1 + \alpha_2 \rho_2 u_2}{\alpha_1 \rho_1 + \alpha_2 \rho_2}, \qquad p_I = \alpha_1 p_1 + \alpha_2 p_2

That choice makes the model symmetric. Every cell can use the same equations and the same numerics.

Relaxation: The Road to Equilibrium#

The sources μ(p1−p2)\mu(p_1-p_2) and λ(uk∗−uk)\lambda(u_{k^*}-u_k) are the relaxation operators. Large μ\mu and λ\lambda drag the phases to one pressure and one velocity almost at once. Sending the rates to infinity is the simpler equilibrium model.

On the figure above, a rate of zero means the two curves never meet. That is the non-equilibrium the seven equations allow. Larger μ\mu pulls the pressure curves into one point more steeply. Pressure and velocity relax apart from each other.

The Hierarchy: 7 → 6 → 5 → 4#

Assume relaxation is instantaneous, force equilibrium, and one equation disappears into an algebraic constraint. Tie the velocities and the model has six equations. Tie the pressures as well and it is Kapila's five-equation model. Tie the temperatures and it is four equations. BN sits at the top of that hierarchy.

The five-equation model is the one most used for interface capturing. Its mixture sound speed is non-monotone in volume fraction, the Wood curve, so the volume-fraction source is stiff. BN peels that stiffness off into a relaxation source. Numerically it is the more flexible of the two.

Python — Integrating the Pressure Relaxation Operator#

Strip relaxation down to the bone. Partial masses and internal energies of both phases stay fixed. Only the volume fraction α\alpha moves, by dα/dt=μ(p1−p2)d\alpha/dt=\mu(p_1-p_2). Integrate how a stiffened-gas pressure reaches equilibrium as α\alpha changes.

import numpy as np
 
# Pressure-relaxation operator for two stiffened-gas phases.
# Each phase's partial mass m_k and internal energy E_k are conserved;
# only the volume fraction alpha evolves by  da/dt = mu (p1 - p2).
 
def phase_pressures(alpha, mass, energy, gamma, p_inf):
    frac = np.array([alpha, 1.0 - alpha])
    rho  = mass / frac          # phasic density = partial mass / volume fraction
    e    = energy / mass        # specific internal energy
    return (gamma - 1.0) * rho * e - gamma * p_inf
 
def relax_pressure(alpha0, mass, energy, gamma, p_inf,
                   mu=4.0e-8, dt=1.0e-3, nmax=200000, tol=1.0):
    alpha, hist = alpha0, []
    for n in range(nmax):
        p = phase_pressures(alpha, mass, energy, gamma, p_inf)
        hist.append((n * dt, alpha, p[0], p[1]))
        gap = p[0] - p[1]
        if abs(gap) < tol:                       # stop once the gap vanishes
            break
        alpha += dt * mu * gap                    # da/dt = mu (p1 - p2)
        alpha = min(max(alpha, 1e-4), 1.0 - 1e-4)
    return alpha, np.array(hist)
 
# Water-like phase (1, stiffened gas) + air-like phase (2)
gamma  = np.array([4.4, 1.4])
p_inf  = np.array([6.0e8, 0.0])      # Pa
mass   = np.array([480.0, 0.55])     # partial mass  (kg/m^3)
energy = np.array([3.93e8, 1.10e6])  # partial internal energy (J/m^3)
 
alpha_eq, hist = relax_pressure(0.50, mass, energy, gamma, p_inf)
p0  = phase_pressures(0.50, mass, energy, gamma, p_inf)
peq = phase_pressures(alpha_eq, mass, energy, gamma, p_inf)
print(f"initial: alpha=0.500  p1={p0[0]/1e5:8.3f} bar  p2={p0[1]/1e5:7.3f} bar")
print(f"equil.:  alpha={alpha_eq:.3f}  p1={peq[0]/1e5:7.3f} bar  p2={peq[1]/1e5:7.3f} bar")
print(f"{len(hist)} steps,  final pressure gap {abs(peq[0]-peq[1]):.3e} Pa")

The run prints this.

initial: alpha=0.500  p1= 324.000 bar  p2=  8.800 bar
equil.:  alpha=0.506  p1=  8.906 bar  p2=  8.906 bar
75 steps,  final pressure gap 9.012e-01 Pa
→
→
→

Baer–Nunziato (full)

없음 — 압력·속도·온도 모두 독립

미지수: α, (ρ, u, p)₁, (ρ, u, p)₂

장점
가장 일반적. 무조건 쌍곡형(hyperbolic). 상마다 독립 EOS.
대가
비보존 항 + 두 속도장. 계면 변수 PI·uI 모델링이 까다롭다.

평형을 하나씩 더 부과할수록 방정식은 줄지만 — 일반성도 함께 줄어든다.

Pressing a model shows which equilibrium was forced and where the sound-speed curve bends out of monotone. The stiff volume-fraction source shows up the moment the hierarchy drops to five equations.

The printed 324 bar is two huge terms canceling. At α=0.5\alpha=0.5 liquid density is 960. Specific internal energy is 3.93×108/480=8.1875×1053.93\times10^{8}/480=8.1875\times10^{5}. Then (γ−1)ρe(\gamma-1)\rho e is 2.6724×1092.6724\times10^{9} Pa and γp∞\gamma p_\infty is 2.64×1092.64\times10^{9} Pa. The gap is 3.24×1073.24\times10^{7} Pa, 324 bar, the leftover 1.2 percent.

At α=0.5\alpha=0.5 liquid pressure changes by about −5.34×109-5.34\times10^{9} Pa per unit α\alpha. A shift of 0.001 is about 53 bar. The printed move is 0.500 to 0.506. Gas pressure 4.4×105/(1−α)4.4\times10^{5}/(1-\alpha) is 8.8 bar at 0.5 and about 8.9 bar near 0.506. Equilibrium is the liquid dropping to the gas.

The first step uses μ=4×10−8\mu=4\times10^{-8}, time step 10−310^{-3}, and gap 3.152×1073.152\times10^{7} Pa. The product is about 1.26×10−31.26\times10^{-3}, near a fifth of the printed 0.006. The 75 steps are the shrinking tail. The 1 Pa tolerance matters only at the end.

Volume fraction moved only 0.6 percent, from 0.500 to 0.506, while liquid pressure fell from 324 bar to 8.9 bar. Water modeled as a stiffened gas barely compresses, so a tiny volume change makes a huge pressure change. Equilibrium sits near the gas pressure for the same reason. The stiff liquid can match pressure without expanding much.

The first relaxation step that already spends 0.001 in volume fraction#

The first step already moves volume fraction by 1.26×10−31.26\times10^{-3}. Liquid pressure drops by tens of bar on that move alone. The interfacial pressure in the non-conservative term multiplies this collapse by the interface gradient. Put relaxation and the flux in the same stage, and the size of a fake wave is set on this first step.

Where does that product go if advection and pressure are split cleanly apart in the flux? The TV split that separates advection from pressure in the Baer–Nunziato flux still leaves open whether the split covers the non-conservative term. When 324 bar collapses in one step, does the separated pressure flux leave the interface quiet?

Share if you found it helpful.