We measured QuanFlow, FluidX3D, OpenLB 1.9 and waLBerla 7 on one RTX 5070 Ti, with the same grid and the same collision model. This page gives the numbers, how they were measured, and the cases where FluidX3D is equal or faster.
MLUPs/s is million lattice-node updates per second, counting solid nodes too. Higher is better. All numbers below were measured on one RTX 5070 Ti 16 GB unless the RTX 3060 12 GB is named.
MLUPs/s including the moving-body update, excluding set-up. QuanFlow is +16% vs FluidX3D, +30% vs OpenLB, +43% vs waLBerla. In FP16S: QuanFlow 8,461, FluidX3D 6,574 (+29%); OpenLB and waLBerla have no 16-bit storage. QuanFlow also accumulates the force on the rotor every step; the other codes compute no forces.
End-to-end time (process start to exit, external clock): QuanFlow FP16S 40 s, FluidX3D FP16S 52 s (includes OpenCL compilation), QuanFlow FP32 73 s, FluidX3D FP32 85 s, OpenLB FP32 122 s.
Wall-clock, including re-voxelisation and force accumulation: QuanFlow is 20% faster. FluidX3D reports 9,504 MLUPs/s for its LBM kernel alone, but re-marks moving-boundary nodes over the whole lattice at each re-voxelisation, which costs about 18–22% of the run; QuanFlow works only inside the bounding box of the body and pays 2.4–2.7%.
| Grid | Code | MLUPs/s | B/node | Total run (s) |
|---|---|---|---|---|
| 544 × 281 × 192 (29.4 M) | QuanFlow | 4,951 | 93.1 | 8.4 |
| waLBerla 7 | 2,986 | 103.0 | 16.4 | |
| OpenLB 1.9 | 2,856 | 115.9 | 31.2 | |
| 765 × 396 × 270 (81.8 M) | QuanFlow | 4,925 | 93.1 | 22.4 |
| waLBerla 7 | 3,395 | 96.1 | 40.2 | |
| OpenLB 1.9 | 3,191 | 113.6 | 75.3 |
D3Q19, BGK + Smagorinsky, 1,000 timed steps after 200 warm-up steps. QuanFlow is 1.45–1.73× faster, uses the least memory, and the complete run (reading the STL, voxelisation, initialisation, time loop) is 1.8–3.7× shorter. The number of solid nodes is identical in QuanFlow and waLBerla.
Sphere at Re 100, FP32, TRT, 81.4 M nodes, 54,400 steps, identical grid. Time includes set-up and in-run statistics; shorter is better. QuanFlow is 2.0× faster. OpenLB's kernel time and overhead are not yet separated.
QuanFlow 1,808 MLUPs/s, waLBerla 1,471 MLUPs/s: QuanFlow is 21% faster. The drag coefficient of the three codes (QuanFlow, FluidX3D, waLBerla) agrees within 0.03%.
| GPU | Format | QuanFlow | FluidX3D | Difference |
|---|---|---|---|---|
| RTX 5070 Ti | FP32 | 4,966 | 4,794 | +4% |
| RTX 5070 Ti | FP16S | 9,869 | 9,341 | +6% |
| RTX 5070 Ti | FP16C | 9,826 | 9,614 | +2% |
| RTX 3060 | FP32 | 2,170 | 2,118 | +2% |
| RTX 3060 | FP16S | 4,312 | 4,001 | +8% |
| RTX 3060 | FP16C | 3,888 | 3,472 | +12% |
QuanFlow is the median of five runs of 200 steps; FluidX3D is its own reported peak, so this comparison favours FluidX3D.
In-place Esoteric Pull streaming, shifted FP16 storage, 77 bytes per node, confirmed by Nsight Compute (76–77 B). 9,754 MLUPs/s equals 751 GB/s on a card whose measured copy bandwidth is 753 GB/s. On the RTX 3060: 4,299 MLUPs/s = 331 GB/s against 328 GB/s measured.
Every boundary type and collision variant (SRT, TRT, LES) runs inside one kernel with a fixed register budget. Adding LES costs under 1% on large grids. Near-wall nodes are handled in the main kernel with no separate list kernel.
Transform, voxelisation, refill and near-wall marking run only inside the bounding box of the body. Re-voxelisation costs 2.4–2.7% of the run instead of about 20%. Forces are computed on demand from node flags, with no 12-byte-per-node force field.
Initialising populations on the GPU instead of the host cut the start-up of a 268-million-node run from 34.7 s to 0.76 s. Force evaluation dropped from 11.9 to 1.36 ms.
55 bytes per node in 16-bit storage. FluidX3D needs 105 B with its force field, OpenLB 114–147 B. A 656³ grid (282 M nodes) fits in 16 GB; production cases ran up to 268 M nodes.
The browser live view slows the run by only 0–1.3%. FluidX3D's default interactive mode drops 30–36% because it renders continuously (a smoother image, so the two numbers are not at equal frame rates).
Speed only matters if the answer is right. Acceptance thresholds are fixed before each run, and cases that fail are published on the Validation page.
Stated limits: forces on complex curved geometry depend on the staircase wall treatment (the Schäfer–Turek cylinder fails its thresholds for lift and pressure difference); the wall function is not yet validated on the Ahmed body, so it is not used for client work; the multi-GPU build today serves grids larger than one card's memory, not higher speed.
NVIDIA RTX 5070 Ti 16 GB (measured copy bandwidth 753 GB/s, data sheet 896 GB/s) and RTX 3060 12 GB (measured 328 GB/s, data sheet 360 GB/s). The GPU was idle during measurements; two processes on one GPU halve the throughput.
QuanFlow (CUDA), FluidX3D (OpenCL, only the set-up file and compile options changed, graphics off for complete runs), OpenLB 1.9 (GPU backend), waLBerla 7 (7-stable branch, lbmpy-generated D3Q19 in-place kernel). Same grid, same collision model (BGK/SRT or TRT, and Smagorinsky 0.17326).
MLUPs/s = nodes × steps / time, counting solid nodes. QuanFlow: median of five runs of 200 steps after warm-up. FluidX3D: its own reported peak (which favours FluidX3D). Complete runs: external clock from process start to exit. Measured October 2026.
Comparisons across different GPUs in the literature are indicative only; every claim on this page rests on same-device measurements. Full details are in our manuscript; contact us for a copy or the raw data.
On the same RTX 5070 Ti, QuanFlow reaches 99.8% of the measured memory bandwidth. On static bodies it equals FluidX3D (both sit at the bandwidth limit). On moving bodies it is 20–29% faster than FluidX3D, 30% faster than OpenLB and 43% faster than waLBerla.
2–6% in the 256³ box benchmark, equal on static bodies, 20% on the 219.7-million-node rotating propeller (9,376 vs 7,784 MLUPs/s) and 29% in FP16S on the TU Delft propeller (8,461 vs 6,574).
Same card, same grid, same collision model. For moving bodies each code uses its own mechanism (OpenLB: HLBM; waLBerla: CPU-side voxelisation because it has no GPU boundary for arbitrary moving surfaces), and this is stated. We have not yet separated OpenLB's kernel time from its overhead in the sphere case.
Yes. QuanFlow accumulates force and torque by momentum exchange every step, and the speeds above include it. In the TU Delft propeller comparison the other codes compute no forces, which favours them.
Yes, that is our main service. Send a short description and get a free feasibility review within 24 hours.
Send a short description. Free feasibility review within 24 hours, no obligation.