forked from 1b-agent/fieldcraft-upstream
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:
1 parent
944a54c76b
commit
b123f31d47
10 files changed
+1270
No files matched your search
@@ -57,6 +57,7 @@ pub const TABLE: &[(&str, Class)] = &[
|
||||
("io", Class::Layer(5)),
|
||||
("engine", Class::Layer(6)),
|
||||
("gpu", Class::Layer(7)),
|
||||
("lbm-gpu", Class::Layer(7)),
|
||||
("ui-egui", Class::Layer(7)),
|
||||
("mcp", Class::Layer(7)),
|
||||
("testkit", Class::Testkit),
|
||||
@@ -73,6 +74,8 @@ pub const INTRA_LAYER_ORDER: &[&[&str]] = &[
|
||||
&["gpu", "ui-egui"],
|
||||
// The MCP server's headless screenshots draw with them too.
|
||||
&["gpu", "mcp"],
|
||||
// The lattice Boltzmann GPU backend opens its device with the GPU crate's adapter policy.
|
||||
&["gpu", "lbm-gpu"],
|
||||
];
|
||||
|
||||
fn intra_layer_allowed(from: &str, to: &str) -> bool {
|
||||
|
||||
Reference in new issue
Block a user