Files
ClaudeandClaude Opus 5.5 00d7a54829 feat: opt-in MRT collision for blocked/refined stepping
Additive compile-time COLLISION_MODEL == 2 branches in BlockStep,
BlockChannelStep and patch_collide repeat the uniform collide_dispatch
MRT sequence (zero forcing, omega clamp, collide_mrt_no_force). SRT
statements, including the shifted retained-delta/direct-momentum path,
are unchanged under the alternate branch. Guards accept SRT or MRT only;
TRT, LES, non-FP32, non-double-buffer and shifted dense/mixed refinement
stay rejected. Transfers, subcycling, BFL, raw ledgers, channel closures,
shifted-Jet SRT guard and PeriodicBlockStepper are untouched. Existing
MRT operator, shifted representation and fixed kinetic rates are reused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:26:55 +00:00

2.1 KiB

MRT reuse in blocked/refined stepping (candidate)

Base 9805383. Opt-in by LBMConfig(collision="MRT"); SRT remains the default and its kernel statements, including the shifted retained-delta/direct-momentum path, are unchanged under the alternate compile branch.

What changes

  • blocks.cu (BlockStep), step/block_channel.cu (BlockChannelStep) and refinement.cu (patch_collide) gain a compile-time COLLISION_MODEL == 2 branch that repeats the uniform collide_dispatch sequence with zero forcing: compute_rho_u, omega clamp to [OMEGA_COLLISION_MIN, OMEGA_COLLISION_MAX], collide_mrt_no_force.
  • Kernel and host guards accept SRT or MRT only. TRT, LES, non-FP32 storage, non-double-buffer streaming, and shifted dense/mixed refinement remain rejected.
  • Transfers, subcycling, BFL, raw exchange ledgers and channel closures are untouched. The existing pressure-NEQ outlet selects its MRT branch (unknowns-only NEQ extrapolation) from COLLISION_MODEL, so MRT channel parity must use uniform MRT as reference.

Contracts (existing operator, not redefined here)

  • Shifted storage uses the existing MRT representation (equilibrium moments from rho - 1), not the SRT retained-delta/direct-momentum precision. Mass and momentum are conserved moments (relaxation rate 0).
  • Kinetic rates are the operator's fixed s_e = s_eps = s_q = 1.2 on every level; the shear rate is the existing per-level omega. Under acoustic 2:1 scaling the physical bulk viscosity therefore halves on each finer level. No rate rescaling is applied.
  • No LES, no external forcing (d_params force fields stay zero).
  • Shifted Jets stay SRT-only: body/jets.py keeps its existing guard. This extension does not provide shifted MRT Jets.
  • PeriodicBlockStepper (uniform blocked stepper) remains SRT-only.

Evidence status

CPU: tests/unit/test_refinement_mrt.py (host guards, source contract). GPU: tests/validation/multigrid/test_refinement_mrt_gpu.py (uniform-MRT channel parity, AMR MRT smoke) and unchanged SRT GPU tests. Strict parity may be subject to cross-kernel FMA contraction differences already documented for SRT. Not a DFG/benchmark validation.