Results

These are example results from GitHub-hosted runners, refreshed on every release. Wall-clock times vary between runs, so treat absolute times as indicative and compare solvers by their relative cost. For numbers that reflect your own hardware, run the benchmark yourself.

Faster does not mean better. So far, Mosaic’s setups are kept simple so that many solvers can run them. That favors solvers built for exactly these problems and hides what general-purpose libraries offer, like support for complex geometries, boundary conditions, and turbulence schemes. The table shows how each solver does on the Mosaic setups, not which solver is better.

The integrations may not make the best use of each library. They’re written by Mosaic team or a contributor, and the effort column and the modified-setup notes record what was needed to do so. If you know a solver well and can improve its configuration, please contribute!

How to read the results

Rows are ordered by checks passed, then by forward cost. Mosaic does not combine the columns into a single score.

Column Meaning
Forward, Gradient, Optimization Whether the setup’s experiments in that suite met their pass criteria. Hover for the numbers. k of n run: only some of the experiments behind the check ran.
Forward cost, VJP cost Wall-clock time at the size N in the group’s header, the largest that every solver in the group completed, and its multiple of the fastest. A solver that completed fewer than half of the sizes is left out, and the cell says where it stopped.
Cost to 10% error On the Kolmogorov flow, the wall time per simulated time unit a solver needs to stay within 10% relative error of the converged truth at t = 4, interpolated between the grids it ran. ≤ means the coarsest grid already got there.
Time to plateau How far into the optimization run the loss had made 95% of its improvement, on a log scale, and its multiple of the fastest. Results recorded before the harness kept this time estimate it as the run’s wall time times the share of its iterations run by then, which includes startup and compilation pro rata. Where a run’s iteration counts were not all recorded, the column counts iterations instead.
Peak memory Of the VJP pass (the forward pass for forward-only solvers): device memory on a GPU, container memory on a CPU.
Effort The most invasive intervention the solver needs on the setup, from L0 (nothing beyond documented options) to L3 (changes to the solver itself). See effort levels.

A solver marked modified setup runs a substitute for part of the setup, such as a different outflow condition, so its checks hold for the modified setup. The notes below the table say what it changes and how that affects the results.

State Meaning
✓ Pass Every experiment met its criteria.
! Flagged An experiment ran but missed its criteria.
✗ Fail An experiment errored or produced no valid result.
⊘ Blocked Excluded for a recorded reason, such as an instability or an upstream bug, which the cell names.
— Not supported The method cannot express the experiment, e.g. a forward-only solver has no gradient.
· Not run Not run in this campaign.
Setup Forward Gradient Optimization
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
Linear-elastic cantilever agreement, baseline, physical_laws fd_check, param_sweep topopt
Periodic box agreement, baseline, physical_laws, tgv_nu_sweep fd_check, analytic_check, analytic_check_nu, param_sweep —
Channel flow past a cylinder cylinder — drag_opt
Forced Kolmogorov flow kolmogorov_laminar, kolmogorov chain_fd_check —
Triply periodic box agreement, baseline, physical_laws fd_check recovery

Some criteria are absolute, such as an error bound against an analytic solution, an observed order of convergence or a minimum agreement with finite differences. Others compare a solver with its peers on the same experiment, for example an error more than three times their median, so a flag on such a criterion marks an outlier that may still be accurate enough for a given task. The thresholds are provisional and will be refined with the solver maintainers. They live next to each experiment in mosaic/benchmarks/problems/<problem>/config.py.

Checks by setup

H

Steady conduction in a slab

Heat transfer
Optimization task: conductivity recoveryResults page
SolverForwardGradientOptimizationForward costVJP costTime to plateauPeak memoryEffort
GPU solversForward and VJP, multiples of the fastest GPU solver
JAX-FEMPassPassPass————L0
torch-femPassPassPass————L0
CPU solversForward and VJP at N=1024, multiples of the fastest CPU solver
FEniCSPassPassPass14.3 sfastest30.5 sfastest2.1 minfastest4.67 GiBL3
FiredrakePassPassPass————L0
deal.IIPassNot supportedNot supported20.1 s1.4×——1.87 GiBL0
Flags and exclusions (12)
  • Firedrake on cost/spatial_cost: not run
  • Firedrake on cost/temporal_cost: not run
  • Firedrake on cost/vjp_cost/by_N: not run
  • Firedrake on cost/vjp_cost/by_steps: not run
  • JAX-FEM on cost/spatial_cost: not run
  • JAX-FEM on cost/temporal_cost: not run
  • JAX-FEM on cost/vjp_cost/by_N: not run
  • JAX-FEM on cost/vjp_cost/by_steps: not run
  • torch-fem on cost/spatial_cost: not run
  • torch-fem on cost/temporal_cost: not run
  • torch-fem on cost/vjp_cost/by_N: not run
  • torch-fem on cost/vjp_cost/by_steps: not run
Not supported (1 solver)
  • deal.II, 7 experiments. The deal.II thermal tesseract is forward-only. It exposes no AD path (no VJP endpoint, no differentiable inputs), so cost/vjp and gradient experiments are categorically out of scope.; The deal.II thermal tesseract exposes no AD path, and 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 costTime to plateauPeak memoryEffort
GPU solversForward and VJP, multiples of the fastest GPU solver
JAX-FEMPassPassPass————L0
torch-femPassPassPass————L0
CPU solversForward and VJP at N=128, multiples of the fastest CPU solver
FEniCSPassPassPass3.05 s2.0×6.02 sfastest6.1 minfastest1.07 GiBL0
FiredrakePassPassPass————L0
TopOpt.jlmodified setupPassPassPass————L0
deal.IIPassNot supportedNot supported1.51 sfastest——763 MiBL0
Modified setups (1)

These solvers run a substitute for part of the setup, so their checks hold for the modified setup.

  • TopOpt.jl: Applies the cantilever load as nodal forces. Effect: None: on the uniform mesh the nodal forces equal the integrated traction.
Flags and exclusions (16)
  • Firedrake on cost/spatial_cost: not run
  • Firedrake on cost/temporal_cost: not run
  • Firedrake on cost/vjp_cost/by_N: not run
  • Firedrake on cost/vjp_cost/by_steps: not run
  • JAX-FEM on cost/spatial_cost: not run
  • JAX-FEM on cost/temporal_cost: not run
  • JAX-FEM on cost/vjp_cost/by_N: not run
  • JAX-FEM on cost/vjp_cost/by_steps: not run
  • TopOpt.jl on cost/spatial_cost: not run
  • TopOpt.jl on cost/temporal_cost: not run
  • TopOpt.jl on cost/vjp_cost/by_N: not run
  • TopOpt.jl on cost/vjp_cost/by_steps: not run
  • torch-fem on cost/spatial_cost: not run
  • torch-fem on cost/temporal_cost: not run
  • torch-fem on cost/vjp_cost/by_N: not run
  • torch-fem on cost/vjp_cost/by_steps: not run
Not supported (1 solver)
  • deal.II, 5 experiments. The deal.II structural tesseract is forward-only. It exposes no AD path (no VJP endpoint, no differentiable inputs), so cost/vjp and gradient experiments are categorically out of scope.; The deal.II structural tesseract has no AD path, and topology optimization (compliance gradient-based ρ updates) requires a differentiable compliance output.
F2

Periodic box

Navier–Stokes (2D)
SolverForwardGradientForward costVJP costPeak memoryEffort
GPU solversForward and VJP at N=256, multiples of the fastest GPU solver, measured on Tesla T4
jax-cfdPassPass3 of 4 run40.1 ms1.2×85.6 ms1.1×512 MiBL0
Warp-NSPassPass3 of 4 run99.8 ms2.9×407 ms5.0×4 MiBL2
XLBmodified setupPassPass3 of 4 run266 ms7.7×1.49 s18×8 GiBL2
INS.jlPassPass3 of 4 run280 ms8.1×986 ms12×32 MiBL0
PhiFlowPassPass3 of 4 run22 s640×68.3 s840×1.09 GiBL3
ExponaxFlaggedPass3 of 4 run34.4 msfastest81.3 msfastest256 MiBL2
PICTFlaggedPass4.99 s145×10.5 s129×4.97 GiBL0
CPU solversForward and VJP at N=256, multiples of the fastest CPU solver
OpenFOAMFlaggedNot supported7.72 sfastest—528 MiBL0

Solvers differ in how general they are. Exponax and jax-cfd do not run Channel flow past a cylinder. Exponax, INS.jl, OpenFOAM, PhiFlow, Warp-NS, XLB and jax-cfd do not run Forced Kolmogorov flow.

Modified setups (1)

These solvers run a substitute for part of the setup, so their checks hold for the modified setup.

  • XLB: Sub-steps each step to bound the Mach number. Effect: LBM ties the time step to the grid through the lattice Mach number, so XLB runs k times the prescribed number of steps (k = 9 at N = 256 on the 2-D box), and its cost includes them. Without sub-stepping the Taylor-Green case ran at Ma of about 0.88, with errors 84 to 114x the peer median.
Flags and exclusions (9)
  • jax-cfd on gradient/analytic_check_nu: not run
  • Warp-NS on gradient/analytic_check_nu: not run
  • XLB on gradient/analytic_check_nu: not run
  • INS.jl on gradient/analytic_check_nu: not run
  • PhiFlow on gradient/analytic_check_nu: not run
  • Exponax on forward/baseline: flagged. error converges at order -1.46 in N, below min_order=0.8 (explained: the Taylor–Green vortex is a single Fourier mode, which a spectral method represents exactly on every grid, so Exponax's error is float32 round-off from the first step. Round-off grows with the number of grid points and steps rather than shrinking with the grid spacing, so no positive order can be observed)
  • Exponax on gradient/analytic_check_nu: not run
  • PICT on 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)
  • OpenFOAM on forward/tgv_nu_sweep: flagged. error 0.00645 at sweep=0.0001 is 4.2× peer median (0.00154); threshold k=3.0 (explained: OpenFOAM stores velocity at cell centres and makes only the face fluxes divergence-free. In the Taylor–Green vortex, advection is a gradient at twice the vortex's wavenumber, which the pressure cancels exactly. Most of OpenFOAM's error is a compressive component at that wavenumber in the cell-centred velocity. The staggered and spectral solvers have none of it, the other solvers at most a tenth of it. It is second order in the grid spacing, grows with the simulated time and the vortex's amplitude, and changes little with the timestep. It shrinks as the viscosity grows, so it stands out only at the lowest viscosities)
Not supported (1 solver)
  • OpenFOAM, 11 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
SolverForwardOptimizationEffort
GPU solvers
INS.jlPassPassL2
PhiFlowPassPassL2
PICTmodified setupPassPassL2
Warp-NSPassPassL2
XLBmodified setupPassPassL0
ExponaxNot supportedNot supportedL0
jax-cfdNot supportedNot supportedL0
CPU solvers
OpenFOAMPassNot supportedL0

Solvers differ in how general they are. Exponax, INS.jl, OpenFOAM, PhiFlow, Warp-NS, XLB and jax-cfd do not run Forced Kolmogorov flow.

Modified setups (2)

These solvers run a substitute for part of the setup, so their checks hold for the modified setup.

  • PICT: Replaces the pressure outlet with advective outflow. Effect: Partly measured. In OpenFOAM, an advective velocity outlet with p = 0 leaves Cd, Cl and pressure drop unchanged to six digits, as expected for a steady flow; the missing pressure outlet could not be reproduced there. Its share of PICT's 3% Cd excess (#239) is unmeasured.
  • XLB: Sub-steps each step to bound the Mach number. Effect: LBM ties the time step to the grid through the lattice Mach number, so XLB runs k times the prescribed number of steps (k = 9 at N = 256 on the 2-D box), and its cost includes them. Without sub-stepping the Taylor-Green case ran at Ma of about 0.88, with errors 84 to 114x the peer median.
Not supported (3 solvers)
  • OpenFOAM, 1 experiment. OpenFOAM is a non-differentiable, forward-only solver
  • Exponax, 2 experiments. a Fourier pseudo-spectral method represents only periodic fields, so it cannot express a channel with walls, an inflow and an outflow
  • jax-cfd, 2 experiments. jax-cfd 0.2.1 cannot express the channel. Its advection raises NotImplementedError for any inflow (only no-penetration and periodic boundaries are supported), it pads a zero-gradient boundary only for cell-centered fields, so the outlet's face-centered u_x cannot have one, its boundary values are scalars, so the inlet cannot carry a profile, and it has no obstacles
F2

Forced Kolmogorov flow

Navier–Stokes (2D)
SolverForwardGradientCost to 10% errorEffort
GPU solversMultiples of the fastest GPU solver
PICTPassPass16.2 sfastestL0
ExponaxNot runNot run—L3
INS.jlNot runNot run—L0
jax-cfdNot runNot run—L2
PhiFlowNot runNot run—L3
Warp-NSNot runUnstable—L2
XLBmodified setupNot runNot run—L2
CPU solvers
OpenFOAMNot implementedNot supported—L0

Solvers differ in how general they are. Exponax and jax-cfd do not run Channel flow past a cylinder.

Modified setups (1)

These solvers run a substitute for part of the setup, so their checks hold for the modified setup.

  • XLB: Sub-steps each step to bound the Mach number. Effect: LBM ties the time step to the grid through the lattice Mach number, so XLB runs k times the prescribed number of steps (k = 9 at N = 256 on the 2-D box), and its cost includes them. Without sub-stepping the Taylor-Green case ran at Ma of about 0.88, with errors 84 to 114x the peer median.
Flags and exclusions (20)
  • Exponax on forward/kolmogorov: not run
  • Exponax on forward/kolmogorov_laminar: not run
  • Exponax on gradient/chain_fd_check: not run
  • INS.jl on forward/kolmogorov: not run
  • INS.jl on forward/kolmogorov_laminar: not run
  • INS.jl on gradient/chain_fd_check: not run
  • jax-cfd on forward/kolmogorov: not run
  • jax-cfd on forward/kolmogorov_laminar: not run
  • jax-cfd on gradient/chain_fd_check: not run
  • OpenFOAM on forward/kolmogorov: not implemented. this tesseract runs icoFoam, which has no momentum source term, so it cannot apply the body force or the drag. OpenFOAM's foamRun incompressibleFluid solver supports both through an fvModel, but this tesseract does not use it
  • OpenFOAM on forward/kolmogorov_laminar: not implemented. this tesseract runs icoFoam, which has no momentum source term, so it cannot apply the body force or the drag. OpenFOAM's foamRun incompressibleFluid solver supports both through an fvModel, but this tesseract does not use it
  • PhiFlow on forward/kolmogorov: not run
  • PhiFlow on forward/kolmogorov_laminar: not run
  • PhiFlow on gradient/chain_fd_check: not run
  • Warp-NS on forward/kolmogorov: not run
  • Warp-NS on forward/kolmogorov_laminar: not run
  • Warp-NS on gradient/chain_fd_check: unstable. the solver advances with explicit Euler and central differences for advection, which is linearly unstable at the timestep of the chain (see forward/kolmogorov). Over the chain's calls the unstable modes grow, so they dominate both the gradient and the finite differences, which then disagree at every ε a float32 run resolves. Where they grow fast enough, the chain from the ground-truth state diverges
  • XLB on forward/kolmogorov: not run
  • XLB on forward/kolmogorov_laminar: not run
  • XLB on gradient/chain_fd_check: not run
Not supported (1 solver)
  • OpenFOAM, 1 experiment. OpenFOAM is non-differentiable (C++, no AD path); DAFoam/OpenFOAM-AD exist but are not deployed in this tesseract
F3

Triply periodic box

Navier–Stokes (3D)
Optimization task: initial-condition recoveryResults page
SolverForwardGradientOptimizationForward costVJP costPeak memoryEffort
GPU solversForward and VJP at N=64, multiples of the fastest GPU solver, measured on Tesla T4
PICTPassPassPass1.28 sfastest3.31 sfastest14 GiBL0
ExponaxPassPassPass———L0
INS.jlPassPassPass———L0
jax-cfdPassPassPass———L0
PhiFlowPassPassPass———L3
Warp-NSPass1 of 5 runPassPass———L2
XLBmodified setupPassPassPass———L2
CPU solversForward and VJP, multiples of the fastest CPU solver
OpenFOAMPass1 of 5 runNot supportedNot supported———L0

Solvers differ in how general they are. Exponax and jax-cfd do not run Channel flow past a cylinder. Exponax, INS.jl, OpenFOAM, PhiFlow, Warp-NS, XLB and jax-cfd do not run Forced Kolmogorov flow.

Modified setups (1)

These solvers run a substitute for part of the setup, so their checks hold for the modified setup.

  • XLB: Sub-steps each step to bound the Mach number. Effect: LBM ties the time step to the grid through the lattice Mach number, so XLB runs k times the prescribed number of steps (k = 9 at N = 256 on the 2-D box), and its cost includes them. Without sub-stepping the Taylor-Green case ran at Ma of about 0.88, with errors 84 to 114x the peer median.
Flags and exclusions (41)
  • PICT on cost/vjp_cost/by_steps: failed. container_died: ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
  • Exponax on cost/spatial_cost: not run
  • Exponax on cost/temporal_cost: not run
  • Exponax on cost/vjp_cost/by_N: not run
  • Exponax on cost/vjp_cost/by_steps: not run
  • Exponax on gradient/horizon_sweep_limits: not run
  • INS.jl on cost/spatial_cost: not run
  • INS.jl on cost/temporal_cost: not run
  • INS.jl on cost/vjp_cost/by_N: not run
  • INS.jl on cost/vjp_cost/by_steps: not run
  • INS.jl on gradient/horizon_sweep_limits: not run
  • jax-cfd on cost/spatial_cost: not run
  • jax-cfd on cost/temporal_cost: not run
  • jax-cfd on cost/vjp_cost/by_N: not run
  • jax-cfd on cost/vjp_cost/by_steps: not run
  • jax-cfd on gradient/horizon_sweep_limits: not run
  • PhiFlow on cost/spatial_cost: not run
  • PhiFlow on cost/temporal_cost: not run
  • PhiFlow on cost/vjp_cost/by_N: not run
  • PhiFlow on cost/vjp_cost/by_steps: not run
  • PhiFlow on gradient/horizon_sweep_limits: not run
  • Warp-NS on forward/agreement: not run
  • Warp-NS on forward/physical_laws/vs_N: not run
  • Warp-NS on forward/physical_laws/vs_nu: not run
  • Warp-NS on forward/physical_laws/vs_steps: not run
  • Warp-NS on cost/spatial_cost: not run
  • Warp-NS on cost/temporal_cost: not run
  • Warp-NS on cost/vjp_cost/by_N: not run
  • Warp-NS on cost/vjp_cost/by_steps: not run
  • Warp-NS on gradient/horizon_sweep_limits: not run
  • XLB on cost/spatial_cost: not run
  • XLB on cost/temporal_cost: not run
  • XLB on cost/vjp_cost/by_N: not run
  • XLB on cost/vjp_cost/by_steps: not run
  • XLB on gradient/horizon_sweep_limits: not run
  • OpenFOAM on forward/agreement: not run
  • OpenFOAM on forward/physical_laws/vs_N: not run
  • OpenFOAM on forward/physical_laws/vs_nu: not run
  • OpenFOAM on forward/physical_laws/vs_steps: not run
  • OpenFOAM on cost/spatial_cost: not run
  • OpenFOAM on cost/temporal_cost: not run
Resource limits (2)

Sweeps a solver completed only up to some size or rollout length. It ran out of memory or time or, in sweeps that look for the limit, failed past the last value it completed. Unless that happened at the first value, the experiment counts as ok, and the limit shows how far the solver goes on this hardware.

  • PICT on cost/vjp_cost/by_N, from N=96
  • PICT on gradient/horizon_sweep_limits, from steps=10240
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

Download the data

The full result tree of every release, with the metrics, fields and plot specs behind these pages, is attached to its GitHub release as mosaic-results-<version>.zip, for your own analyses.

Experiment explorer

Every experiment across all setups. Search or filter, then click a card to see its plots.

H Initial conditions 1 plot

Initial conditions overview

Steady conduction in a slab, initial conditions

Open on the results page of this setup →

H Forward 1 plot

Agreement between solvers

Steady conduction in a slab, forward

Thermal compliance \(C\) vs uniform element density \(\rho_0\) at fixed \(N\); compares solvers on a log scale.

Open on the results page of this setup →

H Forward 1 plot

Agreement with the reference

Steady conduction in a slab, forward

Thermal compliance \(C\) vs mesh resolution \(N\) with random density; compares the solvers across refinements.

Open on the results page of this setup →

H Forward 1 plot

Conservation and decay laws

Steady conduction in a slab, 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 on the results page of this setup →

H Forward 1 plot

Agreement with the reference (heat source)

Steady conduction in a slab, forward

Thermal compliance \(C\) vs mesh resolution \(N\) with a Gaussian source field; compares solvers across refinements.

Open on the results page of this setup →

H Forward 1 plot

Linearity in the heat source

Steady conduction in a slab, forward

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

Open on the results page of this setup →

H Cost 1 plot

Cost overview

Steady conduction in a slab, cost

Open on the results page of this setup →

H Gradient 1 plot

Gradient against finite differences

Steady conduction in a slab, gradient

FD gradient error vs step size \(\varepsilon\) (U-curves), AD/FD direction cosine, and gradient magnitude field panels.

Open on the results page of this setup →

H Gradient 1 plot

Gradient accuracy across the control parameter

Steady conduction in a slab, gradient

Gradient norm, best-\(\varepsilon\) FD error, AD/FD direction cosine, and U-curves vs element density \(\rho_0\).

Open on the results page of this setup →

H Gradient 1 plot

Gradient with respect to the heat source

Steady conduction in a slab, gradient

FD gradient error vs \(\varepsilon\), AD/FD direction cosine, and gradient field panels for d(identification_error)/d(source).

Open on the results page of this setup →

H Gradient 1 plot

Heat-source gradient across source width

Steady conduction in a slab, gradient

Gradient norm, best-\(\varepsilon\) FD error, AD/FD direction cosine, and U-curves vs source width \(\sigma\).

Open on the results page of this setup →

H Optimization 1 plot

Conductivity recovery (L-BFGS)

Steady conduction in a slab, optimization

Optimisation traces (loss vs iteration) and recovered conductivity fields vs the two-Gaussian ground truth, using L-BFGS.

Open on the results page of this setup →

S Initial conditions 1 plot

Initial conditions overview

Linear-elastic cantilever, initial conditions

Open on the results page of this setup →

S Forward 1 plot

Agreement between solvers

Linear-elastic cantilever, 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 on the results page of this setup →

S Forward 1 plot

Agreement with the reference

Linear-elastic cantilever, 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 on the results page of this setup →

S Forward 1 plot

Conservation and decay laws

Linear-elastic cantilever, forward

Diagnostic functionals (compliance, total displacement) vs total load \(F_\mathrm{total}\), validating linearity of the SIMP response.

Open on the results page of this setup →

S Cost 1 plot

Cost overview

Linear-elastic cantilever, cost

Open on the results page of this setup →

S Gradient 1 plot

Gradient against finite differences

Linear-elastic cantilever, gradient

U-curves of finite-difference gradient error vs perturbation size \(\varepsilon\) with subspace cosine, validating VJP correctness on a random density.

Open on the results page of this setup →

S Gradient 1 plot

Gradient accuracy across the control parameter

Linear-elastic cantilever, gradient

Gradient norm, best-\(\varepsilon\) FD error, direction cosine, and U-curves vs uniform density \(\rho_0\).

Open on the results page of this setup →

S Optimization 8 plots

Topology optimization

Linear-elastic cantilever, optimization

SIMP topology optimization on a \(16\times2\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 on the results page of this setup →

F2 Initial conditions 1 plot

Initial conditions overview

Periodic box, initial conditions

Open on the results page of this setup →

F2 Forward 1 plot

Agreement with the reference

Periodic box, 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 on the results page of this setup →

F2 Forward 1 plot

Flow past a cylinder against the DFG reference

Channel flow past a cylinder, 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 on the results page of this setup →

F2 Forward 1 plot

Accuracy and speed on turbulent Kolmogorov flow

Forced Kolmogorov flow, forward

Each solver on 32² to 256² grids against a converged Exponax run at 1024², from three turbulent states of the Kolmogorov flow at ν = 2·10⁻³. Every grid runs at the CFL number of 64² with dt = 0.01 and is scored on the 64² grid. Relative error at t = 4 against the wall time of one time unit, and relative error per time on each grid, as medians over the states.

Open on the results page of this setup →

F2 Forward 1 plot

Accuracy on the laminar Kolmogorov transient

Forced Kolmogorov flow, forward

Relative error vs grid resolution \(N\) of the flow that the Kolmogorov force \((A\sin(\kappa y), 0)\), \(\kappa = 4\), drives from rest against linear drag, at \(t = 2\). The flow stays a shear flow, so it has the exact solution \(u = (A/\lambda)(1 - e^{-\lambda t}) \sin(\kappa y)\) with \(\lambda = \nu\kappa^2 + \alpha\). The timestep is small enough that the error is the spatial one.

Open on the results page of this setup →

F2 Forward 1 plot

Accuracy across viscosity (Taylor–Green)

Periodic box, forward

Relative error vs viscosity \(\nu\) for each solver at a fixed TGV initial condition.

Open on the results page of this setup →

F2 Cost 1 plot

Cost overview

F2 Gradient 1 plot

Gradient overview

F2 Gradient 2 plots

Gradient against finite differences

Periodic box, gradient

U-curves of finite-difference gradient error vs perturbation size \(\varepsilon\) together with subspace cosine; validates VJP correctness.

Open on the results page of this setup →

F2 Gradient 1 plot

Gradient against the analytic Taylor–Green gradient

Periodic box, gradient

Relative error and 1 − cosine of each solver’s gradient of \(J = \sum \lvert\mathbf{u}(T)\rvert^2\) with respect to the TGV initial field, against the exact gradient \(\nabla J = 2 e^{-4\nu T}\,\mathbf{u}_0\). The closed form holds for divergence-free perturbations, so each gradient is compared after projecting out its curl-free part. There is no finite-difference step to tune, but the error includes the forward discretization error.

Open on the results page of this setup →

F2 Gradient 1 plot

Viscosity gradient against the analytic gradient

Periodic box, gradient

Relative error of each solver’s derivative of \(J = \sum \lvert\mathbf{u}(T)\rvert^2\) with respect to the viscosity for the TGV, against the exact \(dJ/d\nu = -4T\,J\) with \(J = e^{-4\nu T} \sum \lvert\mathbf{u}_0\rvert^2\) on the grid. The error includes the forward discretization error.

Open on the results page of this setup →

F2 Gradient 1 plot

Gradient accuracy across the control parameter

Periodic box, gradient

Gradient norm, best-\(\varepsilon\) FD error, direction cosine, and U-curves vs the sweep parameter.

Open on the results page of this setup →

F2 Gradient 1 plot

Gradient accuracy across rollout length

Periodic box, gradient

Gradient norm, FD error, and direction cosine vs rollout horizon \(T = \mathrm{steps}\cdot dt\).

Open on the results page of this setup →

F2 Gradient 2 plots

Gradient through chained solver calls

Forced Kolmogorov flow, gradient

Finite-difference check of the gradient of a loss on 16 chained solver calls of 0.1 time units each, on the Kolmogorov flow at 64² and dt = 0.01, from a turbulent state of its ground truth plus a 1% divergence-free offset. The loss is the mean relative squared distance to the solver’s chain from that state, as in training through a solver, so its cotangents are far smaller than those of the single-call checks. Error and 1 − cos against ε, over 8 divergence-free directions.

Open on the results page of this setup →

F2 Optimization 3 plots

Inflow optimization for drag

Channel flow past a cylinder, 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 on the results page of this setup →

F3 Initial conditions 1 plot

Initial conditions overview

Triply periodic box, initial conditions

Open on the results page of this setup →

F3 Forward 1 plot

Agreement between solvers

Triply periodic box, 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 on the results page of this setup →

F3 Forward 1 plot

Agreement with the reference

Triply periodic box, 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 on the results page of this setup →

F3 Cost 1 plot

Cost overview

Triply periodic box, cost

Open on the results page of this setup →

F3 Gradient 1 plot

Gradient overview

Triply periodic box, gradient

Open on the results page of this setup →

F3 Gradient 2 plots

Gradient against finite differences

Triply periodic box, gradient

Finite-difference gradient error U-curves and direction cosine vs perturbation ε for each solver on the 3D Taylor-Green vortex IC.

Open on the results page of this setup →

F3 Gradient 1 plot

How far gradients reach in rollout length

Triply periodic box, gradient

Per-solver rollout-limit table reporting step count at first failure, failure type, and wall time per successful step.

Open on the results page of this setup →

F3 Optimization 2 plots

Initial-condition recovery (L-BFGS)

Triply periodic box, optimization

Final IC recovery error per solver from zero-initialised L-BFGS optimisation with divergence-free projection.

Open on the results page of this setup →