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>
35 lines
2.1 KiB
Markdown
35 lines
2.1 KiB
Markdown
# 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.
|