lbm-gpu: the lattice Boltzmann step on the GPU, checked against the CPU

A new L7 crate: the CPU scheme's collision (TRT with Guo forcing), the
per-link streaming rules (bounce-back with Ladd's term, slip reflection,
open placeholders), the Zou–He boundaries and the momentum exchange per
force group as wgpu compute shaders, stepping the flow fieldcraft_lbm's
Flow prepared, through its Backend trait: populations stay on the device,
a chunk of steps is one submission, and only frames, forces and the
stability check come back. Populations are stored as deviations from
their weights, which keeps single precision honest: the verification
cases (Poiseuille with Λ = 3/16, Couette with wall forces, Taylor–Green,
a sphere's drag, a Zou–He channel) agree with the CPU to 2–5e-6 in
velocity, 1e-6 in density and 5e-5 in force, with those tolerances stated
in the tests. The rules are applied one thread per link rather than in a
per-cell loop, which lavapipe's JIT miscompiles (and which diverges on
real GPUs anyway). Native only for now; the browser registers nothing.

Part of #529.
This commit is contained in:
Christian Svensson authored and Irakli Kourtis committed 2026-10-17 07:23:40 -04:00
1 parent 944a54c76b
commit b123f31d47
10 files changed
+1270

No files matched your search

Generated
+13
View File
@@ -1401,6 +1401,19 @@ dependencies = [
"thiserror 2.0.21",
]
[[package]]
name = "fieldcraft-lbm-gpu"
version = "0.6.0"
dependencies = [
"fieldcraft-gpu",
"fieldcraft-lbm",
"fieldcraft-mesh",
"fieldcraft-model",
"log",
"pollster 1.0.1",
"wgpu",
]
[[package]]
name = "fieldcraft-mcp"
version = "0.6.0"