← All problems

Problem

ML surrogates matching high-fidelity CFD/physics solvers at a fraction of the cost

Engineering teams in automotive, aerospace, semiconductors and energy spend hours to days of HPC time per high-fidelity CFD/physics simulation, which caps how many designs they can explore. An ML surrogate that reproduces the solver's outputs on NEW geometries in seconds would let them search thousands of designs and move simulation into the inner design loop, which is the pitch behind PhysicsX, Neural Concept, Luminary and Emmi. The problem counts as SOLVED for a given class when a surrogate, scored on held-out (out-of-distribution) geometries it never saw, matches the reference solver within engineering tolerance: for example, drag coefficient error of about 1 drag count (|dCd| <= 1e-3) and surface pressure/velocity field error of a few percent on DrivAerNet++-style car bodies, or matching OpenFOAM on the full ML4CFD/AirfRANS criteria (accuracy, physical compliance, OOD generalization and speed-up). Today the best published DrivAerNet++ drag MAE is about 2.2e-3 (R2 0.978), so it is close but not yet at 1-count level, and compliance with the underlying physics (conservation laws) is still uneven.

Funding

$847.5M

Raised by the 5 companies working on it.

Prize money for solving it$0
Open competition pools$0

Why it is still open

A systematic review found 79% (60/76) of ML-for-fluid-PDE papers claiming to beat numerical methods used weak baselines, and reporting biases are widespread. Benchmarks such as ML4CFD score physical fidelity and OOD generalization separately because surrogates that look accurate on average still break conservation laws or fail on unseen geometries. Industry still validates final designs with full CFD.

Source: nature.com

Who is working on it

PhysicsX$487M AI-native engineering platform built on pre-trained 'Large Physics Models' that predict simulation outputs (CFD, structural, thermal) in seconds for aerospace, automotive, semiconductor and energy customers. InvestorsTemasek, Atomico, General Catalyst, Siemens, Applied Materials, NVentures (NVIDIA), M&G Investments, NGP
Neural Concept$138M CAD-native 3D deep-learning surrogates (geometric CNN/transformer models) that predict aerodynamic, thermal and structural fields for OEM design loops, and hold the published SOTA on DrivAerNet++ drag. InvestorsGoldman Sachs Alternatives (Growth Equity), Forestay Capital, D. E. Shaw group, Alven, HTGF (High-Tech Gruenderfonds), Aster Capital
BeyondMath$18.5M Foundational physics AI model trained on first-principles simulations to replace transient CFD solvers ('up to 1,000x faster') for automotive/F1, aerospace and semiconductor customers. InvestorsCambridge Innovation Capital, UP.Partners, Insight Partners, InMotion Ventures (JLR)
Emmi AI (acquired by Mistral AI, May 2026)$17M AB-UPT neural surrogate that scales CFD prediction to 100M+ mesh cells, NeuralWing/Neuralmould products and the Emmi-Wing dataset. Being folded into Mistral's industrial-engineering stack. Investors3VC, Speedinvest, Serena, PUSH Ventures, Mistral AI
Luminary Cloud$187M GPU-native cloud CFD solver that generates training data, plus 'Physics AI' surrogate models and open datasets such as SHIFT-SUV (built with Honda), sold for near-real-time performance prediction. InvestorsSutter Hill Ventures, N47 (formerly Next47), NVentures (NVIDIA)

Prizes

PrizeStatusPays forAmount
NeurIPS 2024 ML4CFD Competition (AirfRANS airfoil design)AwardedRanking$8k

What counts as solved

The acceptance condition, stated in Lean 4. Measurements a computer cannot produce on its own are named inputs, supplied by whoever attests them.

import Mathlib.Data.Real.Basic
import Mathlib.Algebra.Order.BigOperators.Group.Finset
import Mathlib.Algebra.Order.Field.Power
import Mathlib.Tactic.Linarith
import Mathlib.Tactic.NormNum
import Mathlib.Tactic.Positivity

/-!
# ML surrogates matching high-fidelity CFD solvers at a fraction of the cost

Concrete here: the **error and speedup metrics**. The held-out set is a finite
family of cases indexed by `Fin n`. For each case the reference solver supplies
an integrated coefficient (e.g. drag) and a sampled field; the surrogate is a
function from the case to the same shapes. Mean absolute relative coefficient
error and mean relative field L2 error are defined explicitly here, as is the
wall-clock speedup ratio, so the acceptance test is arithmetic over the numbers
in the evidence record — not an oracle call.

Opaque oracle (`HeldOut`): the geometries themselves and the reference values,
which come from a converged high-fidelity solver run (AirfRANS- or
DrivAerNet-style), the mesh-convergence claim behind them, the sealed
train/test split, and the two measured wall-clock times on declared hardware.

Who must attest: the benchmark host, publishing the split, the solver settings
and convergence evidence, the reference coefficients and field samples, and both
timings measured on the same declared hardware; plus the statement that the
surrogate's weights were frozen before the held-out geometries were released.

Units: coefficients and relative errors are dimensionless; field samples are in
the field's own units and enter only through a ratio; times in seconds per case.
Denominators are guarded: relative errors require a nonzero reference scale.

Checked with Lean 4.33.0 / Mathlib using:
  lake env lean <absolute-path-to-this-file>
-/

namespace OpenSpur.Problems.CfdSurrogate

/-- Reference data for one held-out case: an integrated coefficient, a sampled
field, and the reference field's L2 norm used as the error denominator. -/
structure Reference (m : ℕ) where
  coefficient : ℝ
  field : Fin m → ℝ
  /-- L2 norm of `field`; the attestation includes it, positivity required. -/
  fieldNorm : ℝ

/-- A surrogate prediction for one case. -/
structure Prediction (m : ℕ) where
  coefficient : ℝ
  field : Fin m → ℝ

/-- The sealed held-out set plus the two timings, all oracle-supplied. -/
structure HeldOut (n m : ℕ) where
  reference : Fin n → Reference m
  /-- Mean solver wall-clock seconds per case. -/
  solverSeconds : ℝ
  /-- Mean surrogate wall-clock seconds per case, same hardware. -/
  surrogateSeconds : ℝ
  splitSealedBeforeSubmission : Prop
  solverMeshConverged : Prop

/-- Absolute relative error of the coefficient on one case. -/
noncomputable def coeffRelError {m : ℕ} (r : Reference m) (p : Prediction m) : ℝ :=
  |p.coefficient - r.coefficient| / |r.coefficient|

/-- Relative L2 field error on one case: ‖p - r‖₂ / ‖r‖₂, with the numerator
written as a squared-sum comparison to avoid a square root. -/
def fieldRelErrorSqBound {m : ℕ} (r : Reference m) (p : Prediction m) (τ : ℝ) : Prop :=
  (∑ j, (p.field j - r.field j) ^ 2) ≤ τ ^ 2 * r.fieldNorm ^ 2

/-- Mean absolute relative coefficient error over the held-out set. -/
noncomputable def meanCoeffRelError {n m : ℕ} (H : HeldOut n m) (S : Fin n → Prediction m) : ℝ :=
  (∑ i, coeffRelError (H.reference i) (S i)) / (n : ℝ)

/-- Wall-clock speedup of the surrogate over the solver. -/
noncomputable def speedup {n m : ℕ} (H : HeldOut n m) : ℝ :=
  H.solverSeconds / H.surrogateSeconds

/-- Accuracy and cost bars. -/
structure Thresholds where
  /-- Mean relative coefficient error allowed, e.g. 0.05. -/
  maxMeanCoeffError : ℝ
  /-- Per-case relative field L2 error allowed, e.g. 0.10. -/
  maxFieldError : ℝ
  /-- Minimum wall-clock speedup, e.g. 100. -/
  minSpeedup : ℝ

/-- Acceptance predicate over a sealed held-out set. -/
def Solved {n m : ℕ} (T : Thresholds) (H : HeldOut n m)
    (S : Fin n → Prediction m) : Prop :=
  H.splitSealedBeforeSubmission ∧
  H.solverMeshConverged ∧
  0 < H.surrogateSeconds ∧
  (∀ i, 0 < (H.reference i).fieldNorm) ∧
  meanCoeffRelError H S ≤ T.maxMeanCoeffError ∧
  (∀ i, fieldRelErrorSqBound (H.reference i) (S i) T.maxFieldError) ∧
  T.minSpeedup ≤ speedup H

/-- Rung `k` halves both error bars and doubles the required speedup. -/
noncomputable def Rung (k : ℕ) : Thresholds where
  maxMeanCoeffError := 0.05 / (2 : ℝ) ^ k
  maxFieldError := 0.10 / (2 : ℝ) ^ k
  minSpeedup := 100 * (2 : ℝ) ^ k

/-- The coefficient-error bar tightens monotonically along the rungs. -/
theorem rung_coeff_antitone {j k : ℕ} (h : j ≤ k) :
    (Rung k).maxMeanCoeffError ≤ (Rung j).maxMeanCoeffError := by
  simp only [Rung]
  have hpow : (2 : ℝ) ^ j ≤ (2 : ℝ) ^ k := by
    exact pow_le_pow_right₀ (by norm_num) h
  have hj : (0 : ℝ) < (2 : ℝ) ^ j := by positivity
  apply div_le_div_of_nonneg_left (by norm_num) hj hpow

/-- The speedup bar tightens monotonically along the rungs. -/
theorem rung_speedup_mono {j k : ℕ} (h : j ≤ k) :
    (Rung j).minSpeedup ≤ (Rung k).minSpeedup := by
  simp only [Rung]
  have hpow : (2 : ℝ) ^ j ≤ (2 : ℝ) ^ k := pow_le_pow_right₀ (by norm_num) h
  linarith

end OpenSpur.Problems.CfdSurrogate

Public resources

Join

Tell us what you want settled.

Two questions. We read every one.

I am a

What are you looking to solve?

Where should we reply?

Received

That is with us.

We read every message and reply to the ones we can help.