Documents

Physics

Atmosphere & space weather

Density, temperature, mean molecular mass and species fractions from NRLMSIS, driven by F10.7 and Ap. Those two indices are randomised and made to jump during training episodes.

Source: python/arlamx_v2/atmosphere.py (query_msis), env.py (_atmo_at, reset, _plan_jumps, _apply_jumps), plant hooks Simulator.set_atmosphere / set_atmosphere_end. There is no atmosphere model inside the C++ plant.

MSIS query

  • Library: pymsis. atmosphere.model = msis21 (NRLMSIS 2.1, the default), nrlmsise00 (version 0), or constant (atmosphere.constant: {rho, T, m_bar}).
  • Where: geodetic height and latitude (Bowring, WGS-84) and Earth-fixed longitude (GMST rotation) of the spacecraft.
  • When: the start of every advisor step (every 300 s). With atmosphere.interp: true (standard and high) a second query runs at the position predicted by the FP32 propagator for t + 300 s. The plant interpolates ρ, T, m̄ and χ linearly across the 150 substeps. That is 2 MSIS calls per decision instead of 150.
  • Returned: ρ (kg/m³), temperature T (the MSIS local temperature at altitude, index 10), \(\bar m=\sum n_im_i/\sum n_i\) over He, O, N₂, O₂, Ar, H, N, and optionally the mole fractions χ in the Walker order (He, O, N₂, O₂, Ar, H, N). Anomalous O is folded into O and NO is dropped.
  • Safety: if pymsis throws, the process falls back to ρ = 3e-12, T = 900 K for the rest of the run and warns once. Out-of-range results (ρ ≥ 1e-8, T ∉ (150, 4000) K, m̄ outside bounds) are replaced by ρ = 1e-13, T = 600 K.

Space-weather inputs

\[ \texttt{f107s}=\texttt{f107as}=F_{10.7},\qquad \texttt{aps}=[A_p]\times 7\ \ \text{(scalar)}\quad\text{or}\quad [\text{daily},\ 3\mathrm h,\ -3,\ -6,\ -9\,\mathrm h,\ \overline{-12..-33},\ \overline{-36..-57}] \]
  • A scalar Ap fills all 7 slots (steady-Ap, daily mode). A length-7 history switches MSIS to storm-time mode (geomagnetic_activity = −1). query_msis supports this, but the env always passes a scalar.
  • The 81-day centred mean F10.7a is set equal to the daily F10.7. Real conditions often differ by 20–40 % between the two, and MSIS density responds to both.

How space weather is made dynamic in training

VariantDraw at resetJumps per episodeJump sizeClip
v3F10.7 U(80, 200), Ap U(2, 15)none (static per episode)——
v4–v9F10.7 U(65, 250), Ap U(2, 40)1–4ΔF ±80, ΔAp −20…+35F [65, 250], Ap [2, 80]
v10, v11, v10r6 (and the v12–v14 wrappers)F10.7 U(5, 250), Ap U(2, 200)2–8ΔF ±150, ΔAp −60…+150F [5, 250], Ap [2, 200]
  • config/orbit.yaml → training.f107 / ap overrides the ranges ([lo, hi], a number, or null). reset(options={"f107":…, "ap":…}) pins them for evaluation.
  • Jumps are applied at the start of the scheduled step and then held. They are step changes, not a physical storm profile (no ~1–3 day recovery), and there is no thermosphere time lag.
  • The v14b "climate mix" (40 % quiet / 35 % gradual + spikes / 25 % storm) is a wrapper-level re-draw in train_v12.py.
F10.7 below ~65 sfu is unphysical The v10 envelope floor of F10.7 = 5 sfu is below the observed solar-minimum floor (≈ 63–65 sfu) and outside the conditions MSIS was fitted on. Densities there are extrapolations. That is useful as a domain-randomisation stressor, but do not quote it as a real solar condition.

Wind

v_rel = v − ω⊕ × r − v_wind. Simulator.set_wind(w_N) sets a constant inertial wind. It is zero by default because no cited horizontal wind model (HWM14) is wired in.

Configuration

KeyDefaultMeaning
atmosphere.modelmsis21msis21 | nrlmsise00 | constant
atmosphere.f107, ap150, 4seed values for the plant. Env resets overwrite them from the envelope.
atmosphere.corotatingtrueco-rotating atmosphere
atmosphere.interptrue (fast: false)second MSIS sample at step end, linear in time
atmosphere.constant—{rho, T, m_bar} for model: constant
orbit.training.f107 / ap[5, 250] / [2, 200]training envelope
orbit.simulation.f107 / ap150 / 4decay-run values

What a “real space weather” mode would need

This is not implemented. It is listed because you asked for dynamic space weather.

  1. A reader for CelesTrak SW-All.csv (observed daily F10.7 adjusted/observed, 81-day centred average, 8 × 3-hour Kp/Ap, daily Ap). It could also read the NOAA SWPC 45-day forecast for predictive runs.
  2. Per step: pass daily F10.7 of the previous day, the 81-day mean, and the 7-element Ap history built from the 3-hour Ap series. query_msis already accepts the history.
  3. Training: sample episode start dates from the record (a solar-cycle-weighted draw) instead of uniform indices. This gives realistic storm onsets, recoveries and F10.7/F10.7a correlations.

This is roughly 1–2 days of work plus tests, and it is independent of the CLL/material work.

References

  1. Emmert, J. T. et al. (2021). NRLMSIS 2.0. Earth Space Sci. 8, e2020EA001321.
  2. Picone, J. M. et al. (2002). NRLMSISE-00. JGR 107(A12), 1468.
  3. Vallado, D. A. & Kelso, T. S. (2013). Earth orientation parameter and space weather data for flight operations. AAS 13-373 (CelesTrak SW format).