Files
CelerisLab/docs/development/refinement_mrt.md

2.3 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) remained SRT-only; it was removed in 8e1feff and its single-level capability, still SRT-only, is FixedPatchStepper(refinements=[]).

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.