Summary
MFC's moving immersed-boundary method lacks a geometric-conservation-law (GCL) / fresh-dead-cell treatment. On a fixed Cartesian grid, a moving body produces a spurious mass source/sink at the interface that seeds pressure oscillations and, in marginal cases, a CFL / sound-speed blow-up. This is latent in the shared ghost-cell IBM code and affects both AMR and non-AMR moving-IB simulations. We should add a proper GCL treatment.
Where it currently bites
The AMR moving-IB regression test 13945217 ("AMR → 2D → moving IBM circle") diverges on OpenMP-offload backends (Cray CCE gpu-mp and AMD flang) while passing on OpenACC and CPU. It fails with icfl NaN / ICFL is greater than 1.0. Exiting.
Diagnosis (rocgdb + device-side finiteness instrumentation on Frontier):
- The IB geometry pipeline is completely finite — every ghost point's
levelset_norm, ip_loc, and interp_coeffs stays finite for the whole run (0 non-finite across all steps). So this is not a degenerate-stencil or bad-normal bug, and not the moving-body position sync.
- The failure is a flow-stability / CFL blow-up: a NaN sound speed forms in the flow state (device-generated), first appearing as a ~65-cell cluster hugging the moving circle's leading (advancing) edge, then growing until
maxval(icfl_sf) trips on the host.
- It is OpenMP-only because the flow sits on a stability knife's edge; OpenMP's floating-point ordering tips the marginal case past the edge where OpenACC/CPU stay just stable.
Root cause
In src/simulation/m_rhs.fpp (~L851–865), every IB cell's RHS is zeroed (rhs_vf = 0) — a standard non-conservative ghost-cell IBM (Tseng & Ferziger 2003; Mittal & Iaccarino 2005). Interior cells are frozen and set by s_ibm_correct_state (p=1, momentum = body_vel·ρ). There is no GCL term accounting for a cell's fluid volume changing as the interface sweeps, and the flux across the moving fluid-solid interface is not made conservative. As the body moves, this un-GCL'd volume/flux change is a spurious mass source/sink at the front — the well-documented moving-IBM pressure-oscillation mechanism (Seo & Mittal, JCP 2011).
Notably, 13945217's body barely moves in cell units (vel=0.2, dt=1e-3 → ~0.13 cells over 10 steps), so the dominant driver here is the moving-wall velocity BC compression at the leading edge plus the per-substage recompute, more than literal cell-flipping — but both are the same missing-GCL family.
Why cheap fixes don't apply
- Fresh-cell reinitialization (reset vacated cells from fluid neighbors): implemented and tested — it fires but does not stabilize (
ICFL>1 at the same step). The driver is a flux/volume conservation error, not stale cell state.
- Velocity/forcing temporal smoothing: moot — the body velocity is prescribed-constant.
- Interior field extension: moot —
gp_layers=3 ≥ the WENO stencil, so the interior p=1 is masked from the reconstruction.
Proposed fix
Add a compressible GCL / cut-cell treatment to the moving-IB update: fractional cell volumes V(t) ∈ [0,1] and a U·dV/dt source term (or a conservative moving-boundary flux) replacing the binary frozen-cell mask. This is the literature remedy (Seo & Mittal report ~7–10× oscillation reduction) and benefits all moving-IB runs, AMR and non-AMR. It is a substantial change to the core IB update and will re-golden the moving-IB tests.
Test-coverage gap
The only moving-IB regression tests are AMR (13945217, 43AF9F25); there is no non-AMR moving-IB test, so a non-AMR moving-IB production run could hit this silently. A non-AMR moving-IB test should be added alongside the fix.
Interim
Deferring the numerics (no user is currently blocked). The associated CI test 13945217 is being adjusted to stop before the marginal instability manifests (matching 43AF9F25's short-run pattern) so CI is unblocked; this issue tracks the real fix.
References
- J.H. Seo & R. Mittal, A sharp-interface immersed boundary method with improved mass conservation and reduced spurious pressure oscillations, JCP 230 (2011) 7347–7363.
- Mittal & Iaccarino, Immersed Boundary Methods, Annu. Rev. Fluid Mech. 37 (2005).
- Implicit ghost-cell IBM for moving bodies with control of spurious force oscillations, JCP 2012 (S0021999112005128).
Summary
MFC's moving immersed-boundary method lacks a geometric-conservation-law (GCL) / fresh-dead-cell treatment. On a fixed Cartesian grid, a moving body produces a spurious mass source/sink at the interface that seeds pressure oscillations and, in marginal cases, a CFL / sound-speed blow-up. This is latent in the shared ghost-cell IBM code and affects both AMR and non-AMR moving-IB simulations. We should add a proper GCL treatment.
Where it currently bites
The AMR moving-IB regression test
13945217("AMR → 2D → moving IBM circle") diverges on OpenMP-offload backends (Cray CCE gpu-mp and AMD flang) while passing on OpenACC and CPU. It fails withicfl NaN/ICFL is greater than 1.0. Exiting.Diagnosis (rocgdb + device-side finiteness instrumentation on Frontier):
levelset_norm,ip_loc, andinterp_coeffsstays finite for the whole run (0 non-finite across all steps). So this is not a degenerate-stencil or bad-normal bug, and not the moving-body position sync.maxval(icfl_sf)trips on the host.Root cause
In
src/simulation/m_rhs.fpp(~L851–865), every IB cell's RHS is zeroed (rhs_vf = 0) — a standard non-conservative ghost-cell IBM (Tseng & Ferziger 2003; Mittal & Iaccarino 2005). Interior cells are frozen and set bys_ibm_correct_state(p=1,momentum = body_vel·ρ). There is no GCL term accounting for a cell's fluid volume changing as the interface sweeps, and the flux across the moving fluid-solid interface is not made conservative. As the body moves, this un-GCL'd volume/flux change is a spurious mass source/sink at the front — the well-documented moving-IBM pressure-oscillation mechanism (Seo & Mittal, JCP 2011).Notably,
13945217's body barely moves in cell units (vel=0.2,dt=1e-3→ ~0.13 cells over 10 steps), so the dominant driver here is the moving-wall velocity BC compression at the leading edge plus the per-substage recompute, more than literal cell-flipping — but both are the same missing-GCL family.Why cheap fixes don't apply
ICFL>1at the same step). The driver is a flux/volume conservation error, not stale cell state.gp_layers=3≥ the WENO stencil, so the interiorp=1is masked from the reconstruction.Proposed fix
Add a compressible GCL / cut-cell treatment to the moving-IB update: fractional cell volumes
V(t) ∈ [0,1]and aU·dV/dtsource term (or a conservative moving-boundary flux) replacing the binary frozen-cell mask. This is the literature remedy (Seo & Mittal report ~7–10× oscillation reduction) and benefits all moving-IB runs, AMR and non-AMR. It is a substantial change to the core IB update and will re-golden the moving-IB tests.Test-coverage gap
The only moving-IB regression tests are AMR (
13945217,43AF9F25); there is no non-AMR moving-IB test, so a non-AMR moving-IB production run could hit this silently. A non-AMR moving-IB test should be added alongside the fix.Interim
Deferring the numerics (no user is currently blocked). The associated CI test
13945217is being adjusted to stop before the marginal instability manifests (matching43AF9F25's short-run pattern) so CI is unblocked; this issue tracks the real fix.References