Skip to content

SCPN Fusion Core v2.0.0 — Riccati H-inf, Gyro-Bohm Transport, Real EFIT Validation

Choose a tag to compare

@anulum anulum released this 17 Feb 14:45
· 1375 commits to main since this release

SCPN Fusion Core v2.0.0

First production release with honest, externally-defensible metrics.

What Changed from v1.0.2

Area v1.0.2 v2.0.0 Impact
Equilibrium solver SOR only Multigrid V-cycle (default) 3-5x faster convergence
Transport model Constant chi_base=0.5 Gyro-Bohm + EPED pedestal Physics-based, calibrated
H-infinity controller Fake (fixed gains) Riccati ARE synthesis Proven robust stability
Disruption predictor 500 synthetic shots 10,000 synthetic + 16 reference shots Higher recall
Disruption prevention 0% >60% (SNN on reference data) First nonzero rate
Real-shot validation None 18-file equilibrium + 20-shot ITPA + 16-shot disruption Externally defensible
GEQDSK dataset 8 SPARC only 8 SPARC + 100 multi-machine Broader coverage
IPB98 uncertainty None Log-linear error propagation 95% CI quantified
HIL demo None Register map + TMR simulation FPGA-ready path
Petri net verification Informal Constructive boundedness + liveness Documented proofs

Heating & Neutronics

Metric Value Unit
Best Q (ITER-like scan) 98.07
Q >= 10 achieved Yes
P_fus at best Q 1785.9 MW
ECRH absorption 99.0 %
Tritium Breeding Ratio 1.6684

Disruption & Control — Fault Injection (50-run ensemble)

Metric Value Unit
Mean halo current peak 2.242 MA
P95 halo current peak 3.328 MA
Mean RE current peak 13.726 MA
P95 RE current peak 15.495 MA
Passes ITER limits No
HIL control-loop P50 latency 23.0 us
HIL control-loop P95 latency 97.9 us
HIL control-loop P99 latency 269.7 us
Sub-ms achieved Yes
Total loop latency 38.8 us
HIL FPGA latency (simulated) 380 ns
TMR bit-flip recovery <16 ns

H-Infinity Controller

Metric Value
Synthesis Doyle-Glover-Khargonekar ARE
Guaranteed robustness <=20% multiplicative uncertainty
Outperforms PID on VDE Yes
Verification Riccati residual + stability regression lock

Controller Comparison (100-episode campaign)

Controller Mean Reward P95 Latency (us) Disruption Rate
PID -0.052 145 2.0%
H-infinity -0.038 162 1.0%
MPC -0.029 890 0.5%
SNN -0.045 78 3.0%

No single controller wins across all objectives: SNN is fastest (78 us), MPC has the best disruption rate (0.5%), H-infinity is the strongest robust middle ground.

Transport Metrics (Disambiguated)

Lane Metric Value
Physics transport (Gyro-Bohm + EPED) tau_E RMSE 0.1287 s
Physics transport (Gyro-Bohm + EPED) tau_E relative RMSE 28.6%
Physics transport (Gyro-Bohm + EPED) tau_E mean abs. relative error 32.5%
Neural transport MLP surrogate tau_E RMSE % 13.5%

The 13.5% value belongs to the neural surrogate fit. The 28.6%/32.5% are full physics-transport validation. They are not interchangeable.

Confinement Scaling (IPB98(y,2))

Metric Value
ITER design-point relative error -0.96%
ITPA 20-shot mean abs. relative error 32.5%
tau_E 2-sigma coverage >=80%

External Validation

Metric Our Value Published Agreement
ITER beta_N (0-D) 0.070 1.8 -96% (miscalibrated)
SPARC beta_N (0-D) 0.583 1.0 -42% (miscalibrated)
ITER q95 3.0 3.0 Exact
JET DTE2 Pfus 58 MW 59 MW 1.7%
Bootstrap fraction 0.34 0.30-0.40 Within range
Spitzer eta at 1keV 1.65e-8 1.65e-8 Exact

Disruption Predictor — Real-Shot Replay (16 DIII-D profiles)

Metric Value
Recall >= 60%
False positive rate 90%
Validation status PARTIAL_PASS

Synthetic-test FPR (0.08) does NOT transfer to real shots. Threshold tuning planned for v2.1.

Surrogates

Model Metric Value
MLP (ITPA H-mode) RMSE 0.0607 s (13.5%)
FNO turbulence Relative L2 0.79 (EXPERIMENTAL)

Solver Performance (Rust vs Python)

Solver Grid Python Rust Speedup
Vacuum field 129x129 178.5 ms 7.8 ms 22.9x
GS Picard (10 iter) 65x65 312.0 ms 14.5 ms 21.5x
Multigrid V-cycle 129x129 ~800 ms ~35 ms ~23x

Test Coverage

Suite Count
Python (pytest) 1136 passing
Rust (cargo test) 200+ passing

Known Limitations (v2.0.0)

Issue Severity Fix Target
beta_N: ITER -96%, SPARC -42% Critical v2.1
Disruption FPR = 90% on real shots High v2.1
tau_E ITPA RMSE = 32.5% Medium v2.1
FNO L2 = 0.79 (experimental) Medium v3.0
GS-Transport: no outer loop Medium v2.1
Rust SNN not exposed via PyO3 Low v3.0

Full details: see RESULTS.md in repo root.