Simulation time windows¶
MHX now treats simulation duration as a first-class validation object. The rule for any linear-growth or nonlinear-island production claim is
where \(N_e\) is the required number of e-folds, \(\gamma\) is the relevant growth rate, and \(s_f\) is a safety factor. The default production policy uses \(N_e=10\) and \(s_f=1\) for linear-growth observation; the Rutherford/island template uses \(s_f=3\) to leave room for a resolved linear phase plus nonlinear tracking.
Duration policy command¶
mhx benchmark duration-policy --outdir outputs/benchmarks/duration_policy
Expected files:
outputs/benchmarks/duration_policy/duration_policy.jsonoutputs/benchmarks/duration_policy/duration_policy.mdoutputs/benchmarks/duration_policy/validation.jsonoutputs/benchmarks/duration_policy/manifest.json
The policy intentionally separates intended-scope sufficiency from nonlinear-claim sufficiency:
FAST smoke, linear operator replay, nonlinear energy-budget, and differentiability gates may be long enough for their engineering/validation purpose while remaining invalid as nonlinear reconnection claims.
Future production templates must satisfy the e-fold rule, otherwise the policy validation fails.
Long campaign template¶
The next nonlinear result should start from a generated campaign template rather than a smoke-test config:
mhx campaign rutherford-template \
--outdir outputs/campaigns/rutherford_template \
--nx 128 --ny 128 \
--dt 0.1 \
--target-saved-frames 400
This command does not run the expensive simulation. It writes a
campaign_config.toml, a duration_assessment.json, and a manifest with
claim_level = "production_template". The generated config uses
\(t_\mathrm{end}\approx2290.1\) for the default Harris growth-rate anchor, so it
is long enough for a ten-e-fold linear phase plus nonlinear island tracking.
Current duration classification¶
Workflow |
Current/default time |
Intended scope |
Nonlinear claim status |
|---|---|---|---|
|
\(t=0.1\) |
smoke/IO/plotting |
not a nonlinear claim |
|
\(t=80\) |
exact eigenmode replay and growth-fit plumbing |
not a nonlinear claim |
|
default FAST \(t=0.8\) |
nonlinear conservation/dissipation identity |
not a nonlinear island/plasmoid claim |
|
\(t\approx763.4\) |
production linear growth |
long enough for 10 e-folds |
|
\(t\approx2290.1\) |
duration-complete executor validation |
not production until promotion passes |
|
\(t\approx2290.1\) plus convergence/seed-QI |
production island tracking |
long enough with safety factor 3 |
The direct Harris benchmark anchor is \(\gamma\simeq0.0131\), so ten e-folds require \(10/0.0131\approx763.4\). This is why the default FAST nonlinear budget run is explicitly labeled a code-validity gate rather than a Rutherford or plasmoid simulation.
Promotion evidence lane¶
Duration is the first gate in the promotion lane, but passing it never promotes
a bundle by itself. A candidate campaign remains claim_level = "validation"
until a local gate summary or mhx campaign rutherford-promotion-check shows
all of the following evidence in the same campaign bundle:
completed target duration from
campaign_plan.json,diagnostics.json, andproduction_history.npz;at least two passing convergence bundles with their manifests and artifact hashes;
a passing seed-QI bundle for the same diagnostic family;
finite X/O critical-point histories with both detected X points and detected O points;
reconnecting-flux and Rutherford island-width histories that exceed their amplification thresholds;
fixed-scale flux and current-density movies;
manifest.json,validation.json,diagnostics.json,production_history.npz, andartifact_manifest.jsonwith hashes.
For a local evidence audit:
python tools/nonlinear_campaign_evidence.py \
--campaign-dir outputs/campaigns/rutherford_production \
--output-json outputs/campaigns/rutherford_production/promotion_gate_summary.json \
--output-md outputs/campaigns/rutherford_production/promotion_gate_summary.md \
--require-production-ready
The command exits nonzero with --require-production-ready unless every gate
passes, so short runs, missing movies, missing seed-QI evidence, or flux/width
non-response cannot be promoted by documentation alone.
Seeded double-Harris validation-media bundles use the same local summary, but
with their native artifact names:
periodic_double_harris_seeded_long_run.npz,
figures/periodic_double_harris_flux.gif, and
figures/periodic_double_harris_current.gif. If the attached promotion report
declares claim_level_if_passed = "validation", the summary can mark the
validation gate as ready while still keeping production_claim_ready = false.
Latest bounded GPU validation campaign¶
On 2026-05-22 a bounded office GPU campaign ran under a 30-minute timeout and
completed in about three minutes of wall time. The promoted validation bundle is
outputs/campaigns/gpu_nonlinear_20260522_085049/double_harris_long_n128_t160.
It used a 128×128 periodic double-Harris replay to t_end=160 with fixed
flux/current movies, one 64/96/128 convergence bundle, width and resistivity
sweeps, seed-QI evidence, artifact manifests, and a double-Harris promotion
check. The local gate summary reports:
gate_ready = true, because duration, convergence, X/O, flux, width, movies, and manifest gates passed;production_claim_ready = false, because the attached promotion report explicitly declaresclaim_level_if_passed = "validation";reconnected_flux_amplification = 8.356,island_width_amplification = 2.891,max_x_point_count = 4, andmax_o_point_count = 2.
Visual audit matters: the raw total-flux/current GIFs remain dominated by the
static equilibrium sheet, so public-facing media should show residual flux
perturbed - base, reconnection proxies, and gate summaries alongside any raw
field movie. These outputs are suitable for validation-media evidence, not for a
Rutherford, Sweet–Parker, or plasmoid-chain production claim.
Python guard for future workflows¶
Future production runners should call the guard before launching expensive jobs:
from mhx.benchmarks import require_duration_for_claim
require_duration_for_claim(
name="rutherford_campaign",
purpose="nonlinear island-width growth",
t_end=800.0,
growth_rate=1.31e-2,
required_efolds=10.0,
)
If t_end is too short, the guard raises a ValueError with the required
minimum. Tests cover the short-run failure path and the future-template pass
path.
What remains for nonlinear publication plots¶
A duration that satisfies the e-fold rule is necessary but not sufficient. Publication-grade nonlinear plots also need:
resolution/time-step convergence;
fixed color limits for flux and current movies;
reconnected-flux and island-width histories;
current-sheet length/thickness and reconnection-rate proxies;
magnetic/kinetic/total energy and integrated dissipation residuals;
artifact manifests with code commit, API version, and dependency set.
Practical duration labels¶
Use these labels consistently in docs, figures, and manifests:
Label |
Duration status |
Allowed use |
|---|---|---|
|
Shorter than the relevant e-fold window. |
Operator, IO, schema, differentiability, and energy-budget checks. |
|
A short non-CI validation run below the README media minimum. |
Local smoke/plotting checks only; not README or release media. |
|
Explicitly bounded CI run, currently |
CI artifact generation and schema/movie checks. |
|
Longer validation media run, currently |
README/release morphology media with validation claim level, not production physics. |
|
At least \(N_e/\gamma\). |
Linear growth-rate measurement if the mode remains in the linear regime. |
|
At least \(s_fN_e/\gamma\) with \(s_f>1\). |
Candidate island-growth or plasmoid campaign, still subject to convergence. |
|
Longer than the nonlinear window and accompanied by convergence checks. |
Preferred for production paper figures. |
The label should be stored in the run notes or manifest claim scope. If the
label is short_validation, fast_validation, or ci_fast, figures should not
use wording such as “Rutherford phase”, “plasmoid onset”, or “nonlinear
saturation”. The readme_release_media label permits public visual previews,
but it is still a validation-media label rather than a production reconnection
claim.