# Solar reconnection: independent scientific calculations

This archive contains original Python, our synthetic magnetic/fluid states, one exact NOAA observation, and reproducible plots. It contains no website Engine, TypeScript, JavaScript, Astro, dependency installation or original publication PDFs. Extract it into a new directory and run commands from that directory. The `src/.../data/` directory contains JSON numerical arrays only; Python regenerates them without importing the app.

The bounded model is **periodic, two-dimensional, incompressible viscous/resistive MHD releasing specified initial magnetic stress**. Four cases are supported, with their stated time endpoints. This is not a calculation of photospheric footpoint driving, flare onset, accelerated electrons, radiation or a nonlinear high-Lundquist plasmoid chain. The GOES observation is an independent measured-band exercise, not a calibration of the MHD heat.

## Environment and offline commands

Tested: Python 3.12.12, NumPy 2.4.4, SciPy 1.17.1, h5py 3.15.1 and Matplotlib 3.10.8. Install the pinned requirements in `scripts/astronomy/ac28/requirements-reference.txt` before going offline. Matplotlib is needed only for the optional figure command. Dependencies are not bundled. The cold-replay receipt identifies the exact existing local environment used; it does not claim a fresh dependency installation.

First verify every included member, then the named observed input:

```sh
python scripts/astronomy/ac28/verify_science_bundle.py
python scripts/astronomy/ac28/reacquire_goes.py --plan
python scripts/astronomy/ac28/reacquire_goes.py --verify docs/astronomy/ac28/research/sci_xrsf-l2-avg1m_g16_d20240510_v2-2-2.nc
```

These commands use no network. Only explicit `reacquire_goes.py --fetch FILE` requests the single fixed upstream URL and rejects a changed length/hash. No reacquisition is needed to use this archive.

Recompute the model, retained failures, four production-case inputs and fine-grid comparison:

```sh
python -W error scripts/astronomy/ac28/run_reference.py
python -W error scripts/astronomy/ac28/run_presets.py
python -W error scripts/astronomy/ac28/run_counterexamples.py
python -W error scripts/astronomy/ac28/prepare_runtime_data.py
python -W error scripts/astronomy/ac28/verify_runtime_domain.py
```

The first command actually evolves 32/64/128/256 grids and halves the 128-grid time step. It also recomputes analytic magnetic/shear modes, ideal invariants and the fixed Loureiro (2007v1) scalar dispersion roots. The second evolves the three additional cases. The third evolves the intentionally under-resolved ideal counterexample; its failure is an expected result, not a test to hide. The fourth regenerates each case's native initial/middle/final potential and vorticity, source hashes and same-state display samples. The fifth independently re-evolves 128/256 grids to **every saved physical time**, computes local induction, full-field errors and a separate halved-time-step trajectory for every case, and regenerates the final native field fixtures. Wall-clock fields are not scientific outputs.

Recompute the observation and run the twelve independent-reference checks:

```sh
python -W error scripts/astronomy/ac28/analyze_goes.py
python -W error scripts/astronomy/ac28/test_reference.py
```

Optional plots use the newly computed numerical reports, snapshots and the same NOAA file:

```sh
python -W error scripts/astronomy/ac28/make_figures.py
```

`analyze_goes.py --h5py-path EXISTING_DIRECTORY` and `make_figures.py EXISTING_DIRECTORY` accept an already installed h5py directory if required. They do not download dependencies. The accompanying cold replay used such an existing Python-3.12 installation, explicitly recorded in its receipt.

## Coordinates, equations and units

The square is `[0,2π) × [0,2π)`, periodic in both coordinates and invariant along z. Density is constant. B = (ψ_y, −ψ_x), j = −∇²ψ; v = (φ_y, −φ_x), ω = −∇²φ. The evolved equations are ψ_t + v·∇ψ = η∇²ψ and ω_t + v·∇ω = B·∇j + ν∇²ω. The magnetic diffusivity η and kinematic viscosity ν are dimensionless, in units L0 vA. Neither is the electrical resistivity in ohm metres.

Length is in L0, field B0, velocity vA = B0/√(μ0ρ), time tA = L0/vA. Current density is in B0/(μ0 L0), mean energy density in B0²/μ0, power density in B0²/(μ0 tA), potential in B0 L0. A total solar energy in joules would also need a physical volume, including invariant depth; none is inferred here.

Fourier differentiation uses a strict |k| < N/3 Galerkin cutoff, zero potential/streamfunction gauge and RK4. The heat reservoirs use the **same RK stages** as the fields. Domain-mean EB + EK + QOhm + Qvisc is constant within time truncation. Ohmic heating ηj² is a local quantity. The identity between ν times vorticity squared and strain heating is **a domain integral**, not pointwise equality of the maps. There is no temperature equation.

Case inputs are fixed: outflows (η=ν=0.02, end 2); ideal (0,0,end 0.8); diffusion (0.08,0.02,end 2); viscosity (0.02,0.12,end 2). Packet files preserve their exact stable steps and saved clocks. No continuous η/ν range is validated. The default ready state is actual time 1; the ideal ready state is 0.4.

## What the numerical checks do and do not establish

Default 128/256 final current-field relative L2 error is about 4.36e−5 and peak-current discrepancy about 4.55e−5. The global local-induction residual reaches about 7.26e−6. Per-time, per-case measurements are in `runtime-domain-reference.json`. The selected O point at (0,0) and X point at (0,π) are checked by gradients and Hessians. Both diffuse: the continuum derivative of ψ(O)−ψ(X) is Ez(X)−Ez(O), and finite-grid projection residuals are retained separately.

The 32/64 default grids have roughly 20%/2.1% peak-current errors despite excellent global energy closure. The explicit ideal counterexample ψ=.01cos8x+.04cos2y, φ=.01sin8xsin2y is stronger: at genuine nulls (0,0) and (0,π/2), the continuum ideal ψ_t is zero. N=32 discards a harmonic needed for cancellation and creates opposite rates ±.0008. Its flux contrast changes 8.11e−5 by time .05 while energy, potential-square, cross helicity and initial edge energy look excellent. N=64 reduces the contrast change to about 2.09e−11. Neither conservation nor edge energy alone validates local induction. This projection error is not an added physical resistivity.

The standalone Python is independent of the website's JavaScript radix-2 FFT implementation. Python itself is not two independent full MHD codes. Analytic modes, signed startup force, real-space derivative limits, energy identities, space/time refinement and retained failures provide complementary checks. These are scoped internal scientific checks, not external expert certification or browser acceptance.

The separately recomputed Loureiro roots are **linear asymptotic eigenvalues**, with the paper's equilibrium, length convention and ordering. Plotted formal continuation outside κ ε < 1 is dotted; the actual asymptotic condition is κ ε ≪ 1. Root precision is not physical model accuracy. Zhou's resolved many-island statistical simulations and Burch's MMS electron distributions are primary-paper reading, not reproduced datasets in this package.

## Exact measured input and estimators

NOAA GOES16 XRS science-quality avg1m, day 2024-05-10, version 2-2-2, released October 2026. The original file is 301,570 bytes, SHA-256 `93146eb0a920a8c0cfe5f74897c90978e17006f8280dcc73a5f99aeafec8ba16`. The source URL and metadata are retained in `input-manifest.json` and `goes-input-metadata.json`.

Time is record-start UTC seconds since 2000-01-01 12:00:00 with leap seconds neglected, not TT/J2000. XRS-A is 0.05–0.4 nm; XRS-B 0.1–0.8 nm. Flux is band irradiance in W/m². Selection requires primary flag zero, 54–60 contributing one-second samples (255 fill rejected), finite above-floor irradiance and the stated valid electron-correction bits. Rejected bins remain gaps.

In 06:00–08:00 UTC all 120 bins pass both bands, but A has 7,195/7,200 contributing seconds in four partial bins, minimum 58. B has all 7,200 seconds. Multiplying a partly sampled mean by 60 extrapolates to the full minute **conditional on representative available seconds**. A full-minute estimate .14607970 J/m² and available-seconds-weighted proxy .14595377 are distinct; their difference does not bound the five missing seconds. B full-minute fluence is .65148857 J/m². Background-window/mean/median scenarios are sensitivities, not confidence intervals. The source au_factor supplies a separately named 1-AU result; older GOES8–15 scaling is not applied.

The peak minute starts are A 06:52 and B 06:54. B's native one-minute level is X3.93-like; this does not claim an operational-catalogue classification or subminute peak. No temperature/emission-measure inversion, bolometric flare energy, magnetic diffusivity fit or emitted-light prediction is provided.

## Rights and provenance

New standalone Python: MIT, `LICENSE-code.txt`. Our synthetic arrays, numerical results, figures and explanatory documents: CC BY 4.0, `LICENSE-data.md`; cite Sandbox Physics, AC28, 2026-11-03, and retain the identified primary sources. The unchanged NOAA original retains its original metadata and unrestricted-use/redistribution statement; credit NOAA NCEI STP Solar Irradiance Team. Original publication PDFs and dependencies are excluded. Source review and the response-byte ledger retain what was read and the 13,146,301/15,000,000-byte research budget, including failed response bodies.
