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. A flag or a slow time here says how this implementation behaves on this setup, not how good the underlying software is. The Effort column shows how far each wrapper had to go beyond documented use, and Deviations where it runs a substitute for part of the setup. Solvers that pass the same checks can differ a lot in how much work a new setup takes, so try the alternatives before committing to one.

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 each gate’s headline numbers and the reasons for any flag; the list under each table spells the reasons 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; a solver sits in the group its cost results were measured on, and a note marks results that ran on another device than the solver now targets. A ≈ marks a gap to the fastest solver that is no larger than twice the spread (standard deviation) of the two solvers’ timed trials, so the two cannot be told apart on this run. Hover a cost for the mean, its spread, the number of trials and the first call, which includes compilation and setup. 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, blocked 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. Resource limits counts the sweeps a solver completed only up to some size or rollout length before running out of memory or time; where those limits lie depends on the hardware.
  • Effort: the highest level among the interventions a solver needs on that setup, from L0 (documented options) and L1 (undocumented configuration) to L2 (user code on the library’s public primitives) and L3 (changes to the solver itself). A filter above the tables hides solvers above the level you are willing to work at yourself.
  • Deviations: where a solver runs a substitute for the prescribed setup, such as a different outflow condition, with its effect on the results.

The Solver Reference lists every intervention with its reason, evidence and upstream issue, including those nobody has a reason for yet.

State Meaning
✓ Pass Every gate experiment met its criteria.
! Borderline A gate was flagged: it ran, but missed its criteria. A superscript i means every flag has a documented cause, often a property of the method or of the comparison rather than of the implementation; hover for the explanation.
✗ Fail A gate errored or produced no valid result.
⊘ Blocked The gates are excluded for a recorded reason that may be lifted: the solver is unstable on them, they are infeasible within the time or memory budget, an upstream bug stops them, or the wrapper does not implement them yet. The cell names the reason.
— 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, analytic_check, analytic_check_nu, param_sweep —
F2 · Channel flow past a cylinder cylinder — drag_opt
F2 · Forced Kolmogorov flow kolmogorov_laminar, kolmogorov chain_fd_check —
F3 · Triply periodic box (Taylor–Green) agreement, baseline, physical_laws fd_check recovery

Some criteria are absolute: an error bound against an analytic solution or a converged reference run, an observed order of convergence, or a minimum agreement with finite differences. Others compare a solver with the other solvers on the same experiment, for example an error more than three times the median of its peers. A flag on a relative criterion says that a solver is an outlier among its peers, not that it misses an accuracy the task needs. The thresholds 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 costReliabilityEffortDeviations
GPU solvers · cost relative to the fastest GPU solver at N=1024, measured on Tesla T4
torch-femPassPassPass1× (fastest)1× (fastest)14/14 okL0—
JAX-FEMPassPassPass13×18×14/14 oknone—
CPU solvers · cost relative to the fastest CPU solver at N=1024
FiredrakePassPassPass1× (fastest)1× (fastest)14/14 oknone—
FEniCSPassPassPass1.2×1.3×14/14 okL3—
deal.IIPassNot supportedNot supported3.1×—7/7 oknone—

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 costReliabilityEffortDeviations
GPU solvers · cost relative to the fastest GPU solver at N=128, measured on Tesla T4
torch-femPassPassPass1× (fastest)1× (fastest)10/10 okL0—
FEniCSGPU runPassPassPass5.3×9.9×10/10 oknone—
JAX-FEMPassPassPass17×18×10/10 oknone—
CPU solvers · cost relative to the fastest CPU solver at N=128
TopOpt.jlPassPassPass1× (fastest)1× (fastest)10/10 oknone1
FiredrakePassPassPass3.6×7.0×10/10 oknone—
deal.IIPassNot supportedNot supported4.5×—5/5 oknone—

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 costReliabilityEffortDeviations
GPU solvers · cost relative to the fastest GPU solver at N=256, measured on Tesla T4
jax-cfdPassPass1× (fastest)≈ 1.1×19/19 oknone—
Warp-NSPassPass3.2×5.6×19/19 okL2—
XLBPassPass8.4×23×19/19 okL21
INS.jlPassPass≈ 9.0×14×19/19 oknone—
PhiFlowPassPass722×947×19/19 okL3—
ExponaxBorderlineiPass1.1×1× (fastest)18/19 ok1 flaggedL2—
PICTBorderlineiPass161×146×18/19 ok1 flaggedL0—
CPU solvers · cost relative to the fastest CPU solver at N=256
OpenFOAMBorderlineNot supported1× (fastest)—8/9 ok1 flaggedL0—

Passes every check: jax-cfd, Warp-NS, XLB, INS.jl, PhiFlow.

Flags and exclusions (3)
  • Exponax · 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)
  • 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)
  • OpenFOAM · forward/tgv_nu_sweep · flagged — error 0.00645 at sweep=0.0001 is 4.2× peer median (0.00154); threshold k=3.0
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
SolverForwardOptimizationReliabilityEffortDeviations
GPU solvers
INS.jlPassPass2/2 okL2—
PhiFlowPassPass2/2 okL2—
Warp-NSPassPass2/2 okL2—
XLBPassPass2/2 oknone1
PICTPassInfeasible1/2 ok1 infeasibleL21
ExponaxNot supportedNot supported—none—
jax-cfdNot implementedNot implemented0/2 ok2 not implementednone—
CPU solvers
OpenFOAMPassNot supported1/1 okL0—

Passes every check: INS.jl, PhiFlow, Warp-NS, XLB.

Flags and exclusions (3)
  • PICT · optimization/drag_opt · infeasible — 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
  • jax-cfd · forward/cylinder · not implemented — jax-cfd 0.2.1 cannot express the channel through its API. 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. Running it would take a hand-written convection, inlet and outlet conditions and obstacle on jax-cfd's grid primitives, which this tesseract does not have
  • jax-cfd · optimization/drag_opt · not implemented — jax-cfd 0.2.1 cannot express the channel through its API. 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. Running it would take a hand-written convection, inlet and outlet conditions and obstacle on jax-cfd's grid primitives, which this tesseract does not have
Not supported (2 solvers)
  • OpenFOAM · 1 experiments — 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
F3

Triply periodic box (Taylor–Green)

Navier–Stokes (3D)
Optimization task: initial-condition recoveryResults page
SolverForwardGradientOptimizationForward costVJP costReliabilityEffortDeviations
GPU solvers · cost relative to the fastest GPU solver at N=64, measured on Tesla T4
INS.jlPassPassPass1× (fastest)1× (fastest)16/16 ok1 resource limitnone—
XLBPassPassPass1.7×≈ 1.4×16/16 ok1 resource limitL21
ExponaxPass1/5PassPass——8/16 ok8 not runnone—
jax-cfdPass1/5PassPass——8/16 ok8 not run1 resource limitnone—
PhiFlowPass1/5PassPass——8/16 ok8 not run1 resource limitL3—
PICTPass1/5PassPass——8/16 ok8 not run1 resource limitnone—
Warp-NSPass1/5PassPass——8/16 ok8 not run1 resource limitL2—
CPU solvers · cost relative to the fastest CPU solver
OpenFOAMPass1/5Not supportedNot supported——1/7 ok6 not runnone—

Passes every check: INS.jl, XLB, Exponax, jax-cfd, PhiFlow, PICT, Warp-NS.

Flags and exclusions (46)
  • Exponax · forward/agreement · not run
  • Exponax · forward/physical_laws/vs_N · not run
  • Exponax · forward/physical_laws/vs_nu · not run
  • Exponax · forward/physical_laws/vs_steps · not run
  • Exponax · cost/spatial_cost · not run
  • Exponax · cost/temporal_cost · not run
  • Exponax · cost/vjp_cost/by_N · not run
  • Exponax · cost/vjp_cost/by_steps · not run
  • jax-cfd · forward/agreement · not run
  • jax-cfd · forward/physical_laws/vs_N · not run
  • jax-cfd · forward/physical_laws/vs_nu · not run
  • jax-cfd · forward/physical_laws/vs_steps · not run
  • jax-cfd · cost/spatial_cost · not run
  • jax-cfd · cost/temporal_cost · not run
  • jax-cfd · cost/vjp_cost/by_N · not run
  • jax-cfd · cost/vjp_cost/by_steps · not run
  • PhiFlow · forward/agreement · not run
  • PhiFlow · forward/physical_laws/vs_N · not run
  • PhiFlow · forward/physical_laws/vs_nu · not run
  • PhiFlow · forward/physical_laws/vs_steps · not run
  • PhiFlow · cost/spatial_cost · not run
  • PhiFlow · cost/temporal_cost · not run
  • PhiFlow · cost/vjp_cost/by_N · not run
  • PhiFlow · cost/vjp_cost/by_steps · not run
  • PICT · forward/agreement · not run
  • PICT · forward/physical_laws/vs_N · not run
  • PICT · forward/physical_laws/vs_nu · not run
  • PICT · forward/physical_laws/vs_steps · not run
  • PICT · cost/spatial_cost · not run
  • PICT · cost/temporal_cost · not run
  • PICT · cost/vjp_cost/by_N · not run
  • PICT · cost/vjp_cost/by_steps · not run
  • Warp-NS · forward/agreement · not run
  • Warp-NS · forward/physical_laws/vs_N · not run
  • Warp-NS · forward/physical_laws/vs_nu · not run
  • Warp-NS · forward/physical_laws/vs_steps · not run
  • Warp-NS · cost/spatial_cost · not run
  • Warp-NS · cost/temporal_cost · not run
  • Warp-NS · cost/vjp_cost/by_N · not run
  • Warp-NS · cost/vjp_cost/by_steps · not run
  • OpenFOAM · forward/agreement · not run
  • OpenFOAM · forward/physical_laws/vs_N · not run
  • OpenFOAM · forward/physical_laws/vs_nu · not run
  • OpenFOAM · forward/physical_laws/vs_steps · not run
  • OpenFOAM · cost/spatial_cost · not run
  • OpenFOAM · cost/temporal_cost · not run
Resource limits (6)

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; the limit shows how far the solver goes on this hardware.

  • INS.jl · gradient/horizon_sweep_limits · from steps=5120
  • XLB · gradient/horizon_sweep_limits · from steps=320
  • jax-cfd · gradient/horizon_sweep_limits · from steps=5120
  • PhiFlow · gradient/horizon_sweep_limits · from steps=160
  • PICT · gradient/horizon_sweep_limits · from steps=10240
  • Warp-NS · gradient/horizon_sweep_limits · from steps=160
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

Analytic Gradient Check

Navier–Stokes (2D) · 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 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 →