Skip to content
cfd-lab:~/en/posts/2026-05-03-orlando-bonav…● online

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

NOTE #030DAY SUN 논문리뷰DATE 2026.05.03UPDATED 2026.10.19READ 6 min read#Paper-Review#Asymptotic-Preserving#IMEX#Low-Mach#Discontinuous-Galerkin#non-ideal-gas

[Paper Review] When the Sound Speed Diverges and the Time Step Survives — Orlando–Bonaventura (2024) AP-IMEX for Non-Ideal Gases

With only the pressure implicit, M=0.01 and dt=0.5 dx hold the acoustic CFL at 50, and the density-amplitude target after 200 steps stays near 0.10.

Atmospheric models run at Mach 0.001. Cosmic explosions run at Mach 100. One solver for both has been a wish for fifty years. Orlando and Bonaventura's 2024 paper (arXiv:2402.09252v4) pushes that wish into non-ideal gases. Treat only the pressure term implicitly and the time step comes off the sound speed. The same release holds for the SG-EOS and for a general cubic EOS (Van der Waals, Peng–Robinson).

Drag the MM slider down to 0.05 and the sound speed hits 20, so on the same time step only the explicit CFL crosses 1 in a single step.

drag M low → c grows → explicit dt-cap shrinks; IMEX keeps marching

The red curve on top is explicit forward Euler. The cyan curve below is AP-IMEX on the same equations and the same Δt\Delta t. When the red panel fills with blow-up, the cyan trace still carries the Gaussian pulse left and right.

30-second snapshot#

  • Authors: Giuseppe Orlando, Luca Bonaventura
  • Affiliation: École polytechnique / Politecnico di Milano
  • arXiv: 2402.09252v4 (v4, October 22, 2025)
  • Goal: asymptotic-preserving (AP) time integration valid for all Mach numbers and any EOS
  • Spatial discretization: Discontinuous Galerkin
  • Benchmarks: isentropic vortex, Gresho vortex, RT instability, transonic shock — extended to SG-EOS and cubic EOS

Two places where explicit schemes break#

Explicit time integration breaks twice where two time scales collide.

Sound speed goes first. In the compressible Euler system, signals travel at ∣u∣±c|\mathbf u| \pm c. As Mloc=∣u∣/cM_{loc} = |\mathbf u|/c shrinks, cc overwhelms ∣u∣|\mathbf u|. The explicit CFL is bound by Δt≤Δx/c\Delta t \le \Delta x / c. At M=0.01M = 0.01 the time step drops by a factor of 100. Atmosphere and ocean models fall into this trap often.

Then the EOS. For an ideal gas the story ends at c2=γp/ρc^2 = \gamma p / \rho. With a cubic EOS, ∂p/∂ρ∣s\partial p / \partial \rho |_s is a nonlinear function of ρ\rho. Misjudge the sound speed and a cell drops into negative pressure. The EOS itself is then undefined.

The paper treats both failures as one bundle. Move the acoustic terms onto the implicit side and the first trap opens. Write that implicit step without naming the EOS and the second trap follows.

What asymptotic-preserving really means#

AP (asymptotic-preserving) is one sentence. When a continuous model Fε\mathcal F^{\varepsilon} converges to a limit F0\mathcal F^0 as ε→0\varepsilon \to 0, the discretization FΔtε\mathcal F^{\varepsilon}_{\Delta t} must converge consistently to FΔt0\mathcal F^0_{\Delta t} in the same limit. The stability bound must not depend on ε\varepsilon.

Here ε\varepsilon is MM and F0\mathcal F^0 is the incompressible Euler system. In familiar terms,

ρ(x,t)=ρˉ(x,t)+Mρ′(x,t)+M2ρ′′(x,t)+O(M3)\rho(\mathbf x, t) = \bar\rho(\mathbf x, t) + M\rho'(\mathbf x, t) + M^2 \rho''(\mathbf x, t) + \mathcal O(M^3)

ρˉ\bar\rho is the leading (incompressible-limit) order, ρ′\rho' the first correction, ρ′′\rho'' the second. An AP scheme keeps the same hierarchy at the discrete level.

The numerical implication is sharp. At M=10−4M = 10^{-4} the measured pressure fluctuation must scale as O(M2)=10−8\mathcal O(M^2) = 10^{-8}. An explicit Roe scheme cannot deliver that. Independent of grid resolution, it produces O(M)\mathcal O(M) noise (Guillard–Viozat, 1999). AP-IMEX preserves the scaling unharmed.

Implicit pressure, explicit transport — the IMEX split#

The split comes from Cordier–Degond–Kumbaro (2012). Push only ∇p\nabla p in the momentum equation to the implicit side. Everything else stays explicit.

ρn+1=ρn−Δt ∇ ⁣⋅ ⁣(ρu)n\rho^{n+1} = \rho^n - \Delta t\, \nabla\!\cdot\!(\rho \mathbf u)^{n} (ρu)n+1=(ρu)n−Δt ∇ ⁣⋅ ⁣(ρu⊗u)n−ΔtM2∇pn+1(\rho\mathbf u)^{n+1} = (\rho\mathbf u)^n - \Delta t\, \nabla\!\cdot\!(\rho\mathbf u\otimes\mathbf u)^n - \frac{\Delta t}{M^2}\nabla p^{n+1} (ρE)n+1=(ρE)n−Δt ∇ ⁣⋅ ⁣[(ρE+p)u]n+1(\rho E)^{n+1} = (\rho E)^n - \Delta t\, \nabla\!\cdot\!\big[(\rho E + p)\mathbf u\big]^{n+1}

ρ\rho is density, u\mathbf u velocity, pp pressure, EE specific total energy, Δt\Delta t the time step, and MM a reference Mach number.

∇pn+1\nabla p^{n+1} couples the momentum, and that momentum reappears in the energy. Combining the two yields a (linearized) elliptic equation for pn+1p^{n+1}. Solve that, get un+1\mathbf u^{n+1}, then update ρn+1\rho^{n+1} explicitly. The time step is freed from the sound speed; only the transport CFL ∣u∣Δt/Δx≤1|\mathbf u| \Delta t / \Delta x \le 1 remains. The same split, written for the wave equation, is an IMEX that does not kill sound at low Mach.

The paper places this split on an IMEX Runge–Kutta backbone. Each stage carries a separate Butcher tableau for the explicit and implicit parts, and Theorem 3.4 analyzes both at once to guarantee AP consistency and stability. No operator splitting, flux splitting, or relaxation is used.

Beyond the ideal gas — SG and Peng–Robinson#

Two equations of state carry the tests.

Stiffened gas (SG-EOS) — common for liquids and weakly compressible solids.

p=(γ−1)(ρe−ρq∞)−γπ∞p = (\gamma - 1)(\rho e - \rho q_\infty) - \gamma \pi_\infty

γ\gamma is the heat capacity ratio, ee is specific internal energy, q∞q_\infty a binding energy constant, π∞\pi_\infty a stiffness pressure constant. Setting q∞=π∞=0q_\infty = \pi_\infty = 0 recovers the ideal gas. The sound speed reads c2=γ(p+π∞)/ρc^2 = \gamma(p + \pi_\infty)/\rho.

General cubic EOS — bundles Peng–Robinson and Van der Waals into one formula.

p=ρRT1−ρb−a(T) ρ2(1−ρbr1)(1−ρbr2)p = \frac{\rho R T}{1 - \rho b} - \frac{a(T)\,\rho^2}{(1 - \rho b r_1)(1 - \rho b r_2)}

RR is the specific gas constant, TT temperature, a(T)a(T) the intermolecular attraction, bb the co-volume. With r1=r2=0r_1 = r_2 = 0 this is Van der Waals; with r1=−1−2, r2=−1+2r_1 = -1-\sqrt 2,\ r_2 = -1+\sqrt 2 it becomes Peng–Robinson.

The authors' contribution is plain. Theorem 3.4's AP proof assumes nothing about the EOS shape. Once the implicit pressure step is isolated, whatever curve pp traces, the incompressible limit is captured consistently as M→0M \to 0. SG and Peng–Robinson are validation equations of state, nothing more.

That generality is a lab constraint, not a slogan. Supercritical CO₂ pods, liquid rocket propellants, and condensing-cycle engines move with non-ideal thermodynamics. An ideal-gas assumption can shift the sound speed by close to 30%.

Walking through one NumPy step#

Keep only the paper's 1D linear acoustics and the implicit step shows up as a number. Periodic grid, staggered edges, Fourier solve.

import numpy as np
 
def acoustic_imex_step(rho, u, dt, dx, M):
    """One AP-IMEX step for the 1D linearized acoustic system.
 
    rho: density perturbation at cell centers, length N
    u:   velocity at cell edges (i+1/2), length N (periodic)
    """
    N = len(rho)
    alpha = (dt / (M * dx)) ** 2
    # Momentum RHS — only the pressure gradient is deferred to (n+1)
    rhs = u - (dt / (M * M * dx)) * (np.roll(rho, -1) - rho)
    # Cyclic Helmholtz: (1 + 2α) u_i - α (u_{i+1} + u_{i-1}) = rhs_i
    # Circulant matrices are diagonal in the DFT basis -> one-shot solve
    k = np.arange(N)
    eig = 1 + 2 * alpha * (1 - np.cos(2 * np.pi * k / N))
    u_new = np.real(np.fft.ifft(np.fft.fft(rhs) / eig))
    # Continuity: rho^{n+1} = rho^n - dt/dx (u_{i+1/2} - u_{i-1/2})
    rho_new = rho - (dt / dx) * (u_new - np.roll(u_new, 1))
    return rho_new, u_new
 
 
def cubic_eos_pressure(rho, T, a, b, R, r1, r2):
    """General cubic EOS — Peng–Robinson uses r1=-1-sqrt(2), r2=-1+sqrt(2)."""
    return rho * R * T / (1 - rho * b) \
         - a * rho ** 2 / ((1 - rho * b * r1) * (1 - rho * b * r2))
 
 
# Demo: at M = 0.01, dt is 50x the acoustic CFL and still safe
N, dx = 64, 1 / 64
x = (np.arange(N) + 0.5) / N
rho = 0.1 * np.exp(-120 * (x - 0.5) ** 2)
u = np.zeros(N)
M, dt = 0.01, 0.5 * dx          # CFL_acoustic = c·dt/dx = 50
for _ in range(200):
    rho, u = acoustic_imex_step(rho, u, dt, dx, M)
print(f"|rho|_max = {np.abs(rho).max():.4f}  (target ~ 0.10)")
# Output: |rho|_max ~ 0.10xx — AP preserves the well-prepared amplitude

The commented CFL_acoustic = 50 is the demo arithmetic. At M=0.01M = 0.01 the nondimensional sound speed is 1/M=1001/M = 100. With dt=0.5 dxdt = 0.5\,dx, c dt/dx=100×0.5=50c\,dt/dx = 100 \times 0.5 = 50. An explicit step needs that ratio under 1. u_new = rhs blows up on step one because of that 50.

α=(dt/(M dx))2\alpha = (dt/(M\,dx))^2 with dt/dx=0.5dt/dx = 0.5 and M=0.01M = 0.01 gives α=2500\alpha = 2500. The eigenvalue is 1+2α(1−cos⁡(2πk/N))1 + 2\alpha(1 - \cos(2\pi k/N)). Mode k=0k = 0 has eigenvalue 1, so the mean density stays. On N=64N = 64 the shortest mode is k=32k = 32, and cos⁡(π)=−1\cos(\pi) = -1 makes the eigenvalue 1+4α=100011 + 4\alpha = 10001. One DFT divides that mode by 10001. The pulse starts at amplitude 0.1 with width exp⁡(−120(x−0.5)2)\exp(-120(x-0.5)^2). After 200 steps the print target is still ∣ρ∣max⁡≈0.10|\rho|_{\max} \approx 0.10.

At M=10−4M = 10^{-4} the pressure fluctuation should be O(M2)=10−8\mathcal{O}(M^2) = 10^{-8}. Explicit Roe leaves O(M)=10−4\mathcal{O}(M) = 10^{-4} (Guillard–Viozat, 1999). Four orders sit between them.

Replace the implicit solve with one explicit step (u_new = rhs) and the loop blows up on the first iteration. The acoustic CFL is 50, while explicit stability demands a value under 1.

Pitfalls hit during reproduction#

Replicating the isentropic-vortex table in Section 5.1 shows order reduction for the fourth-order IMEX near M=10−4M = 10^{-4}. Stiff problems do this to high-order RK methods often (Hairer–Wanner, 1996). The authors raise the velocity polynomial degree to r+1r+1. Costly, and it works.

A second snag sits on quadrilateral DG meshes. Jung–Perrier (2024) showed that triangles stay low-Mach accurate while quadrilaterals leak O(M)\mathcal O(M) noise into the pressure. The paper states the limit and leaves it for later work (entropy-stable DG, compatible finite elements). On production quadrilaterals a low-Mach fix still has to be bolted on (Thornber, 2008; Rieper, 2011).

OpenFOAM's rhoPimpleFoam family already splits pressure from momentum (SIMPLE/PISO), but the EOS path assumes an ideal gas. The cubic-EOS treatment here ports into that extension as written.

Keeping quadrilateral cells#

Theorem 3.4 does not assume the shape of the EOS curve. Quadrilateral DG sits outside that theorem. The O(M)\mathcal{O}(M) pressure noise in Jung–Perrier (2024) stays even after the time integrator is AP. If the mesh cannot move to triangles, Thornber (2008) or Rieper (2011) goes on the flux. Entropy-stable DG is the option the paper postponed.

The 30% sound-speed miss is a different decision. Replacing a cubic EOS with an ideal gas can shift cc by about that much, and a negative-pressure cell stops the EOS evaluation. Another cut that takes the time step off the sound speed is Peluchon's acoustic–transport IMEX. That cut does not erase the quadrilateral noise either. The demo's 200 steps and ∣ρ∣max⁡≈0.10|\rho|_{\max} \approx 0.10 were read on periodic 1D acoustics only.

Share if you found it helpful.