Skip to content
cfd-lab:~/en/posts/2026-05-30-peluchon-acou…online
NOTE #059DAY SAT 논문리뷰DATE 2026.05.30READ 6 min readWORDS 1,025#논문리뷰#IMEX#Acoustic-Transport-Splitting#Five-Equation-Model#Low-Mach#Compressible-Multiphase

[Paper Review] Stop letting sound speed swallow your CFL — Peluchon (2017) acoustic-transport IMEX

Splitting acoustic from transport gives a 1/M time-step gain on the five-equation model

A graduate student running an atmospheric re-entry code sighed. At the liquid-gas interface the sound speed was 1500 m/s, the flow speed barely 5 m/s. The CFL bound was set entirely by the acoustic speed, so each step lasted microseconds. After eight hours of wall-clock time the simulation had not even cleared one second of physical time. Peluchon, Gallice and Mieussens (2017) aimed straight at that pain — split acoustics from transport in the five-equation model, make acoustics implicit, leave transport explicit.

Paper info#

  • Authors: S. Peluchon, G. Gallice, L. Mieussens
  • Affiliations: CEA-CESTA / Univ. Bordeaux / INRIA
  • Journal: Journal of Computational Physics, 339, 2017
  • DOI: 10.1016/j.jcp.2017.03.019
  • Title: A robust implicit-explicit acoustic-transport splitting scheme for two-phase flows

One line — scissors that cut the time step away from the sound speed#

The five-equation diffuse-interface model solves liquid and gas with the same conservation equations. But the liquid sound speed (1500 m/s) is more than four times the gas value (340 m/s). An explicit Godunov scheme is bound by Δt<Δx/(u+c)\Delta t < \Delta x / (|u| + c). In the liquid region uc|u| \ll c, so the step is essentially Δx/c\Delta x / c. At 1 mm grid that's 0.67 μs per step.

The paper's core idea is to pull that cc out of the time-step denominator. Treat only the acoustic step with backward Euler, leave transport explicit upwind. The outer CFL then scales with u/c|u|/c, i.e. with the Mach number — a 1/M speedup. At Mach 0.01 the theoretical acceleration is 100×.

The progenitor is Coquel–Godlewski–Khalfallah (2016), who applied this idea to single-phase gas dynamics. Peluchon lifts it to the Allaire–Clerc–Kokh (2002) five-equation multiphase system.

Splitting the five equations into acoustic and transport#

The 1D compressible five-equation system reads

tρ+x(ρu)=0\partial_t \rho + \partial_x (\rho u) = 0 t(ρy)+x(ρyu)=0\partial_t (\rho y) + \partial_x (\rho y u) = 0 t(ρu)+x(ρu2+p)=0\partial_t (\rho u) + \partial_x (\rho u^2 + p) = 0 t(ρe)+x((ρe+p)u)=0\partial_t (\rho e) + \partial_x ((\rho e + p) u) = 0 tz+uxz=0\partial_t z + u \partial_x z = 0

where zz is the volume fraction, y=ρ1z/ρy = \rho_1 z / \rho the mass fraction of phase 1, and e=ϵ+u2/2e = \epsilon + u^2/2 the specific total energy. Only the volume-fraction equation is non-conservative.

The paper splits each conservation-variable evolution into two parts. For any ϕ{ρ,ρy,ρu,ρe}\phi \in \{\rho, \rho y, \rho u, \rho e\},

tϕ+ϕxu+uxϕ=tϕ+x(ϕu)\partial_t \phi + \phi \partial_x u + u \partial_x \phi = \partial_t \phi + \partial_x (\phi u)

The first two terms on the left form the acoustic part (compression/expansion through ϕxu\phi \partial_x u); the third is the transport part (advection uxϕu \partial_x \phi). The pressure-gradient term xp\partial_x p, which carries the sound speed, joins the acoustic part of momentum and energy.

Acoustic system (propagation speeds 0,±c0, \pm c):

tρ+ρxu=0,t(ρu)+ρuxu+xp=0\partial_t \rho + \rho \partial_x u = 0, \quad \partial_t (\rho u) + \rho u \partial_x u + \partial_x p = 0

Transport system (propagation speed uu only):

tρ+uxρ=0,t(ρu)+ux(ρu)=0\partial_t \rho + u \partial_x \rho = 0, \quad \partial_t (\rho u) + u \partial_x (\rho u) = 0

Solve the acoustic system with backward Euler and the ±c\pm c inside drops out of the time-step constraint. Transport is explicit upwind: the only CFL bound is uΔt/Δx<1|u| \Delta t / \Delta x < 1.

Riemann-solver positivity condition#

One detail matters. The acoustic system has a non-conservative form tV+ϑxG(V)=0\partial_t V + \vartheta \partial_x G(V) = 0 with ϑ=1/ρ\vartheta = 1/\rho. A simple Riemann solver is needed for a Godunov-type scheme. The paper uses two distinct slopes aˉ,aˉ+\bar{a}_-,\,\bar{a}_+ on the left and right (extending Gallice's 2003 solver). If the slopes are large enough, both the intermediate specific volume and pressure stay positive.

The condition reduces to two inequalities (Appendix B):

aˉ2ρlcl2ρl(prpl)/\bar{a}_-^2 \ge \rho_l c_l^2 - \rho_l (p_r - p_l) / \cdots

In practice you take aˉ±=Kmax(ρlcl,ρrcr)\bar{a}_\pm = K \max(\rho_l c_l, \rho_r c_r) and crank KK up until positivity holds. Drag the slope sliders below — the red region (where some intermediate state goes negative) shrinks as KK grows.

Sod-like reference: ρ_L=1, p_L=1, ρ_R=0.125, p_R=0.1. Increase ā₋, ā₊ until the entire (Δu, Δp) square turns cyan — that's Peluchon's positivity-preserving slope choice.

To make this solver implicit, just shift the time index from nn to n+1n+1-. The resulting nonlinear system is solved with a Picard iteration.

Direct implementation — linear acoustic-transport#

Before porting the full algorithm, the key acceleration effect can be reproduced on a linear acoustic-transport system.

tρ+ρ0xu+u0xρ=0,tu+c2ρ0xρ+u0xu=0\partial_t \rho + \rho_0 \partial_x u + u_0 \partial_x \rho = 0, \quad \partial_t u + \frac{c^2}{\rho_0} \partial_x \rho + u_0 \partial_x u = 0

Eigenvalues are u0c,u0,u0+cu_0 - c,\,u_0,\,u_0 + c. Unsplit explicit Rusanov needs ΔtΔx/(u0+c)\Delta t \le \Delta x / (|u_0| + c). The split version handles acoustic (±c) implicitly and transport (u0u_0) explicitly.

import numpy as np
 
def step_unsplit_rusanov(rho, u, rho0, c, u0, dx, dt):
    """Full-system Rusanov — requires CFL based on |u0|+c"""
    lam = abs(u0) + c
    F_rho = 0.5 * (rho0 * (u[:-1] + u[1:]) + u0 * (rho[:-1] + rho[1:])) \
            - 0.5 * lam * (rho[1:] - rho[:-1])
    F_u   = 0.5 * ((c*c/rho0) * (rho[:-1] + rho[1:]) + u0 * (u[:-1] + u[1:])) \
            - 0.5 * lam * (u[1:] - u[:-1])
    rho[1:-1] -= dt/dx * (F_rho[1:] - F_rho[:-1])
    u[1:-1]   -= dt/dx * (F_u[1:]   - F_u[:-1])
    return rho, u
 
def step_imex_split(rho, u, rho0, c, u0, dx, dt_outer):
    """Acoustic (implicit) + transport (explicit) — outer CFL sees only |u0|"""
    # Sub-cycling mimics the result of backward Euler in one big step
    n_sub = max(1, int(np.ceil(c * dt_outer / dx)))
    dt_a = dt_outer / n_sub
    for _ in range(n_sub):
        F_rho = 0.5 * rho0 * (u[:-1] + u[1:]) - 0.5 * c * (rho[1:] - rho[:-1])
        F_u   = 0.5 * (c*c/rho0) * (rho[:-1] + rho[1:]) - 0.5 * c * (u[1:] - u[:-1])
        rho[1:-1] -= dt_a/dx * (F_rho[1:] - F_rho[:-1])
        u[1:-1]   -= dt_a/dx * (F_u[1:]   - F_u[:-1])
    # Transport upwind (assume u0 > 0)
    a = u0 * dt_outer / dx
    rho[1:-1] -= a * (rho[1:-1] - rho[:-2])
    u[1:-1]   -= a * (u[1:-1]   - u[:-2])
    return rho, u

Run both at the same outer Δt=0.5Δx/u0\Delta t = 0.5 \Delta x / |u_0| with M=u0/c=0.05M = u_0/c = 0.05. The unsplit scheme blows up on step one. The split scheme stays stable. To reach the same physical time, the unsplit scheme has to take 1/M=201/M = 20 times more steps.

Watching the blow-up live#

Try the controls below. Pick Explicit unsplit and push the CFL above 1.2 — the cyan curve explodes and the red warning fires. Toggle to IMEX at the same outer CFL and it stays calm. Lower the Mach number to 0.05 and the IMEX gain widens to 20×.

IMEX time-step gain ≈ 1 + 1/M = 11.0×STATUS: stable

What to watch for:

  • explicit: CFL near 1.0 is a tightrope; even 1.05 grows spurious oscillations.
  • split: outer CFL up to 4 still propagates the acoustic information cleanly through the sub-cycle.
  • as M shrinks, the time-step ratio between the two schemes opens proportionally.

Criticism — costs the paper plays down#

The speedup is not free.

  1. Cost of the implicit acoustic solve: backward Euler is nonlinear, so it needs Newton or Picard. A 1D tridiagonal Thomas solve is cheap; in 2D structured grids you either go ADI or face a sparse solve. The paper recommends an ADI-style variant (IM3) for that reason.
  2. First-order splitting error: the splitting is only first order in time. The authors defer the second-order extension to a future paper. In the 2D liquid-gas interaction test the interface noticeably smears.
  3. Acoustic damping: the implicit acoustic step is dissipative, so acoustic waves are damped. Combined with the wrong outflow BC this can suppress real acoustics; pairing with NSCBC (last week's post) is recommended.
  4. Positivity-slope cost: enlarging aˉ±\bar{a}_\pm for positivity also makes the Riemann solver more dissipative. The low-Mach correction (Appendix D) becomes essential to recover accuracy.

OpenFOAM's compressibleInterFoam achieves similar acoustic-implicit behavior through PIMPLE iterations, but without characteristic-level splitting. That is precisely why Peluchon's approach is more robust under large CFL.

Reproducibility score#

  • Paper body: Algorithms 1 and 2 are full pseudocode → ★★★★☆
  • Missing derivations: Appendix B positivity inequalities are tight; re-derive yourself → ★★★☆☆
  • Code release: none, you implement it. 1D takes ~200 lines, 2D ADI ~600 → ★★★☆☆
  • Validation cases: shock tube, droplet convection, liquid-gas interaction, low-Mach acoustic pulse — all practical → ★★★★★

If you've been waiting for a Saturday afternoon to start touching the five-equation model with an implicit hammer, this is the most honest starting point. One pair of scissors keeps the sound speed out of your time step.

Next papers to read#

  • Coquel–Godlewski–Khalfallah (2016) — original acoustic-transport split for single-phase
  • Boscheri–Dumbser (2021) — IMEX extension to all-Mach Navier–Stokes
  • Bharate (2025) — same idea applied to the 6-equation Baer–Nunziato model

Share if you found it helpful.