Honest Fluids · Rust → WebAssembly

The verified browser fluid bench

A pure-Rust fluid stack — MAC projection and lattice-Boltzmann, oracle-verified and differentiable — compiled to WebAssembly and run right here. Every panel renders the flow and proves itself in the same page.

FERROMOTION · FLUIDLoading the solver (WebAssembly)…
The same lattice, on your GPU

Lattice-Boltzmann, one lane per cell

Lattice-Boltzmann is the most GPU-natural solver here: every cell's collide (a local relaxation) and stream (a push to its lattice neighbours) depend on nothing else, so the whole grid advances as two compute dispatches per step. The exact D2Q9 kernels the CPU solver above uses run here on whatever GPU your browser exposes — a lid-driven cavity at Re=100, developing live — and the converged centerline is graded against the Ghia et al. (1982) benchmark, the same table the CPU core is held to. No local GPU? The identical kernels fall back to the CPU.

FERROMOTION · WEBGPUBringing up the lattice on the GPU…
Why this page exists

Between eye-candy and install-only

A fluid solver that renders in the browser and stays accountable to the physics while it does, open to anyone. It is also an honesty bench: fluid and soft contact are exactly where a coefficient model — and an energy certificate — measurably break, so what you see here is the frontier drawn, not a solved case.

Verified, not decorative

The lid-driven cavity checks its own centerline against the Ghia (1982) reference table as it converges — the deviation number falls live, and divergence stays at machine zero. Rendering with a physics receipt attached.

Where coefficients break

Deployed robots run lumped coefficients plus learned residuals, not in-loop CFD. The gust bench shows exactly when the coefficient model fails: the resolved solver reconstructs the unsteady-force hierarchy — added mass, then history — that steady drag omits.

Differentiable to the body

The swimmer is self-propelled — thrust is emergent, no prescribed forward velocity — and the exact ∂displacement/∂amp is carried through the coupled fluid-structure loop, so it can learn to swim on real gradients.

The stack

One open architecture, all silicon

The same solvers run on the CPU floor everywhere, across every GPU through the Ferric fabric, and here in the browser — verification-first and differentiable by construction.

The cavity and lattice solvers converge at second order against analytic and reference solutions; both are differentiable end to end (viscosity identifies from an observed field to machine precision); and the immersed-boundary loop couples bodies to the flow with exact gradients. Nothing here is a screenshot — press, watch, and read the receipts.

The paper

Every layer, verified — the technical report

The complete design discipline and its reference implementation: every solver paradigm oracle-checked, differentiable by construction, and hardware-unbound, in Rust.

↓ Whitepaper · PDFRead online◆ Living paperTechnical Report TR-2026-24 · Institute for Physical AI @ BMI