Stoichiometric Conservation Head
Implementation & benchmark of arXiv:2607.13360 — Data driven non-equilibrium moist phase exchanges for atmospheric convection within a discontinuous Galerkin model of the compressible Euler equations
Source paper: Data driven non-equilibrium moist phase exchanges for atmospheric convection within a discontinuous Galerkin model of the compressible Euler equations arXiv:2607.13360 ⓘ · analyzed Aug 30, 2026
AI-generated research hypothesis, automatically tested. Not peer-reviewed.
Idea description
Replace a network head that independently predicts coupled physical source terms with a low-dimensional rate head followed by a fixed stoichiometric map. This makes conservation of total mass or other linear invariants exact by construction and leaves the network responsible only for learning the kinetics of admissible exchange channels.
Formulas
Mathematical statement
The paper's learned map is $(\rho,\eta,q_v,q_l,q_i)\mapsto(\tilde B,\tilde C,\tilde D)$, where $B,C,D$ are pairwise phase-exchange rates. The source operator places equal and opposite coefficients in the phase rows, so every transfer preserves the sum of the participating phase masses. Abstract this as a stoichiometric matrix $N\in\mathbb{R}^{n\times m}$ whose column $s_j$ contains the signed additions and removals caused by transfer channel $j$. With rate vector $r\in\mathbb{R}^m$, the source is $\dot z=Nr$. Any invariant $c^{\top}z$ satisfying $c^{\top}N=0$ is conserved exactly, independently of network weights. For vapour-liquid-ice exchange, $N=[(-1,1,0)^{\top},(-1,0,1)^{\top},(0,-1,1)^{\top}]$, corresponding to $B,C,D$; therefore $[1,1,1]N=0$. Nonnegative rates are obtained with $r=\operatorname{softplus}(f_\theta(x))$, and donor availability can be enforced by multiplying each rate by the donor mass fraction.
Implementation notes
Apply this to the final source-term head of any network predicting coupled quantities such as reaction kinetics, mixture composition changes, material exchanges, or multi-species dynamics. Let the MLP consume the local state $x$ and output three unconstrained logits $(u_B,u_C,u_D)$. Convert them to rates using $r_B=\operatorname{softplus}(u_B)q_v$, $r_C=\operatorname{softplus}(u_C)q_v$, and $r_D=\operatorname{softplus}(u_D)q_l$, with nonnegative state variables clamped by a small epsilon for numerical safety. Multiply the rate vector $r$ by the fixed matrix $N$ to produce all phase derivatives; never expose independent phase derivatives as trainable outputs. If the full state includes density, energy, or momentum, augment each column of $N$ with the corresponding mass and energy bookkeeping entries, and compute any thermodynamic entropy component analytically from the predicted rates. For a finite time step $h$, use $z_{t+1}=z_t+hNr$ and project only for floating-point roundoff, not as the primary conservation mechanism. Compute the nullspace of $N^\top$ once with an SVD to enumerate all exact linear invariants and assert that $\|N^\top c\|<10^{-8}$. Train with ordinary trajectory MSE plus optional positivity penalties, and compare against a baseline that predicts phase derivatives independently. The first cheap experiment is a three-species synthetic reaction dataset generated from known nonlinear rates, followed by a small neural ODE on a 1D advection-reaction problem. Evaluate validation error, negative-concentration frequency, invariant drift, and rollout stability. The expected signal is zero systematic mass drift and fewer invalid states at equal parameter count, with equal or lower sample complexity because the learner cannot waste capacity violating conservation.
Verification
Stage 1 · Toy mechanism gate: Passed ✓
Stage 2 · Mechanism transferred to benchmark: Confirmed ✓
Stage 2 · Practical benchmark result: Inconclusive
Methodology: 8 paired seeds, permutation test (p<0.05) against a learning-rate-tuned baseline. How verification works
Stage 1 — Mechanism check agent confidence 9/10
Built a fixed stoichiometric conservation head with softplus rates and donor-availability gating, alongside an equal-size independent derivative baseline. The quantitative predictions were confirmed: ||N^T c||=0, constrained Euler mass drift stayed at 5.4e-20 to 4.4e-16 across h=1e-4..1, and independent Gaussian drift had fitted slope 1.3809 versus predicted 1.382. The mini-experiment also showed derivative MSE 0.000227 versus 0.003140, zero versus 19 negative rollout entries, and mass drift 1.2e-7 versus 0.0317; this is a clear mechanism-level win, though it is only a small synthetic local-dynamics test.
- Agent confidence
- 9/10
- Baseline
- IndependentHead: 171 parameters, derivative MSE=0.0031402, negative rollout entries=19, max mean mass drift=0.03172
- Idea
- StoichHead: 171 parameters, derivative MSE=0.0002265, negative rollout entries=0, max mean mass drift=1.19e-7; exact algebraic invariant residual ||N^T[1,1,1]||=0
Limitations: Not tested on the original paper dataset, advection-reaction dynamics, thermodynamic energy/momentum bookkeeping, long-horizon stability, or larger architectures. The independent baseline was trained on local derivative supervision rather than a full neural-ODE trajectory objective.
How to run: python3 experiment.py
Stage 2 — Benchmark vs. tuned baseline (arXiv:2607.13360)
Beats the tuned baseline by 41.5% (p=0.0081, wins 8 / 8 paired seeds; metric: lower is better).
- Benchmark
- Conservation_field
- Model
- local_shared_mlp
- Paired seeds
- 8
- Baseline mean
- 0.0004
- Idea mean
- 0.0003
- Effect (Δ)
- -0.0002 (−41.5%; negative = idea better)
- Wins
- 8 / 8 paired seeds
- p-value
- 0.0081 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- n/a
- Mechanism
- Confirmed ✓
- Practical effect
- Inconclusive
- Baseline tuning
- swept over 3 configs
The result uses the existing conservation_field custom benchmark rather than the built-in pendulum track because the built-in track does not contain coupled conserved phase-mass structure. It tests normalized eight-cell field prediction, not full neural-ODE trajectory rollout, energy/momentum bookkeeping, PDE transport, or larger real-world datasets; the custom track implementation itself is read-only bench code supplied by the harness.
How to run: python3 bench_run.py
Verdict computed by deterministic test code from paired-seed statistics — not by the language model.
Stage 2 — Benchmark latest Worked ✓
Agent confidence: 9/10
Implemented and evaluated a stoichiometric conservation head against an independently predicting head on the structurally matched conservation_field benchmark. The idea achieved lower test MSE (0.0002507 vs 0.0004289), won all 8 paired seeds, and the permutation p-value was 0.0081, satisfying the benchmark's significant-win criterion. The trained-model signature confirmed near-zero total-mass error for the idea (4.18e-8 mean absolute) versus 0.0188 for baseline, with exact stoichiometric nullspace residual 0.
- Baseline
- Best lr=0.01; 8-seed test MSE mean=0.0004289101, std=0.0000700910
- Idea
- Best lr=0.01; 8-seed test MSE mean=0.0002507019, std=0.0000567722; paired delta=-0.0001782082; wins=8/8; permutation p=0.0081; mechanism mean absolute mass-sum error=4.1835e-08 vs baseline=0.0188152
Benchmark result
Beats the tuned baseline by 41.5% (p=0.0081, wins 8 / 8 paired seeds; metric: lower is better).
- Benchmark
- Conservation_field
- Model
- local_shared_mlp
- Paired seeds
- 8
- Baseline mean
- 0.0004
- Idea mean
- 0.0003
- Effect (Δ)
- -0.0002 (−41.5%; negative = idea better)
- Wins
- 8 / 8 paired seeds
- p-value
- 0.0081 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- n/a
- Mechanism
- Confirmed ✓
- Practical effect
- Inconclusive
- Baseline tuning
- swept over 3 configs
The result uses the existing conservation_field custom benchmark rather than the built-in pendulum track because the built-in track does not contain coupled conserved phase-mass structure. It tests normalized eight-cell field prediction, not full neural-ODE trajectory rollout, energy/momentum bookkeeping, PDE transport, or larger real-world datasets; the custom track implementation itself is read-only bench code supplied by the harness.
How to run: python3 bench_run.py
Artifacts
- bench_report.json 4.0 KB View Raw
- bench_run.py 5.2 KB View Raw
- experiment.py 4.0 KB View Raw
- report.md 1.5 KB View
- report_bench_2026-08-31T014951.md 4.0 KB View
- results.json 1.9 KB View Raw