block_collide: one unforced uniform-equivalent branch; drop collide_mrt_unforced
The blocked collision had three arms (MRT wrapper, channel SRT, level SRT) and a one-caller MRT wrapper in collision_mrt.cuh. Now block_collide computes rho/u once and has two compile-time families: - uniform-equivalent (MRT any level, SRT channel root): collide_dispatch arithmetic with zero force, no LES: one clamped omega, collide_mrt_no_force or collide_srt with its zero Guo term (unchanged); - level SRT (BLOCK_ROOT_BC 0/1): unclamped, collide_srt_no_force, shifted momentum feq exception kept visible. No runtime d_params.fx/fy is read. Uniform kernels unchanged (only the unused inline wrapper is removed from collision_mrt.cuh). Source-text test updated to the new single call sites. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
65339ab54e
commit
a4fc46d849
@@ -32,22 +32,22 @@ class RefinementMRTHost(unittest.TestCase):
|
||||
"collide_srt_no_force(f, feq, d_params.omega);"):
|
||||
self.assertIn(text, block_collision)
|
||||
self.assertIn("collide_srt(f, feq, forcing, omega);", block_collision)
|
||||
self.assertIn("#elif BLOCK_ROOT_BC == 2", block_collision)
|
||||
self.assertIn("#if COLLISION_MODEL == 2 || BLOCK_ROOT_BC == 2", block_collision)
|
||||
self.assertEqual(channel.count("block_collide(f);"), 1)
|
||||
self.assertNotIn("collide_mrt_unforced(f);", channel)
|
||||
for text in ("collide_mrt_unforced", "collide_dispatch(", "d_params.fx", "d_params.fy"):
|
||||
self.assertNotIn(text, channel + "\n" + block_collision)
|
||||
for source in (blocks,):
|
||||
self.assertIn("(COLLISION_MODEL != 0 && COLLISION_MODEL != 2)", source)
|
||||
self.assertIn("USE_LES", source)
|
||||
self.assertIn("STORE_PRECISION != 0", source)
|
||||
self.assertIn('#if COLLISION_MODEL == 2\n#include "operators/collision_mrt.cuh"\n#endif', source)
|
||||
# One shared unforced MRT body; each blocked/patch path calls it exactly once.
|
||||
mrt = (KERNELS / "operators/collision_mrt.cuh").read_text()
|
||||
self.assertEqual(mrt.count("void collide_mrt_unforced("), 1)
|
||||
for source in (blocks + "\n" + block_collision, channel + "\n" + block_collision):
|
||||
self.assertEqual(source.count("collide_mrt_unforced(f);"), 1)
|
||||
self.assertNotIn("collide_mrt_no_force(", source)
|
||||
self.assertNotIn("compute_rho_u(f, rho, ux, uy);\n collide_mrt", source)
|
||||
self.assertNotRegex(source, r"compute_rho_u\(f, rho, ux, uy\);\s*collide_mrt")
|
||||
# One unforced MRT call, in block_collide only; the steps never collide directly.
|
||||
self.assertEqual(block_collision.count("collide_mrt_no_force(f, rho, ux, uy, omega);"), 1)
|
||||
self.assertEqual(block_collision.count("compute_rho_u(f, rho, ux, uy);"), 1)
|
||||
self.assertEqual(block_collision.count("fmaxf(OMEGA_COLLISION_MIN, d_params.omega)"), 1)
|
||||
for source in (blocks, channel):
|
||||
self.assertNotIn("collide_mrt", source)
|
||||
self.assertNotIn("collide_srt", source)
|
||||
|
||||
|
||||
if __name__ == "__main__": unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user