Results
What each solver in Mosaic can do on each benchmark setup: whether its forward solution, gradient and optimization results are good enough for the task, what it costs relative to its peers, and how much of the campaign ran cleanly. Mosaic does not rank solvers or combine these into a single score.
These are example results, produced automatically on GitHub Actions runners and refreshed on every release. Accuracy and gradient metrics are hardware-independent and reproducible; wall-clock numbers reflect commodity cloud hardware and are best read as relative scaling between solvers. For numbers that reflect your setup, run the benchmarks yourself on your target hardware.
Each solver is wrapped in a Tesseract by the Mosaic team or its contributors, and some wrappers have had far more tuning than others: solver settings, preconditioners, time steps and resolutions. A flag or a slow time here says how this implementation behaves on this setup, not how good the underlying software is. Solvers also differ a lot in how much work a setup takes: some provide the geometry, boundary conditions and adjoints out of the box, others need them written by hand. Before committing to one, try the alternatives that pass on your kind of problem.
If you maintain or use one of these solvers and can improve its configuration, contributions are welcome.
How to read the checks
Results are grouped by setup: one concrete problem statement, such as periodic Taylor–Green flow or channel flow past a cylinder. Setups of the same physics are not averaged, because a solver that handles one need not handle the other.
For each setup, each solver gets:
- Forward, gradient and optimization checks. Every experiment carries pass criteria set in its problem configuration (
status_check): for example an error bound against the reference, a finite-difference agreement bound for the gradient, or the fraction of the objective an optimizer must remove. A check combines the setup’s gate experiments for that suite (see the table of states below). Hover a check for the reasons; the list under each table spells them out. - Cost, forward and VJP: wall-clock time as a multiple of the fastest solver on the same kind of device, at the largest problem size every solver in that group completed. GPU and CPU solvers ran on different machines, so they are compared within their group only. The per-suite tables on each results page give the absolute times.
- Reliability: how many of the setup’s experiments ran cleanly, out of those the solver supports, with flagged, failed and not-run experiments counted separately. This includes diagnostic experiments that are not gates (Jacobian spectra, horizon sweeps, cost sweeps). A cost run flagged only for being slow counts as clean here; its speed shows in the cost columns.
| State | Meaning |
|---|---|
| ✓ Pass | Every gate experiment met its criteria. |
| ! Borderline | A gate was flagged: it ran, but missed its criteria. Where the cause is documented (often a property of the comparison rather than the solver), the explanation is shown with the reason. |
| ✗ Fail | A gate errored or produced no valid result. |
| — Not supported | The method cannot express the experiment, e.g. a forward-only solver has no gradient. |
| · Not run | Not run in this campaign yet. |
Within each device group, solvers that pass more checks are listed first, then faster ones. That ordering is a reading aid, not a ranking: a solver that passes everything is not “better” than one that is flagged on a check your application does not need.
| Setup | Forward | Gradient | Optimization |
|---|---|---|---|
| H · Steady conduction in a slab | agreement, baseline, physical_laws, source_baseline, source_linearity |
fd_check, param_sweep, source_fd_check, source_width_sweep |
conductivity_recovery_bfgs |
| S · Linear-elastic cantilever | agreement, baseline, physical_laws |
fd_check, param_sweep |
topopt |
| F2 · Periodic box (Taylor–Green, multimode) | agreement, baseline, physical_laws, tgv_nu_sweep |
fd_check, param_sweep |
— |
| F2 · Channel flow past a cylinder | cylinder |
— | drag_opt |
| F2 · Forced periodic box (Kolmogorov flow) | kolmogorov_laminar, kolmogorov |
chain_fd_check |
— |
| F3 · Triply periodic box (Taylor–Green) | agreement, baseline, physical_laws |
fd_check |
recovery |
The thresholds behind each check are provisional and will be refined with the solver maintainers; they live next to each experiment in mosaic/benchmarks/problems/<domain>/config.py.
Checks by setup
Steady conduction in a slab
Heat transfer| Solver | Forward | Gradient | Optimization | Forward cost | VJP cost | Reliability |
|---|---|---|---|---|---|---|
| GPU solvers · cost relative to the fastest GPU solver at N=1024 | ||||||
| torch-fem | Pass | Pass | Pass | 1× (fastest) | 1× (fastest) | 14/14 ok |
| JAX-FEM | Pass | Pass | Pass | 13× | 18× | 14/14 ok |
| CPU solvers · cost relative to the fastest CPU solver at N=1024 | ||||||
| Firedrake | Pass | Pass | Pass | 1× (fastest) | 1× (fastest) | 14/14 ok |
| FEniCS | Pass | Pass | Pass | 1.2× | 1.3× | 14/14 ok |
| deal.II | Pass | Not supported | Not supported | 3.1× | — | 7/7 ok |
Passes every check: Firedrake, torch-fem, FEniCS, JAX-FEM.
Not supported (1 solver)
- deal.II · 7 experiments — deal.II thermal tesseract is forward-only: this tesseract exposes no AD path (no VJP endpoint, no differentiable inputs), so cost/vjp and gradient experiments are categorically out of scope.; deal.II thermal tesseract exposes no AD path; conductivity recovery (gradient-based ρ updates that minimize the misfit to a target temperature field) requires a differentiable identification-error output.
Linear-elastic cantilever
Structural mechanics| Solver | Forward | Gradient | Optimization | Forward cost | VJP cost | Reliability |
|---|---|---|---|---|---|---|
| GPU solvers · cost relative to the fastest GPU solver at N=128 | ||||||
| torch-fem | Pass | Pass | Pass | 1× (fastest) | 1× (fastest) | 10/10 ok |
| JAX-FEM | Pass | Pass | Pass | 17× | 18× | 10/10 ok |
| CPU solvers · cost relative to the fastest CPU solver at N=128 | ||||||
| TopOpt.jl | Pass | Pass | Pass | 1× (fastest) | 1× (fastest) | 10/10 ok |
| Firedrake | Pass | Pass | Pass | 3.6× | 7.0× | 10/10 ok |
| FEniCS | Pass | Pass | Pass | 8.4× | 23× | 10/10 ok |
| deal.II | Pass | Not supported | Not supported | 4.5× | — | 5/5 ok |
Passes every check: TopOpt.jl, torch-fem, Firedrake, FEniCS, JAX-FEM.
Not supported (1 solver)
- deal.II · 5 experiments — deal.II structural tesseract is forward-only: this tesseract exposes no AD path (no VJP endpoint, no differentiable inputs), so cost/vjp and gradient experiments are categorically out of scope.; deal.II structural tesseract has no AD path; topology-optimisation (compliance gradient-based ρ updates) requires a differentiable compliance output.
Periodic box (Taylor–Green, multimode)
Navier–Stokes (2D)| Solver | Forward | Gradient | Forward cost | VJP cost | Reliability |
|---|---|---|---|---|---|
| GPU solvers · cost relative to the fastest GPU solver at N=256 | |||||
| jax-cfd | Pass | Pass | 1× (fastest) | 1× (fastest) | 19/19 ok |
| Warp-NS | Pass | Pass | 3.2× | 5.0× | 19/19 ok |
| XLB | Pass | Pass | 8.7× | 18× | 19/19 ok |
| PhiFlow | Pass | Pass | 1289× | 1186× | 19/19 ok |
| PICT | Borderline | Pass | 161× | 129× | 18/19 ok1 flagged |
| CPU solvers · cost relative to the fastest CPU solver at N=256 | |||||
| INS.jl | Pass | Pass | 1× (fastest) | 1× (fastest) | 19/19 ok |
| OpenFOAM | Pass | Not supported | 33× | — | 9/9 ok |
Passes every check: INS.jl, jax-cfd, Warp-NS, XLB, PhiFlow.
Why cells are flagged (1)
- PICT ·
forward/baseline· flagged — error converges at order 0.35 in N, below min_order=0.8 (explained: PICT runs PISO with its default two pressure correctors, and its momentum predictor carries no pressure gradient. The splitting error this leaves scales with ν·dt/dx², which grows as the grid is refined at fixed CFL, so the error levels off on the finest grids and the observed order drops. More correctors remove the floor at a multiple of the wall time and reverse-mode memory)
Not supported (1 solver)
- OpenFOAM · 10 experiments — OpenFOAM has no VJP to benchmark; OpenFOAM is non-differentiable (C++, no AD path); DAFoam/OpenFOAM-AD exist but are not deployed in this tesseract
Channel flow past a cylinder
Navier–Stokes (2D)| Solver | Forward | Optimization | Reliability |
|---|---|---|---|
| GPU solvers | |||
| PhiFlow | Pass | Pass | 2/2 ok |
| Warp-NS | Pass | Pass | 2/2 ok |
| XLB | Pass | Pass | 2/2 ok |
| PICT | Pass | Not run | 1/2 ok1 not run |
| jax-cfd | Not run | Not run | 0/2 ok2 not run |
| CPU solvers | |||
| OpenFOAM | Pass | Not supported | 1/1 ok |
| INS.jl | Not run | Not run | 0/2 ok2 not run |
Passes every check: PhiFlow, Warp-NS, XLB.
Why cells are flagged (5)
- PICT ·
optimization/drag_opt· not run — each drag_opt iteration runs a full forward and VJP through PICT's unpreconditioned pressure solves on the body-fitted channel mesh, so the experiment takes hours on the benchmark GPU - INS.jl ·
forward/cylinder· not run — this tesseract implements only periodic flows; INS.jl itself supports channel BCs (Dirichlet inflow, pressure outflow) and obstacles via Brinkman forcing, which are not wired up here - INS.jl ·
optimization/drag_opt· not run — this tesseract implements only periodic flows; INS.jl itself supports channel BCs (Dirichlet inflow, pressure outflow) and obstacles via Brinkman forcing, which are not wired up here - jax-cfd ·
forward/cylinder· not run — this tesseract implements only periodic flows; jax-cfd itself has non-periodic pressure solvers for channel flows, which are not wired up here - jax-cfd ·
optimization/drag_opt· not run — this tesseract implements only periodic flows; jax-cfd itself has non-periodic pressure solvers for channel flows, which are not wired up here
Not supported (1 solver)
- OpenFOAM · 1 experiments — OpenFOAM is a non-differentiable, forward-only solver
Triply periodic box (Taylor–Green)
Navier–Stokes (3D)| Solver | Forward | Gradient | Optimization | Forward cost | VJP cost | Reliability |
|---|---|---|---|---|---|---|
| GPU solvers · cost relative to the fastest GPU solver at N=64, N=48 | ||||||
| jax-cfd | Pass | Pass | Pass | 1× (fastest) | 1.1× | 16/16 ok |
| Exponax | Pass | Pass | Pass | 1.1× | 1× (fastest) | 16/16 ok |
| Warp-NS | Pass | Pass | Pass | 1.6× | 10× | 16/16 ok |
| XLB | Pass | Pass | Pass | 8.6× | 13× | 16/16 ok |
| PICT | Pass | Pass | Pass | 15× | 21× | 16/16 ok |
| PhiFlow | Pass | Pass | Pass | 166× | 115× | 16/16 ok |
| CPU solvers · cost relative to the fastest CPU solver at N=64 | ||||||
| INS.jl | Pass | Pass | Pass | 1× (fastest) | 1× (fastest) | 16/16 ok |
| OpenFOAM | Pass | Not supported | Not supported | 7.9× | — | 7/7 ok |
Passes every check: INS.jl, jax-cfd, Exponax, Warp-NS, XLB, PICT, PhiFlow.
Not supported (1 solver)
- OpenFOAM · 9 experiments — standard icoFoam has no VJP to benchmark; standard icoFoam is non-differentiable (C++, no AD path); DAFoam/OpenFOAM-AD exist but are not deployed in this tesseract; standard icoFoam is a non-differentiable, forward-only solver
Domains
Each domain page collects the setups of one physics problem and reports, per suite: forward (output against a trusted reference, and an analytic solution where one exists), gradient (AD or adjoint gradient against a finite-difference ground truth, in magnitude and direction), cost (forward and VJP wall-clock scaling with problem size) and optimization (end-to-end convergence using each solver’s own gradients). See the Overview for the full evaluation protocol.
F2
Optimize the inflow of a 2D channel flow to minimize drag on a cylinder, differentiating through an incompressible fluid solver. Covers JAX-CFD, PhiFlow, INS.jl, XLB, PICT, Warp-NS, and OpenFOAM across spectral, finite-difference, finite-volume, and LBM schemes.
F3
Recover the initial velocity field of a 3D turbulent flow from a later snapshot, differentiating through the Navier–Stokes rollout. Covers PhiFlow, XLB, PICT, Warp-NS, Exponax, INS.jl, and OpenFOAM on a triply periodic Taylor–Green vortex.
S
Place a fixed budget of material in a clamped beam to make it as stiff as possible, differentiating through a finite-element solve. Covers deal.II, FEniCS, Firedrake, JAX-FEM, TopOpt.jl, and torch-fem on 2D cantilever compliance minimization with SIMP penalization.
H
Invert for the conductivity field of a slab from its temperature, differentiating through a steady heat-conduction solve. Covers deal.II, FEniCS, Firedrake, JAX-FEM, and torch-fem on 2D steady-state heat conduction.
Experiment explorer
Every experiment across all domains. Search or filter, then click a card to see its plots.

H Initial Conditions 1 plot
Initial Conditions overview

H Forward 1 plot
Agreement
Heat transfer · Forward
Thermal compliance \(C\) vs uniform element density \(\rho_0\) at fixed \(N\); compares solvers on a log scale.

H Forward 1 plot
Baseline
Heat transfer · Forward
Thermal compliance \(C\) vs mesh resolution \(N\) with random density; compares FV and FEM solvers across refinements.

H Forward 1 plot
Physical Laws
Heat transfer · Forward
Thermal compliance \(C\) vs total heat flux \(Q_\mathrm{total}\) at fixed \(N\) and \(\rho_0\) with a hot-spot BC; shown on log-log axes.

H Forward 1 plot
Source Baseline
Heat transfer · Forward
Thermal compliance \(C\) vs mesh resolution \(N\) with a Gaussian source field; compares solvers across refinements.

H Forward 1 plot
Source Linearity
Heat transfer · Forward
Thermal compliance \(C\) vs source amplitude at fixed mesh; compares solvers on log-log axes.


H Gradient 1 plot
Finite-Difference Check
Heat transfer · Gradient
FD gradient error vs step size \(\varepsilon\) (U-curves), AD/FD direction cosine, and gradient magnitude field panels.

H Gradient 1 plot
Parameter Sweep
Heat transfer · Gradient
Gradient norm, best-\(\varepsilon\) FD error, AD/FD direction cosine, and U-curves vs element density \(\rho_0\).

H Gradient 1 plot
Source Fd Check
Heat transfer · Gradient
FD gradient error vs \(\varepsilon\), AD/FD direction cosine, and gradient field panels for d(identification_error)/d(source).

H Gradient 1 plot
Source Width Sweep
Heat transfer · Gradient
Gradient norm, best-\(\varepsilon\) FD error, AD/FD direction cosine, and U-curves vs source width \(\sigma\).

H Optimization 1 plot
Conductivity Recovery (L-BFGS)
Heat transfer · Optimization
Optimisation traces (loss vs iteration) and recovered conductivity fields vs the two-Gaussian ground truth, using L-BFGS.

S Initial Conditions 1 plot
Initial Conditions overview

S Forward 1 plot
Agreement
Structural mechanics · Forward
Structural compliance \(C = \mathbf{F}^\top \mathbf{u}\) vs density \(\rho_0\) at fixed mesh, sweeping uniform density to span the SIMP stiffness regime.

S Forward 1 plot
Baseline
Structural mechanics · Forward
Structural compliance \(C = \mathbf{F}^\top \mathbf{u}\) vs mesh resolution \(N\) for each solver, uniform density \(\rho_0=0.5\), full-face downward load.

S Forward 1 plot
Physical Laws
Structural mechanics · Forward
Diagnostic functionals (compliance, total displacement) vs total load \(F_\mathrm{total}\), validating linearity of the SIMP response.


S Gradient 1 plot
Finite-Difference Check
Structural mechanics · Gradient
U-curves of finite-difference gradient error vs perturbation size \(\varepsilon\) with subspace cosine, validating VJP correctness on a random density.

S Gradient 1 plot
Parameter Sweep
Structural mechanics · Gradient
Gradient norm, best-\(\varepsilon\) FD error, direction cosine, and U-curves vs uniform density \(\rho_0\).

S Optimization 8 plots
Topology Optimisation
Structural mechanics · Optimization
SIMP topology optimisation on a \(16\times8\times8\) cantilever beam with Adam (lr=0.05): compliance \(C = \mathbf{F}^\top \mathbf{u}\) and density field evolution under a 50% volume-fraction constraint.

F2 Initial Conditions 1 plot
Initial Conditions overview

F2 Forward 1 plot
Baseline
Navier–Stokes (2D) · Forward
Relative error vs grid resolution \(N\) against the analytic TGV solution at \(t=1.28\), refining space and time together at a fixed CFL number. The legend gives each solver’s observed order of accuracy \(p\).

F2 Forward 1 plot
Cylinder
Navier–Stokes (2D) · Forward
Steady flow past a cylinder in a channel (Schäfer–Turek DFG 2D-1, Re = 20) at 10 and 20 cells per diameter. Each solver’s drag coefficient at 20 is scored against the reference Cd = 5.5795. The pressure difference across the cylinder (reference 0.1175) and the lift coefficient are also reported. The vorticity fields are for visual comparison.

F2 Forward 1 plot
Tgv Nu Sweep
Navier–Stokes (2D) · Forward
Relative error vs viscosity \(\nu\) for each solver at a fixed TGV initial condition.


F2 Gradient 1 plot
Gradient overview

F2 Gradient 2 plots
Finite-Difference Check
Navier–Stokes (2D) · Gradient
U-curves of finite-difference gradient error vs perturbation size \(\varepsilon\) together with subspace cosine; validates VJP correctness.

F2 Gradient 1 plot
Parameter Sweep
Navier–Stokes (2D) · Gradient
Gradient norm, best-\(\varepsilon\) FD error, direction cosine, and U-curves vs the sweep parameter.

F2 Gradient 1 plot
Horizon Sweep
Navier–Stokes (2D) · Gradient
Gradient norm, FD error, and direction cosine vs rollout horizon \(T = \mathrm{steps}\cdot dt\).

F2 Optimization 3 plots
Drag Optimisation
Navier–Stokes (2D) · Optimization
Drag minimization over the inlet profile of the DFG 2D-1 channel at a fixed flow rate: drag coefficient per iteration, optimized vs initial inflow profiles, and the flow fields before and after.

F3 Initial Conditions 1 plot
Initial Conditions overview

F3 Forward 1 plot
Agreement
Navier–Stokes (3D) · Forward
3D velocity magnitude fields and kinetic energy spectra per solver, swept over viscosity ν, compared against a converged spectral reference. (The 3D TGV initial condition is not advection-free, so the linearized analytic decay is only a short-horizon consistency check, not an accuracy reference.) The reference is an Exponax run at N=64, spectrally truncated to N=16. Exponax’s low error here, and its top place in the forward ranking, therefore largely measure agreement with its own higher-resolution solution.

F3 Forward 1 plot
Baseline
Navier–Stokes (3D) · Forward
Relative error vs grid resolution N against a converged spectral reference at t=1.28, refining space and time together at a fixed CFL number. The legend gives each solver’s observed order of accuracy p.


F3 Gradient 1 plot
Gradient overview

F3 Gradient 2 plots
Finite-Difference Check
Navier–Stokes (3D) · Gradient
Finite-difference gradient error U-curves and direction cosine vs perturbation ε for each solver on the 3D Taylor-Green vortex IC.

F3 Gradient 1 plot
Horizon Sweep Limits
Navier–Stokes (3D) · Gradient
Per-solver rollout-limit table reporting step count at first failure, failure type, and wall time per successful step.

F3 Optimization 2 plots
Initial-Condition Recovery (L-BFGS)
Navier–Stokes (3D) · Optimization
Final IC recovery error per solver from zero-initialised L-BFGS optimisation with divergence-free projection.











