Skip to content

What symmetry buys a learned turbulence model

One piece of work, three tellings — the paper in full, the talk in 15 minutes, and this post to play with:

Approaching the optimal closure: equivariance, inductive bias, and Reynolds-number generalization in data-driven LES
Approaching the optimal closure: equivariance, inductive bias, and Reynolds-number generalization in data-driven LES
Syver Døving Agdestein and Benjamin Sanderse · arXiv preprint · 2026
Approaching the optimal closure: Equivariance, inductive bias, and Reynolds-number generalization in data-driven LES
Approaching the optimal closure: Equivariance, inductive bias, and Reynolds-number generalization in data-driven LES
WCCM–ECCOMAS · Munich, Germany · July 22, 2026

Everyone building neural closures for turbulence has heard the advice: bake the symmetries of the Navier–Stokes equations into your network, and it will be more accurate and generalize better. It sounds so reasonable that it is rarely tested. So we tested it — three networks, same inputs, same outputs, same training data, from "no constraints at all" to "exactly equivariant by construction". This post is the paper with the knobs exposed.

DNS — every eddy filtered — what LES sees
One velocity component on a slice through the paper's turbulent flow — drag the divider. Left: the direct numerical simulation (DNS) that resolves every eddy. Right: the same field after filtering — all an affordable simulation gets to see. The closure's job is everything that just disappeared.

If you only remember three things:

  1. All three architectures — constrained or not — converge to the same accuracy, and that shared floor is the optimal one-point closure, measurable directly from data with a histogram.
  2. Symmetry constraints don't lower the floor. They buy the trip to it with 25× fewer parameters, reproducibly, where the unconstrained network is a lottery.
  3. Generalizing across Reynolds numbers was less about architecture than about one missing input: a filter-scale Reynolds number.

Act I The world below the cut

Simulating every eddy (direct numerical simulation, DNS) is gloriously accurate and hopelessly expensive. Large-eddy simulation (LES) evolves a filtered flow on an affordable grid, and pays with an unclosed term: the sub-filter stress τ(u), the effect of everything the filter erased. A closure model m(u¯) must predict that stress from the resolved field alone. Here is the bargain, on our actual data — drag the cut:

94.3%of the kinetic energy resolved
0.09%of the DNS degrees of freedom kept
10⁻⁷ 10⁻⁵ 10⁻³ 10⁻¹131030100270wavenumber k — smaller eddies to the right (log scale)energy E(k)resolvederased by the filter— the closure must fake all of this filter cut

The measured energy spectrum of the paper's DNS (forced isotropic turbulence). Drag the cut: an LES keeps only the eddies to the left. Because energy piles up at the large scales, even a brutal filter keeps almost all of it — what it loses is the fine-scale activity that drains energy from the scales you keep. That drain is the sub-filter stress the closure must supply.

Classical closures (Smagorinsky, Clark, …) are physics-derived guesses at that erased activity. The modern alternative is to train a neural network on filtered DNS. This paper is about what happens when you do that with — and without — symmetry constraints.

Act II What a closure can promise

48
rotations + reflections survive the grid
of the infinitely many in the continuum — the octahedral group
≈ 7%
equivariance violation of our trained, unconstrained MLP
0
accuracy cost of enforcing the surviving symmetries

The Navier–Stokes equations don't care how you orient your axes: rotate the flow, and the physics — including the exact sub-filter stress — rotates with it. A closure respects this if predicting then rotating equals rotating then predicting: equivariance. Try to break it (the mismatch is computed honestly from the two paths, not scripted):

Rotate the world by
Closure
Rotated velocity field
Predict, then rotate
Rotate, then predict (outline: other path)

Difference between the two paths: 0 (the two orders commute)

The second toggle is what an unconstrained network is free to learn: perfectly fine on the training data, but reading tensor components off a fixed coordinate frame — a preferred direction the physics doesn't have. The toy exaggerates; our actual trained MLP violates equivariance by a subtler but very measurable ≈ 7%.

The grid breaks the circle

The continuous equations are symmetric under every rotation — but your simulation lives on a grid. Drag the slider and watch which rotations map the grid onto itself:

✗ 99% of the rotated points miss the grid — a grid-sampled field cannot realize this rotation exactly.

Only multiples of 90° and mirror flips survive: in 3D, the 48-element octahedral group. A closure acting on grid data can be exactly equivariant to those 48 — and to no more. Remember 48; it returns below as the width of a network layer. The same audit, for every symmetry of the equations:

Survive the grid ✓
Translations, time shifts, Galilean frame changes, and the 48 octahedral roto-reflections. Exact symmetries of the discrete equations — enforcing them costs nothing.
Survive partially ~
Scaling: no fixed grid maps to itself under rescaling, but a closure can still transform correctly across rescaled systems. The viscous part of this returns in Act IV.
Broken ✗
Continuous rotations (reduced to the 48) and accelerating frames (broken by the fixed forcing). A closure can still enforce them as a continuum ideal — should it?

Three networks, one contract

All three data-driven closures sign the same contract — local, normalized gradient in, dimensionally consistent stress out:

m(A¯)=Δ2|A¯|2f(A¯/|A¯|),

with filter width Δ and velocity-gradient tensor A¯. Gradients as inputs make every model Galilean-invariant for free; the prefactor gives the output the units and scaling of a stress. The three differ only in how they treat rotations:

MLP — enforce nothing
A plain multi-layer perceptron, 9 gradient components in, 6 stress components out. Whatever equivariance it has, it learned from data. The control group.
G-CNN — constrain the weights
Each hidden layer carries 48 copies of its channels, one per octahedral element, weights tied so that rotating the input provably permutes the copies. Exactly equivariant in floating point.
TBNN — constrain the features
The stress is expanded in 7 tensors that rotate correctly no matter what; the network only predicts their 7 scalar coefficients from 5 rotation-invariant inputs.

Constrain the architecture, constrain the representation, or constrain nothing: the two constrained routes reach exact equivariance from opposite directions — and, it turns out, the same destination.

Act III Same floor, very different price

0.439
the error floor nobody gets below
measured from data with a histogram — no network, no training
25×
more parameters before the MLP catches up
≈ 3000 vs ≈ 120 — and a seed lottery on the way
0.6–2.3%
how close all three saturate to the floor

Train all three at a range of sizes; plot error against parameter count:

MLP (unconstrained)G-CNN (equivariant)TBNN (tensor basis)optimal closure (measured)
0.40.50.60.70.80.91.01003001k3ktrainable parameters (log scale)no modeldyn. SmagorinskyClarkoptimal closuresame error, 25× fewer parameters

Relative error of the predicted sub-filter stress against the exact one, on held-out snapshots. The dashed black line is the training-free conditional-mean estimate of the best possible one-point closure. Whiskers span ± one standard deviation over five training seeds. Hover or tab across the columns for exact values.

Data table
Parameters (≈)MLP (unconstrained)G-CNN (equivariant)TBNN (tensor basis)
1200.896 ± 0.0140.452 ± 0.0060.445 ± 0.001
4000.675 ± 0.0190.449 ± 0.0010.445 ± 0.001
12000.460 ± 0.0010.449 ± 0.0010.446 ± 0.001
30000.449 ± 0.0000.449 ± 0.0010.446 ± 0.000
no model1.000
dyn. Smagorinsky0.964
Clark0.466

Two things to see. The constrained models are already saturated at ~120 parameters — their built-in structure leaves that little to learn — while the MLP starts worse than the 50-year-old Clark model and needs ~3000 to catch up, with an order-of-magnitude wider seed-to-seed spread on the way. And the more interesting one: nobody gets below the dashed line.

Build the best possible closure yourself

That dashed line is not a fit to the networks — it is measured independently. The best possible one-point predictor is a conditional average: over all flow states sharing this local gradient, the mean stress (the optimal closure of Langford & Moser). Averages need no training. Sort the data into bins and watch it appear:

8bins
25%of the variance explained by the binned mean
backscatter: energy flowing the “wrong” way -0.040.000.040.080.120.10.30.50.70.9one rotation-invariant of the resolved gradient, tr S̄² ∕ |Ā|² sub-filter energy transfer Π (normalized)

Every gray dot is one grid point of a held-out DNS snapshot: local energy transfer Π against one invariant of the resolved gradient. Slide the bins: sorting the points and averaging within each bin — a histogram, no training — makes the conditional mean appear. It converges after a handful of bins, and the wide cloud around it never shrinks: that residual is information the filter destroyed, and no pointwise model, neural or otherwise, can get it back.

The paper's version bins all five invariant inputs instead of one: 65 536 bins land at an error of 0.439 — and a single bin, i.e. seven constant coefficients, already lands at 0.442. The saturated networks sit within 0.6–2.3% of that floor. The remaining 44% error is not a failure of the networks: filtering destroys information, and no function of a single-point gradient — neural or otherwise — can recover it.

Footnote we enjoyed: equivariance for free, after the fact

Averaging the trained MLP's predictions over the 48 octahedral elements makes it exactly equivariant at zero accuracy cost. Its 7% symmetry violation was wasted degrees of freedom, not useful ones — the unconstrained optimum was already statistically equivariant, because the training data was.

Energy flows both ways

A-priori stress error is a laboratory metric. Plugged into an actual LES (the a posteriori toggle above), the learned closures tie at a solution error of ≈ 0.35, ahead of Clark (0.36), dynamic Smagorinsky (0.39), and no model (0.43). But the aggregate number hides the most physical difference — what each closure does with energy:

exact stress (reference)dyn. SmagorinskyClarkTBNN (learned)
← backscatterforward transfer →0.00010.011100-0.20.00.20.40.60.8 pointwise SFS dissipation rate εΔ

Distribution of the pointwise sub-filter dissipation rate over all test snapshots (kernel density estimate, log scale), every closure evaluated on the same filtered DNS fields. Negative values mean energy flowing back from small to large scales. Hover for exact densities.

The exact stress mostly drains energy from the resolved scales, but at 22% of grid points it pushes energy backwardsbackscatter, the shaded region. Eddy-viscosity models stop dead at zero, by construction. The learned closure reproduces both tails, yet covers only about half the reference backscatter fraction: the fingerprint of having learned a conditional average. Means are milder than samples.

Act IV One number to rule the Reynolds number

1.35× → 0.75×
dissipation drift of a Reynolds-blind closure
over- to under-dissipative as the flow leaves the training band
1
extra input that fixes the calibration
the only scaling-invariant scalar available: a filter-scale Reynolds number
2.07× → 1.80×
what it recovers on a truly different flow
Taylor–Green vortex, tightest filter — regime ≠ flow kind

The quiet limitation of the contract in Act II: it contains no viscosity. The closures are Reynolds-blind — their dissipation calibration is pinned to the training regime. The symmetry analysis itself predicts the fix: the full scaling symmetry of Navier–Stokes involves the viscosity, and the only scaling-invariant scalar you can build from the available quantities is a filter-scale Reynolds number,

ReΔ=Δ2A¯ν,

where A¯ is a global norm of the resolved gradient — one number per flow, unlike the pointwise |A¯| in the contract.

Train across viscosities and filter widths, with and without ReΔ as one extra input; test on held-out Reynolds numbers well outside the training range. Flip the toggle:

MLPG-CNNTBNNtraining range
0.600.801.001.251.50reference2004008001600 filter-scale Reynolds number ReΔ (log scale)

Median sub-filter dissipation divided by the true value (1 = perfectly calibrated, log scale). Reynolds-blind closures slide from over- to under-dissipation as the test Reynolds number grows; with the Reynolds input they hold their calibration. Faint lines show the +Re counterpart. The shaded band is the range of ReΔ seen during training; everything to its right is extrapolation. Hover for exact values.

Blind, the story is a slide from over- to under-dissipative. With the one extra input, calibration holds out into extrapolation. Meanwhile the stress error tab barely moves: the tensor structure of the stress is nearly Reynolds-independent — what changes is only how much energy lives below the filter, and one scalar carries exactly that. Notice the three architectures never separate: the gain comes from the input, not from equivariance.

A flow it has never seen

A decaying Taylor–Green vortex: laminar roll-up, transition, turbulent decay — nothing like the forced training soup. Vorticity on a slice, from the paper's out-of-distribution study.

The honest caveat. On this flow the blind closures over-dissipate by ~2×, and ReΔ recovers only part of it (2.07× → 1.80× at the tightest filter): a single global scalar tells the closure which Reynolds regime it is in, not which kind of flow. The learned closures do stay stable and keep the lowest errors through the transition — while Clark diverges outright at the wider filters.

Epilogue The verdict

Equivariance was advertised as…What the controlled test says
more accurateall three architectures converge to the same measurable floor
better at generalizingcrossing Reynolds numbers came from one extra input, not the architecture
parameter-efficient: saturated at ~120 parameters, 25× fewer than the MLP
reliable: reproducible across seeds where the small MLP is a lottery
physically consistent: exact in floating point — no spurious frame-dependent forces

If you are building a closure, the recipe this leaves behind:

  • Measure your floor first. The conditional-mean estimate costs nothing and tells you the best any pointwise model can do before you design one.
  • At the floor, capacity is wasted. The only way down is richer inputs — neighborhoods, history, or scalars like ReΔ that carry genuinely new information (the +Re TBNN measurably dips below the one-point floor out of distribution).
  • Buy symmetry for the right reasons. Efficiency, reproducibility, and physical consistency are real currencies — just different ones than advertised.
A closure that knows what it's missing works where it has never been.

Every number and curve above is the exact evaluation data of the paper — forced isotropic turbulence at 8103 DNS resolution, closures trained across three viscosities and three filter widths, five training seeds each — extracted from the archived result files of the companion code by the same scripts that drive my ECCOMAS 2026 slides. The paper additionally reports the equivariance errors, timing, energy spectra, and the full Taylor–Green study.

Last updated:

© 2026 Syver Døving Agdestein ·rss·source