Preprint

Surrogate Trust Audit

When Can We Trust a Neural PDE Surrogate?

All three trust indicators lost to an input-only null model on the six most shifted cells, with margins of -0.286, -0.694 and -0.077 and every interval below zero.

PDF: to addCode on GitHub

Preprint. S. Singh, 2026. Code and full audit trail are public. Not peer reviewed.

Margin against the input-only null model, six most shifted cells-0.75-0.5-0.2500 = ties the nullmargin in Spearman correlation (negative means the null did better)PDE residualfails: null better-0.286Seed-ensemble disagreementfails: null better-0.694Frozen-feature embedding probefails: null better-0.077
The preregistered test. Every indicator class sits left of zero against the input-only null, and no interval crosses it.Redrawn for this page from tables/primary_h4.csv
-0.286PDE residual against the null, 95% interval -0.333 to -0.235tables/primary_h4.csv
-0.694Seed-ensemble disagreement against the nulltables/primary_h4.csv
-0.077Frozen-feature embedding probe against the nulltables/primary_h4.csv
3 of 3Indicator classes whose preregistered test returned: fails, null bettertables/primary_h4.csv
36Grid cells, 1,360 test samples eachrun_manifest.json

The finding

Partial differential equations describe how physical things change: heat spreading, fluid moving, a wave travelling. Solving them properly is slow, so people train a neural network to stand in for the solver. It is much faster, and sometimes it is wrong in ways the output does not show.

Three signals are meant to tell you when to stop trusting it: the PDE residual of the surrogate’s own rollout, disagreement across a seed ensemble, and a frozen-feature embedding probe borrowed from the interatomic-potential literature.

Before running the grid I registered the comparison I would judge all three against: a null model of matched capacity that sees only the input, and never sees the physics, the residual or the solver. On the six most shifted cells, all three indicators lost to it, and every confidence interval sat below zero.

Why it matters

A null model is a deliberately unintelligent baseline. If it matches your clever method, the clever method is not using the information you think it is.

Losing to an input-only null means these indicators are largely reading which inputs tend to be hard, not detecting that this particular prediction is wrong. That is a real pattern, and it is useful, but it is a prior dressed up as a diagnosis.

Registering the null first is what makes that statement clean. Chosen afterwards, I would have picked a weaker baseline without noticing I was doing it.

Method

Three PDE families, advection, heat and Burgers. Two architectures, an FNO and a PINN. Six regimes running from in-distribution out to severe shift. That is 36 cells, each with 1,360 test samples.

The whole study rests on the true error being worth measuring against, so every solver was verified first.

0.00.51.01.52.0convergence orderadvection / upwind0.9926advection / lax-wendroff1.9998heat / crank-nicolson2.0001burgers / spectral1.9556
observed expected tolerance
Each solver refined on a grid and the slope measured. All four land inside the tolerance of the order the scheme should have, which is what makes the true error in the rest of the study worth measuring against.Source: tables/solver_verification.csv
A surrogate rollout against the reference solver on the same input, which is where the true error being measured comes from.Source: figures/manuscript/fig12_prediction_vs_truth.pngdownload PNG

Results

Margin against the input-only null model, six most shifted cells-0.75-0.5-0.2500 = ties the nullmargin in Spearman correlation (negative means the null did better)PDE residualfails: null better-0.286Seed-ensemble disagreementfails: null better-0.694Frozen-feature embedding probefails: null better-0.077
The preregistered test. Each bar is one indicator class measured against the input-only null on the six most shifted cells, with its 95% interval. All three sit left of zero, and no interval crosses it.Redrawn for this page from tables/primary_h4.csv
Family
0.000.250.500.751.00mean Spearman correlation with true error, severe regimeAutocorrelation lags0.992Input-only null model0.992Input features0.936Frozen-feature embedding probe0.914Random encoder probe0.826PDE residual0.706Input floor0.514Seed-ensemble disagreement0.298Amplitude quantiles probe0.288Random projections probe0.025
input-only null model trust indicator spread across the six cells
Each bar is one indicator, measured on the six most-shifted cells. Higher means the indicator tracked the surrogate's true error more closely. The null model never runs the surrogate and only sees the input, so anything at or below it is not using the surrogate to detect error. In the supervised family the null sits at 0.992.Source: tables/indicator_summary.csv, regime = severe, representability = all

The preregistered test compares each indicator class against the null on the six most shifted cells. All three return the same verdict, recorded in the results table as “fails: null better”:

The PDE residual loses by 0.286, with a 95% interval from -0.333 to -0.235. Seed-ensemble disagreement loses by 0.694. The embedding probe, the closest of the three, still loses by 0.077 with an interval from -0.119 to -0.043.

Each trust indicator against the input-only null model. The null never runs the surrogate, and still matches or beats every indicator tested.Source: figures/fig_g_null_comparison.pngdownload PNG
How well each indicator tracks true error as the inputs move further from what the surrogate was trained on. The confirmatory test is read at the most shifted end.Source: figures/fig_b_correlation_vs_shift.pngdownload PNG

Measured without shift, the same indicators look useful, which is why the shifted case is the one worth testing.

The same measurement with no shift at all. Indicators look useful here, which is part of why the shifted case is the one worth testing.Source: figures/fig_a_in_distribution_correlation.pngdownload PNG
How often each indicator reports low risk while the surrogate is in fact badly wrong. This is the failure that matters in use.Source: figures/fig_d_false_confidence.pngdownload PNG

What I checked that could have broken it

The true error is only meaningful if the reference solvers are right, so each one was refined on a grid and its convergence order measured against the order the scheme should have. All four passed inside a tolerance of 0.15: upwind at 0.993 against an expected 1.0, Lax-Wendroff at 2.000, Crank-Nicolson at 2.000, and the Burgers spectral scheme at 1.956.

The Burgers convergence study uses an exact Cole-Hopf solution rather than a fine-grid rerun of the same scheme, because comparing a scheme against itself cannot see an error it makes consistently.

The harder problem is on the surrogate side, and it limits the result rather than supporting it. The PINN barely learns: measured against simply predicting no change at all, its validation error averages 0.957, where 1.0 would mean it learned nothing useful. The FNO, by comparison, sits at 0.0002. Half of the confirmatory cells therefore describe a model close to the identity map, and I report that rather than dropping those cells.

How much of each regime the surrogate can represent at all. In the most shifted regime a large part is outside what the model can express, which limits what any indicator could do.Source: figures/manuscript/fig3_representability.pngdownload PNG
Inversion rate: how often an indicator ranks a worse prediction as safer than a better one. A coin flip is 0.5.Source: figures/fig_c_inversion_rate.pngdownload PNG

Limits

The PINN trainability problem above is the largest one. With half the confirmatory cells describing a model at or near the identity map, the confirmatory comparison is weaker than the cell count suggests.

“Reference-free” is not quite true of the embedding probe, which is fitted on data that the deployment setting would not have.

The residual indicator’s noise floor is tied to the same axis as the shift, so part of what it tracks is the regime rather than the error.

Three PDE families at one resolution and one width. Nothing here says the same holds for larger surrogates, other equations, or operator learning at scale.

From the Rigor Log

The test was wrong and the solver was right

FirstA test asserted that the residual of an exact reference step stays below 1e-3. It measured 5.3e-3, so the solver looked broken.

SecondRefinement showed the residual falls by exactly 4.00x per halving of the timestep, which is second-order convergence. I derived the closed-form law it should follow and it matched to within 1%: predicted 3.95e-3 against 3.9625e-3 measured. The solver was right and my threshold was a number with no theoretical basis.

REPORT.md, section 2.4

The deliberately dumb baseline beat everything

FirstTrust signals for a neural PDE surrogate, a fast learned stand-in for a physics solver, looked like they were detecting when the surrogate was wrong.

SecondA matched-capacity null model that sees only the input, registered as the primary comparison before any results, beat every trust signal tested.

PREREGISTRATION.md and results/tables/

A float32 wavenumber hiding inside a float64 field

FirstSpectral derivatives looked fine at a loose tolerance, and the field was float64 throughout.

SecondA test at a 1e-10 tolerance in float64 failed. torch.fft.rfftfreq follows the default dtype, so it handed back float32 wavenumbers even for a float64 field, and squaring them cost two significant digits.

REPORT.md, section 2.2

The whole Rigor Log

Files

The result artefacts these pages are built from. Every number above is read from one of these.

  • tables/primary_h4.csvThe preregistered confirmatory test: margin against the null, with intervals883 B
  • tables/h4_unsupervised_reported.csvThe same comparison for the unsupervised family, reported not confirmatory657 B
  • tables/indicator_summary.csvSpearman, Pearson and inversion rate per cell and indicator, with bootstrap intervals434 KB
  • tables/solver_verification.csvObserved convergence order per solver against the expected order274 B
  • tables/trainability.csvValidation error against a no-change baseline, per architecture and seed4 KB
  • tables/null_member_disagreement.csvSpread between null model members669 B
  • indicator_scores.csvEvery indicator score for every evaluation sample60.8 MB
  • run_manifest.jsonCell list, test size and code fingerprint3 KB
  • environment.txtPinned package versions the grid ran under963 B
  • tables/PROVENANCE.mdHow each table was produced1 KB

Stack

  • PyTorch
  • FNO
  • PINN
  • NumPy
  • SciPy
  • pytest