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.

Results reflect the current implementations, not the libraries

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

H

Steady conduction in a slab

Heat transfer
Optimization task: conductivity recoveryResults page
SolverForwardGradientOptimizationForward costVJP costReliability
GPU solvers · cost relative to the fastest GPU solver at N=1024
torch-femPassPassPass1× (fastest)1× (fastest)14/14 ok
JAX-FEMPassPassPass13×18×14/14 ok
CPU solvers · cost relative to the fastest CPU solver at N=1024
FiredrakePassPassPass1× (fastest)1× (fastest)14/14 ok
FEniCSPassPassPass1.2×1.3×14/14 ok
deal.IIPassNot supportedNot supported3.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.
S

Linear-elastic cantilever

Structural mechanics
Optimization task: compliance topology optimizationResults page
SolverForwardGradientOptimizationForward costVJP costReliability
GPU solvers · cost relative to the fastest GPU solver at N=128
torch-femPassPassPass1× (fastest)1× (fastest)10/10 ok
JAX-FEMPassPassPass17×18×10/10 ok
CPU solvers · cost relative to the fastest CPU solver at N=128
TopOpt.jlPassPassPass1× (fastest)1× (fastest)10/10 ok
FiredrakePassPassPass3.6×7.0×10/10 ok
FEniCSPassPassPass8.4×23×10/10 ok
deal.IIPassNot supportedNot supported4.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.
F2

Periodic box (Taylor–Green, multimode)

Navier–Stokes (2D)
SolverForwardGradientForward costVJP costReliability
GPU solvers · cost relative to the fastest GPU solver at N=256
jax-cfdPassPass1× (fastest)1× (fastest)19/19 ok
Warp-NSPassPass3.2×5.0×19/19 ok
XLBPassPass8.7×18×19/19 ok
PhiFlowPassPass1289×1186×19/19 ok
PICTBorderlinePass161×129×18/19 ok1 flagged
CPU solvers · cost relative to the fastest CPU solver at N=256
INS.jlPassPass1× (fastest)1× (fastest)19/19 ok
OpenFOAMPassNot supported33×—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
F2

Channel flow past a cylinder

Navier–Stokes (2D)
Optimization task: inflow optimization for dragResults page
SolverForwardOptimizationReliability
GPU solvers
PhiFlowPassPass2/2 ok
Warp-NSPassPass2/2 ok
XLBPassPass2/2 ok
PICTPassNot run1/2 ok1 not run
jax-cfdNot runNot run0/2 ok2 not run
CPU solvers
OpenFOAMPassNot supported1/1 ok
INS.jlNot runNot run0/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
F3

Triply periodic box (Taylor–Green)

Navier–Stokes (3D)
Optimization task: initial-condition recoveryResults page
SolverForwardGradientOptimizationForward costVJP costReliability
GPU solvers · cost relative to the fastest GPU solver at N=64, N=48
jax-cfdPassPassPass1× (fastest)1.1×16/16 ok
ExponaxPassPassPass1.1×1× (fastest)16/16 ok
Warp-NSPassPassPass1.6×10×16/16 ok
XLBPassPassPass8.6×13×16/16 ok
PICTPassPassPass15×21×16/16 ok
PhiFlowPassPassPass166×115×16/16 ok
CPU solvers · cost relative to the fastest CPU solver at N=64
INS.jlPassPassPass1× (fastest)1× (fastest)16/16 ok
OpenFOAMPassNot supportedNot supported7.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.

Navier–Stokes 2D task schematic

F2

Navier–Stokes (2D)

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.

Navier–Stokes 3D task schematic

F3

Navier–Stokes (3D)

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.

Structural mechanics task schematic

S

Structural mechanics

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.

Heat transfer task schematic

H

Heat transfer

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

Heat transfer · Initial Conditions

Open in the Heat transfer results →

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.

Open in the Heat transfer results →

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.

Open in the Heat transfer results →

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.

Open in the Heat transfer results →

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.

Open in the Heat transfer results →

H Forward 1 plot

Source Linearity

Heat transfer · Forward

Thermal compliance \(C\) vs source amplitude at fixed mesh; compares solvers on log-log axes.

Open in the Heat transfer results →

H Cost 1 plot

Cost overview

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.

Open in the Heat transfer results →

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\).

Open in the Heat transfer results →

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).

Open in the Heat transfer results →

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\).

Open in the Heat transfer results →

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.

Open in the Heat transfer results →

S Initial Conditions 1 plot

Initial Conditions overview

Structural mechanics · Initial Conditions

Open in the Structural mechanics results →

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.

Open in the Structural mechanics results →

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.

Open in the Structural mechanics results →

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.

Open in the Structural mechanics results →

S Cost 1 plot

Cost overview

Structural mechanics · Cost

Open in the Structural mechanics results →

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.

Open in the Structural mechanics results →

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\).

Open in the Structural mechanics results →

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.

Open in the Structural mechanics results →

F2 Initial Conditions 1 plot

Initial Conditions overview

Navier–Stokes (2D) · Initial Conditions

Open in the Navier–Stokes (2D) results →

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\).

Open in the Navier–Stokes (2D) results →

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.

Open in the Navier–Stokes (2D) results →

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.

Open in the Navier–Stokes (2D) results →

F2 Cost 1 plot

Cost overview

Navier–Stokes (2D) · Cost

Open in the Navier–Stokes (2D) results →

F2 Gradient 1 plot

Gradient overview

Navier–Stokes (2D) · Gradient

Open in the Navier–Stokes (2D) results →

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.

Open in the Navier–Stokes (2D) results →

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.

Open in the Navier–Stokes (2D) results →

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\).

Open in the Navier–Stokes (2D) results →

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.

Open in the Navier–Stokes (2D) results →

F3 Initial Conditions 1 plot

Initial Conditions overview

Navier–Stokes (3D) · Initial Conditions

Open in the Navier–Stokes (3D) results →

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.

Open in the Navier–Stokes (3D) results →

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.

Open in the Navier–Stokes (3D) results →

F3 Cost 1 plot

Cost overview

Navier–Stokes (3D) · Cost

Open in the Navier–Stokes (3D) results →

F3 Gradient 1 plot

Gradient overview

Navier–Stokes (3D) · Gradient

Open in the Navier–Stokes (3D) results →

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.

Open in the Navier–Stokes (3D) results →

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.

Open in the Navier–Stokes (3D) results →

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.

Open in the Navier–Stokes (3D) results →