Skip to content
cfd-lab:~/en/posts/2026-06-14-acoustic-inte…● online

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

NOTE #072DAY SUN 논문리뷰DATE 2026.06.14UPDATED 2026.10.19READ 6 min read#Aeroacoustics#Diffuse-Interface#Weak-Compressibility#Multiphase#Paper-Review

Why a Shout Above Water Never Reaches Below — Acoustics Across a Diffuse Interface

A pressure transmission above 1 does not add energy. The 99.9% reflection sits near the square of the impedance ratio.

Call a friend from the edge of a pool and the swimmer underwater barely hears it. Roughly 99.9% of airborne sound bounces off the surface. The same split drives ocean acoustics, medical ultrasound, and underwater noise. Following Ballout et al. (2025), these notes redo reflection, transmission, and refraction with a 1D acoustic solver.

Raise the speed and density ratios and z2/z1z_2/z_1 opens up. The reflected pulse at the center interface grows, and the transmitted pulse shrinks.

z1 = 1.00z2 = 4.50R = 0.636T = 1.636

Match the two impedances 1:1 and the pulse crosses. The reflection vanishes. An air–water jump leaves only the reflected pulse on the left.

Abbas Ballout et al., "Acoustic Propagation/Refraction Through Diffuse Interface Models", arXiv:2504.01727 (2025). They adjust the weak-compressibility term of an incompressible Navier–Stokes/Cahn–Hilliard system so two phases carry different sound speeds, and the wave rides those speeds.

Acoustic Impedance — How a Medium Resists Sound#

The resistance a medium offers to a passing sound wave is its acoustic impedance (density times sound speed).

z=ρ csz = \rho\, c_s

Here ρ\rho is density and csc_s is the sound speed. Air gives zair=1.2×343≈410z_\text{air} = 1.2 \times 343 \approx 410; water gives zwater=1000×1481≈1.5×106z_\text{water} = 1000 \times 1481 \approx 1.5\times10^6. A factor of 3600 apart.

Impedance measures how readily sound loads into a medium. When two impedances are close, the wave crosses smoothly. When they differ wildly, most of it bounces back. That jump at the water surface is why the shout reflects.

Put the rounded values back into R=(z2−z1)/(z1+z2)R=(z_2-z_1)/(z_1+z_2). With z1≈410z_1\approx 410 and z2≈1.5×106z_2\approx 1.5\times 10^6 the ratio is about 3600, RR sits on 0.999, and the square is the 99.9% above. T=2z2/(z1+z2)T=2z_2/(z_1+z_2) sits just under 2.

Reflection and Transmission — Decided by the Impedance Jump#

For a plane wave at normal incidence, the reflection coefficient RR and transmission coefficient TT depend only on impedance (paper eq. 37).

R=z2−z1z1+z2,T=2z2z1+z2R = \frac{z_2 - z_1}{z_1 + z_2}, \qquad T = \frac{2 z_2}{z_1 + z_2}

z1z_1 and z2z_2 are the incident-side and transmitted-side impedances. For air-to-water, z2≫z1z_2 \gg z_1, so R→1R \to 1: almost total reflection. The pressure transmission coefficient TT can exceed 1. A larger pressure amplitude does not break energy conservation. The transmitted particle velocity drops, so the energy flux still balances.

The tube above already pushed that jump. A larger speed ratio and density ratio shrink the transmitted pulse and grow the reflected one. At 1:1 the reflection disappears. A different place where the same wave must not come back from an outlet is an NSCBC outflow.

The 13-Degree Wall — Snell's Law and the Critical Angle#

At oblique incidence the transmitted wave bends. The same Snell's law (the ratio of the sines of the incidence and transmission angles equals the ratio of sound speeds) that governs light holds for sound (paper eq. 41).

sin⁡θics1=sin⁡θtcs2\frac{\sin\theta_i}{c_{s1}} = \frac{\sin\theta_t}{c_{s2}}

θi\theta_i is the incidence angle and θt\theta_t the transmission angle. When the transmitted medium is faster (cs2>cs1c_{s2} > c_{s1}, like air to water), sin⁡θt\sin\theta_t exceeds 1 once the incidence angle passes a threshold. No transmitted wave can exist. That threshold is the critical angle.

θc=arcsin⁡ ⁣(cs1cs2)=arcsin⁡ ⁣(3431481)≈13.4∘\theta_c = \arcsin\!\left(\frac{c_{s1}}{c_{s2}}\right) = \arcsin\!\left(\frac{343}{1481}\right) \approx 13.4^\circ

343/1481343/1481 is about 0.232. The arcsine of that is 13.4 degrees. If an airborne source hits the surface more obliquely than this, the sound does not enter the water. Total reflection.

Move the incidence angle and the speed ratio, and the transmitted ray lies down on the surface or stands back up.

critical angle θc = 13.38°wave transmits into medium 2

Push the incidence angle toward 13 degrees and the transmitted ray lies almost flat before it disappears. Only the reflected ray remains. Lower the speed ratio and the critical angle grows, so a steeper incidence still transmits.

Loading Sound onto a Weak-Compressibility Model#

An incompressible solver uses pressure only as a tool to enforce the divergence constraint. That pressure field cannot carry sound. The paper introduces a weak-compressibility (a time-derivative term added to pressure that grants a finite sound speed) equation.

∂tp+ρ cs2 ∇⋅u=0\partial_t p + \rho\, c_s^2\, \nabla\cdot\mathbf{u} = 0

pp is pressure, u\mathbf{u} is velocity, and csc_s is the local sound speed. The edited spot is the per-phase interpolation of csc_s. Density and sound speed mix through the concentration cc.

( ⋅ )=( ⋅ )1 c+( ⋅ )2 (1−c)(\,\cdot\,) = (\,\cdot\,)_1\, c + (\,\cdot\,)_2\,(1 - c)

With that change, the same solver carries sound at cs1c_{s1} in medium 1 and cs2c_{s2} in medium 2. The authors discretize it with an entropy-stable discontinuous Galerkin spectral element method (DGSEM) and show spectral convergence.

The Modeling Error a Diffuse Interface Introduces#

Unlike VOF or level set, which cut the interface into a single cell, the Cahn–Hilliard model smears it over a width ε\varepsilon.

c0=1−0.5(1+tanh⁡2xε)c_0 = 1 - 0.5\left(1 + \tanh\frac{2x}{\varepsilon}\right)

This smearing introduces a modeling error. The paper confirms numerically that the error decays as the square of the interface width — precisely O ⁣((ε/λ)2)\mathcal{O}\!\left((\varepsilon/\lambda)^2\right) once normalized by wavelength. As ε→0\varepsilon \to 0, it converges to the sharp-interface analytic solution. The "interface width" slider on the 1D tube is this ε\varepsilon. Crank it up and the transmitted and reflected pulses smear slightly.

Python — Reproducing the Coefficients in a 1D Tube#

The linear acoustic equations are integrated with a staggered-grid FDTD scheme. A Gaussian pulse is fired, and the reflected and transmitted amplitudes after the interface are compared with the analytic values.

import numpy as np
 
def impedance(rho, c):
    """Acoustic impedance z = rho * c (density x sound speed)"""
    return rho * c
 
def analytic_coeffs(z1, z2):
    """Reflection / transmission for a normal-incidence plane wave (paper eq. 37)"""
    R = (z2 - z1) / (z1 + z2)
    T = 2.0 * z2 / (z1 + z2)
    return R, T
 
def tanh_interface(x, eps):
    """Concentration field smearing the interface over width eps (paper eq. 32)"""
    return 1.0 - 0.5 * (1.0 + np.tanh(2.0 * x / eps))
 
def run_acoustic_tube(rho1=1.0, c1=1.0, rho2=2.5, c2=1.8,
                      N=2000, L=4.0, eps=0.04, steps=2600):
    """Integrate the 1D linear acoustic system and measure pulse amplitudes."""
    dx = L / N
    x = -L / 2 + (np.arange(N) + 0.5) * dx
    conc = tanh_interface(x, eps)            # 1: medium 1, 0: medium 2
    rho = rho1 * conc + rho2 * (1.0 - conc)  # density interpolation
    cs  = c1   * conc + c2   * (1.0 - conc)  # sound speed interpolation
    K   = rho * cs**2                        # bulk modulus rho c^2
 
    p = np.exp(-((x + 0.55) / 0.12)**2)      # right-going Gaussian pulse
    u = p / (rho1 * c1)                      # medium-1 characteristic: u = p/(rho c)
 
    dt = 0.4 * dx / cs.max()                 # CFL-limited time step
    left, right = N // 4, 3 * N // 4         # left / right probes
    p_inc = p.max()
    refl_peak = tran_peak = 0.0
    for n in range(steps):
        u[:-1] += -dt / (0.5 * (rho[:-1] + rho[1:]) * dx) * (p[1:] - p[:-1])
        p[1:]  += -dt * K[1:] / dx * (u[1:] - u[:-1])
        if n > steps // 2:                   # after the pulse crosses
            refl_peak = max(refl_peak, np.abs(p[:left]).max())
            tran_peak = max(tran_peak, np.abs(p[right:]).max())
    return p_inc, refl_peak, tran_peak
 
if __name__ == "__main__":
    rho1, c1, rho2, c2 = 1.0, 1.0, 2.5, 1.8
    z1, z2 = impedance(rho1, c1), impedance(rho2, c2)
    R, T = analytic_coeffs(z1, z2)
    p_inc, refl, tran = run_acoustic_tube(rho1, c1, rho2, c2)
    print(f"z1={z1:.3f}  z2={z2:.3f}")
    print(f"analytic   |R|={abs(R):.3f}  T={T:.3f}")
    print(f"measured   |R|={refl / p_inc:.3f}  T={tran / p_inc:.3f}")

At z1=1.0z_1=1.0 and z2=4.5z_2=4.5, the measured values track the analytic ∣R∣=0.636|R|=0.636 and T=1.636T=1.636. The defaults are ρ1=1\rho_1=1, c1=1c_1=1, ρ2=2.5\rho_2=2.5, c2=1.8c_2=1.8, so z2=ρ2c2=4.5z_2=\rho_2 c_2=4.5. Then R=(4.5−1)/(4.5+1)=3.5/5.5=0.636R=(4.5-1)/(4.5+1)=3.5/5.5=0.636 and T=2×4.5/5.5=1.636T=2\times 4.5/5.5=1.636. The square of 0.6360.636 is near 0.405. T=1.636T=1.636 does not push reflected energy past 1. Particle velocity drops with the impedance ratio and the flux still balances.

The grid is N=2000N=2000, L=4L=4, so dx=0.002dx=0.002. ε=0.04\varepsilon=0.04 spans 20 cells, above the 10 points packed into the 3D air–water interface. With c2=1.8c_2=1.8, dt=0.4 dx/1.8dt=0.4\,dx/1.8. Peaks are recorded after step 1300 of 2600.

What Felt Shaky While Reproducing It#

The first trap was separating the reflected wave. The left probe sees the sum of incident and reflected pressure. The paper runs a separate single-phase simulation to subtract the incident part. The code above measures only the residual on the left after the pulse has left, but it is off while the incident and reflected waves overlap.

Weak compressibility is not true compressibility. It cannot handle shocks or high Mach numbers. The authors restrict it to low-Mach, linear acoustics. The purpose differs from solving acoustics directly with a compressible solver.

The 3D air-water example used 67.5 million degrees of freedom, because the diffuse interface needs more than ten points packed into it. The cost explodes as the interface thins. Whether this replaces VOF depends on the problem scale.

Shrinking ε\varepsilon cuts the error as (ε/λ)2(\varepsilon/\lambda)^2. In 3D the demand of 10 points inside the interface pushed the count to 67.5 million degrees of freedom. The 1D default ε/dx=20\varepsilon/dx=20 is twice that 10-point floor. Before cutting thinner, check that 0.636 and 1.636 already match. If they do not, the probe time is the problem, not anti-diffusion interface sharpening.

The same group's entropy-stable DGSEM iNS/CH paper (Manzanero et al., 2020) is the discretization this weak-compressibility term sits on. An outlet that swallows sound meets the NSCBC note above. Before forcing the interface thinner, check that normal incidence at an impedance ratio of 3600 puts RR on 0.999.

Share if you found it helpful.