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>
2.1 KiB
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) andrefinement.cu(patch_collide) gain a compile-timeCOLLISION_MODEL == 2branch that repeats the uniformcollide_dispatchsequence 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.2on 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_paramsforce fields stay zero). - Shifted Jets stay SRT-only:
body/jets.pykeeps 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.