Version: dev

RadiationFundamentals

Composed radiation-fundamentals system from Seinfeld & Pandis (2006) Chapter 4 (Eqs. 4.1-4.11). A pure structural aggregation (no coupling equations) of seven independent components: PhotonEnergy (photon energy-frequency-wavelength relations, Eq. 4.1), BlackbodyRadiation (Planck's law, Eq. 4.2), WienDisplacement (peak emission wavelength, Eq. 4.3), StefanBoltzmann (total emissive power, Eq. 4.4), PlanetaryEnergyBalance (Earth's equilibrium temperature, Eqs. 4.5-4.7), ClimateSensitivity (temperature response to forcing, Eqs. 4.8-4.10), and TOARadiativeForcing (net top-of-atmosphere flux, Eq. 4.11). Each component is inlined as a named subsystem; variables are dot-namespaced (RadiationFundamentals.<subsystem>.<var>). Migrated from GasChem.jl@8c12c048 src/radiation_fundamentals.jl:367 (`RadiationFundamentals` @component).

Domain
gaschem
Subdomain
radiation
Type
model
.esm schema
1.0.0
Source
components/gaschem/radiation/radiation_fundamentals.esm
Tags
#gaschem #radiation #model #composed-system #seinfeld-pandis #blackbody #energy-balance #climate-sensitivity #planck-law

Description

Composed radiation-fundamentals system from Seinfeld & Pandis (2006) Chapter 4 (Eqs. 4.1-4.11). A pure structural aggregation (no coupling equations) of seven independent components: PhotonEnergy (photon energy-frequency-wavelength relations, Eq. 4.1), BlackbodyRadiation (Planck’s law, Eq. 4.2), WienDisplacement (peak emission wavelength, Eq. 4.3), StefanBoltzmann (total emissive power, Eq. 4.4), PlanetaryEnergyBalance (Earth’s equilibrium temperature, Eqs. 4.5-4.7), ClimateSensitivity (temperature response to forcing, Eqs. 4.8-4.10), and TOARadiativeForcing (net top-of-atmosphere flux, Eq. 4.11). Each component is inlined as a named subsystem; variables are dot-namespaced (RadiationFundamentals..). Migrated from GasChem.jl@8c12c048 src/radiation_fundamentals.jl:367 (RadiationFundamentals @component).

Reference

_source_ref: GasChem.jl@8c12c048482b515fb8eb2110bf8ab4b4f4e71309:src/radiation_fundamentals.jl:367

Upstream RadiationFundamentals is an MTK @component that composes the seven radiation-fundamentals components of Seinfeld & Pandis (2006) Chapter 4 (Eqs. 4.1-4.11) into one system. The upstream constructor is a pure aggregation: @named photon = PhotonEnergy() @named blackbody = BlackbodyRadiation() @named wien = WienDisplacement() @named stefan_boltzmann = StefanBoltzmann() @named energy_balance = PlanetaryEnergyBalance() @named climate_sensitivity = ClimateSensitivity() @named toa_forcing = TOARadiativeForcing() eqs = Equation[] # No additional equations - all physics is in subsystems return System(eqs, t; systems = [photon, blackbody, wien, stefan_boltzmann, energy_balance, climate_sensitivity, toa_forcing], name)

There are NO connecting equations and NO coupling between the seven subsystems (eqs = Equation[]): the upstream model is a structural bag of seven independent components that share only the independent variable t. Each subsystem keeps its own namespace, so e.g. photon.λ and blackbody.λ are distinct parameters, and blackbody.T, wien.T, stefan_boltzmann.T are three independent temperatures.

Migration shape — models.RadiationFundamentals with a subsystems block (ESM spec §6.2 / §4.7): the seven components are inlined as named child models under subsystems, in the upstream systems = [...] order. The top-level model carries no variables and no equations ("variables": {}, "equations": []), exactly mirroring the upstream eqs = Equation[]. No top-level coupling block is emitted because the upstream model has no couple/operator_compose/variable_map connections — the migration-tracker coupling.couple feature tag classifies this as a composed @component, which the ESS schema represents via subsystems, not the coupling array (the coupling array is for ConnectorSystem equations, of which this model has none).

Each subsystem’s variables and equations are copied verbatim from the corresponding already-migrated standalone .esm file in this directory — these are the validated, inline-test-gate-passing migrations of the same seven components: photon <- components/gaschem/radiation/photon_energy.esm (PhotonEnergy, src/radiation_fundamentals.jl:25, esm-om23) blackbody <- components/gaschem/radiation/blackbody.esm (BlackbodyRadiation, src/radiation_fundamentals.jl:73, esm-4gsh) wien <- components/gaschem/radiation/wien.esm (WienDisplacement, src/radiation_fundamentals.jl:121, esm-3e2g) stefan_boltzmann <- components/gaschem/radiation/stefan_boltzmann.esm (StefanBoltzmann, src/radiation_fundamentals.jl:164, esm-mbfz) energy_balance <- components/gaschem/radiation/planetary_energy_balance.esm (PlanetaryEnergyBalance, src/radiation_fundamentals.jl:211, esm-8b1g) climate_sensitivity <- components/gaschem/radiation/climate_sensitivity.esm (ClimateSensitivity, src/radiation_fundamentals.jl:268) toa_forcing <- components/gaschem/radiation/toa_radiative_forcing.esm (TOARadiativeForcing, src/radiation_fundamentals.jl:327, esm-pbbo) Inlining (rather than {"ref": "./photon_energy.esm"}) keeps the file fully self-contained per ESM spec §6 (“All models must be fully specified … every equation, variable, and parameter must be present in the .esm file”) and avoids the inline-test walker double-processing the referenced standalone files.

Structural fidelity to the upstream tests (GasChem.jl test/radiation_fundamentals_test.jl):

  • Structural: RadiationFundamentals composed system (lines 12-28) asserts exactly 7 subsystems named photon/blackbody/wien/stefan_boltzmann/energy_balance/climate_sensitivity/toa_forcing — reproduced here by the 7 keys of the subsystems block.
  • Analytical: RadiationFundamentals composed system solves (lines 473-496) asserts the pre-compiled system has length(equations(radiation)) == 14 (= 2 photon + 1 blackbody + 1 wien + 1 stefan_boltzmann + 3 energy_balance + 4 climate_sensitivity + 2 toa_forcing) and that radiation.energy_balance.T_e solves to ~255 K. The migrated file preserves the 14-equation count across the 7 subsystems (stefan_boltzmann contributes its 1 equation as the observed variable F_B, which flattens to one algebraic equation) and the upstream_analytical_composed_solves test below pins energy_balance.T_e.

energy_balance subsystem — the upstream PlanetaryEnergyBalance is a closed nonlinear system (F_S ~ S_0/4*(1-R_p); F_L ~ sigmaT_e^4; F_S ~ F_L) that MTK solves with a NonlinearProblem. The inlined energy_balance subsystem carries the closed-form algebraic rewrite from planetary_energy_balance.esm (F_S ~ S_0/4(1-R_p); T_e ~ (F_S/sigma)^(1/4); F_L ~ sigma*T_e^4) so the Python ESS runner, which integrates a DAE rather than solving a true nonlinear problem, recovers the unique positive-real root without an initial guess. This keeps the 3-equation / 3-state shape of the upstream length(equations(balance)) == 3 invariant.

Parameter overrides on this composed model must be FULLY namespaced (RadiationFundamentals.<subsystem>.<param>, e.g. RadiationFundamentals.energy_balance.R_p). A bare name (R_p) would set every subsystem that has a parameter of that name (R_p exists in both energy_balance and toa_forcing; T in blackbody/wien/stefan_boltzmann; λ in photon/blackbody; S_0 in energy_balance/toa_forcing; F_L in toa_forcing) and a subsystem-relative name (energy_balance.R_p) resolves to nothing. Every parameter_overrides key in the tests below uses the fully-qualified form; several tests additionally assert that a sibling subsystem’s output is UNCHANGED to pin the namespace-isolation contract that the upstream MTK @named composition provides.

No examples block: tools/render_example_plots.py builds its sweep-resolution plan from a model’s own top-level equations only and does not recurse into subsystems, so it cannot evaluate a pure-aggregation model whose equations all live in child systems. Because RadiationFundamentals has no emergent behavior (zero coupling), every figure it could produce is already produced by the seven standalone subsystem .esm files, each of which carries its own examples block. Adding a syntactically-present examples block here that the renderer can only skip would itself be a migration gap (migration-guide §7.4), so the scientific-figure coverage (§6.2) is delegated to the seven standalone files.

Tolerance rationale (model-level rel=1.0e-9): every one of the 14 equations is algebraic (no time derivative); the ESS runner resolves them by topological substitution into closed form, so each output is correctly-rounded to within a few ULP of the exact real-arithmetic value. rel=1.0e-9 leaves >6 orders of magnitude of headroom above the ~1e-16 ULP floor and matches the looser of the seven standalone subsystem tolerances (blackbody.esm and planetary_energy_balance.esm both use rel=1e-9). Per-assertion abs=1.0e-12 overrides guard the outputs that are exactly zero by construction (toa_forcing.F_net at radiative equilibrium; climate_sensitivity.ΔF_net / ΔT_e at zero forcing) where a relative tolerance is undefined. The upstream_analytical_composed_solves test additionally asserts energy_balance.T_e against the Seinfeld & Pandis book value 255 K at rel=1.0e-2, reproducing the upstream test’s rtol = 1.0e-2 bound.

Expected values were obtained by running the canonical Python ESS runner (earthsci_ast.simulation.simulate, rtol=1e-10, atol=1e-12, cse=False) — the same path the inline-test gate tools/run_esm_inline_tests.py uses — on the flattened composed system, and cross-checked against the pinned values in the seven standalone subsystem .esm files (agreement to within last-ULP across all subsystems)._

Raw .esm

Raw .esm JSON (this component)
{
  "reference": {
    "notes": "source_ref: GasChem.jl@8c12c048482b515fb8eb2110bf8ab4b4f4e71309:src/radiation_fundamentals.jl:367\n\nUpstream `RadiationFundamentals` is an MTK `@component` that composes the seven radiation-fundamentals components of Seinfeld & Pandis (2006) Chapter 4 (Eqs. 4.1-4.11) into one system. The upstream constructor is a pure aggregation:\n    @named photon              = PhotonEnergy()\n    @named blackbody           = BlackbodyRadiation()\n    @named wien                = WienDisplacement()\n    @named stefan_boltzmann    = StefanBoltzmann()\n    @named energy_balance      = PlanetaryEnergyBalance()\n    @named climate_sensitivity = ClimateSensitivity()\n    @named toa_forcing         = TOARadiativeForcing()\n    eqs = Equation[]            # No additional equations - all physics is in subsystems\n    return System(eqs, t; systems = [photon, blackbody, wien, stefan_boltzmann,\n                                     energy_balance, climate_sensitivity, toa_forcing], name)\n\nThere are NO connecting equations and NO coupling between the seven subsystems (`eqs = Equation[]`): the upstream model is a structural bag of seven independent components that share only the independent variable t. Each subsystem keeps its own namespace, so e.g. `photon.λ` and `blackbody.λ` are distinct parameters, and `blackbody.T`, `wien.T`, `stefan_boltzmann.T` are three independent temperatures.\n\nMigration shape — `models.RadiationFundamentals` with a `subsystems` block (ESM spec §6.2 / §4.7): the seven components are inlined as named child models under `subsystems`, in the upstream `systems = [...]` order. The top-level model carries no variables and no equations (`\"variables\": {}`, `\"equations\": []`), exactly mirroring the upstream `eqs = Equation[]`. No top-level `coupling` block is emitted because the upstream model has no `couple`/`operator_compose`/`variable_map` connections — the migration-tracker `coupling.couple` feature tag classifies this as a composed `@component`, which the ESS schema represents via `subsystems`, not the `coupling` array (the `coupling` array is for ConnectorSystem equations, of which this model has none).\n\nEach subsystem's `variables` and `equations` are copied verbatim from the corresponding already-migrated standalone `.esm` file in this directory — these are the validated, inline-test-gate-passing migrations of the same seven components:\n  photon              <- components/gaschem/radiation/photon_energy.esm        (PhotonEnergy,        src/radiation_fundamentals.jl:25,  esm-om23)\n  blackbody           <- components/gaschem/radiation/blackbody.esm            (BlackbodyRadiation,  src/radiation_fundamentals.jl:73,  esm-4gsh)\n  wien                <- components/gaschem/radiation/wien.esm                 (WienDisplacement,    src/radiation_fundamentals.jl:121, esm-3e2g)\n  stefan_boltzmann    <- components/gaschem/radiation/stefan_boltzmann.esm     (StefanBoltzmann,     src/radiation_fundamentals.jl:164, esm-mbfz)\n  energy_balance      <- components/gaschem/radiation/planetary_energy_balance.esm (PlanetaryEnergyBalance, src/radiation_fundamentals.jl:211, esm-8b1g)\n  climate_sensitivity <- components/gaschem/radiation/climate_sensitivity.esm  (ClimateSensitivity,  src/radiation_fundamentals.jl:268)\n  toa_forcing         <- components/gaschem/radiation/toa_radiative_forcing.esm (TOARadiativeForcing, src/radiation_fundamentals.jl:327, esm-pbbo)\nInlining (rather than `{\"ref\": \"./photon_energy.esm\"}`) keeps the file fully self-contained per ESM spec §6 (\"All models must be fully specified ... every equation, variable, and parameter must be present in the .esm file\") and avoids the inline-test walker double-processing the referenced standalone files.\n\nStructural fidelity to the upstream tests (GasChem.jl test/radiation_fundamentals_test.jl):\n  - `Structural: RadiationFundamentals composed system` (lines 12-28) asserts exactly 7 subsystems named photon/blackbody/wien/stefan_boltzmann/energy_balance/climate_sensitivity/toa_forcing — reproduced here by the 7 keys of the `subsystems` block.\n  - `Analytical: RadiationFundamentals composed system solves` (lines 473-496) asserts the pre-compiled system has `length(equations(radiation)) == 14` (= 2 photon + 1 blackbody + 1 wien + 1 stefan_boltzmann + 3 energy_balance + 4 climate_sensitivity + 2 toa_forcing) and that `radiation.energy_balance.T_e` solves to ~255 K. The migrated file preserves the 14-equation count across the 7 subsystems (stefan_boltzmann contributes its 1 equation as the `observed` variable F_B, which flattens to one algebraic equation) and the `upstream_analytical_composed_solves` test below pins energy_balance.T_e.\n\nenergy_balance subsystem — the upstream `PlanetaryEnergyBalance` is a closed nonlinear system (F_S ~ S_0/4*(1-R_p); F_L ~ sigma*T_e^4; F_S ~ F_L) that MTK solves with a `NonlinearProblem`. The inlined `energy_balance` subsystem carries the closed-form algebraic rewrite from planetary_energy_balance.esm (F_S ~ S_0/4*(1-R_p); T_e ~ (F_S/sigma)^(1/4); F_L ~ sigma*T_e^4) so the Python ESS runner, which integrates a DAE rather than solving a true nonlinear problem, recovers the unique positive-real root without an initial guess. This keeps the 3-equation / 3-state shape of the upstream `length(equations(balance)) == 3` invariant.\n\nParameter overrides on this composed model must be FULLY namespaced (`RadiationFundamentals.<subsystem>.<param>`, e.g. `RadiationFundamentals.energy_balance.R_p`). A bare name (`R_p`) would set every subsystem that has a parameter of that name (R_p exists in both energy_balance and toa_forcing; T in blackbody/wien/stefan_boltzmann; λ in photon/blackbody; S_0 in energy_balance/toa_forcing; F_L in toa_forcing) and a subsystem-relative name (`energy_balance.R_p`) resolves to nothing. Every `parameter_overrides` key in the tests below uses the fully-qualified form; several tests additionally assert that a sibling subsystem's output is UNCHANGED to pin the namespace-isolation contract that the upstream MTK `@named` composition provides.\n\nNo `examples` block: `tools/render_example_plots.py` builds its sweep-resolution plan from a model's own top-level `equations` only and does not recurse into `subsystems`, so it cannot evaluate a pure-aggregation model whose equations all live in child systems. Because RadiationFundamentals has no emergent behavior (zero coupling), every figure it could produce is already produced by the seven standalone subsystem `.esm` files, each of which carries its own `examples` block. Adding a syntactically-present `examples` block here that the renderer can only skip would itself be a migration gap (migration-guide §7.4), so the scientific-figure coverage (§6.2) is delegated to the seven standalone files.\n\nTolerance rationale (model-level rel=1.0e-9): every one of the 14 equations is algebraic (no time derivative); the ESS runner resolves them by topological substitution into closed form, so each output is correctly-rounded to within a few ULP of the exact real-arithmetic value. rel=1.0e-9 leaves >6 orders of magnitude of headroom above the ~1e-16 ULP floor and matches the looser of the seven standalone subsystem tolerances (blackbody.esm and planetary_energy_balance.esm both use rel=1e-9). Per-assertion `abs=1.0e-12` overrides guard the outputs that are exactly zero by construction (toa_forcing.F_net at radiative equilibrium; climate_sensitivity.ΔF_net / ΔT_e at zero forcing) where a relative tolerance is undefined. The `upstream_analytical_composed_solves` test additionally asserts energy_balance.T_e against the Seinfeld & Pandis book value 255 K at rel=1.0e-2, reproducing the upstream test's `rtol = 1.0e-2` bound.\n\nExpected values were obtained by running the canonical Python ESS runner (`earthsci_ast.simulation.simulate`, rtol=1e-10, atol=1e-12, cse=False) — the same path the inline-test gate `tools/run_esm_inline_tests.py` uses — on the flattened composed system, and cross-checked against the pinned values in the seven standalone subsystem `.esm` files (agreement to within last-ULP across all subsystems)."
  },
  "tolerance": {
    "rel": 1e-09
  },
  "variables": {},
  "equations": [],
  "subsystems": {
    "photon": {
      "variables": {
        "h": {
          "type": "parameter",
          "units": "J*s",
          "default": 6.626e-34,
          "description": "Planck's constant (S&P Page 99, 4-digit-rounded CODATA value). The fundamental quantum of action that links energy and frequency in the photon picture Δε = hν. The upstream default 6.626e-34 J·s is the historical 4-digit-rounded value; the modern CODATA-2019 exact definition is h = 6.62607015e-34 J·s (the SI redefinition of the kilogram fixes h to this value exactly). The two differ by ~1e-5 relative — within the rtol=1e-3 upstream test gate but resolvable at the rel=1e-10 .esm gate, which is why this constant is encoded as a parameter rather than a literal in the equation RHS (so downstream consumers can override h to the modern CODATA value for precision applications without forking the component)."
        },
        "c": {
          "type": "parameter",
          "units": "m/s",
          "default": 299790000.0,
          "description": "Speed of light in vacuum (S&P Page 99, 5-digit-rounded value). The fundamental electromagnetic propagation speed that links frequency and wavelength in the photon picture ν = c/λ. The upstream default 2.9979e8 m/s is the historical 5-digit-rounded value; the modern CODATA-1983 exact definition is c = 2.99792458e8 m/s (the SI redefinition of the meter fixes c to this value exactly via the meter being defined as the distance light travels in 1/299792458 s). The two differ by ~8e-7 relative — well within the rtol=1e-3 upstream test gate but resolvable at the rel=1e-10 .esm gate, encoded as a parameter to support CODATA-precision overrides without forking the component."
        },
        "λ": {
          "type": "parameter",
          "units": "m",
          "default": 5e-07,
          "description": "Wavelength of the photon (S&P Page 99, visible-green canonical default). The upstream default 5.0e-7 m = 500 nm is the yellow-green visible peak that matches Wien's law applied to T_sun ≈ 5800 K and anchors the solar-peak photon used in actinic-flux calculations. Other canonical wavelengths used in atmospheric radiative-transfer applications: 200-300 nm (UV-B/UV-C, the Hartley-Huggins ozone-photolysis bands O3 + hν → O + O2), 300-400 nm (UV-A, the O3 + hν → O(1D) + O2 channel and NO2-photolysis band), 400-700 nm (visible, solar-energy-balance photometric range), 700-1000 nm (near-IR, plant-photosynthesis quantum-yield cutoff), 1-10 μm (thermal-IR, the Earth-radiation longwave range), 1 mm (microwave, the cosmic-microwave-background Wien peak)."
        },
        "Δε": {
          "type": "unknown",
          "units": "J",
          "description": "Photon energy in joules (S&P Eq. 4.1a). Δε = hν is the quantum energy of a single photon at frequency ν — the discrete energy package that gets absorbed or emitted in a photon-matter interaction. The 500-nm visible-green default gives Δε ≈ 3.97e-19 J ≈ 2.48 eV, the canonical visible photon energy that anchors photoelectric-effect work-function and photosynthetic quantum-yield calculations. The full atmospheric photon-energy range spans ~12 orders of magnitude: from ~2e-31 J at the longest radio waves (~1 km) through ~2e-22 J at the microwave CMB peak (~1 mm), ~2e-20 J at the thermal-IR Earth-emission peak (~10 μm), ~4e-19 J at the visible solar peak (~500 nm), ~7e-19 J at the UV-B ozone-photolysis range (~300 nm), up to ~2e-16 J at the soft X-ray solar corona emission (~1 nm)."
        },
        "ν": {
          "type": "unknown",
          "units": "Hz",
          "description": "Photon frequency in hertz (S&P Eq. 4.1b). ν = c/λ is the electromagnetic wave frequency — the inverse-wavelength characterization of monochromatic light. The 500-nm visible-green default gives ν ≈ 600 THz, the canonical visible solar peak frequency. Frequency is the natural unit for radio-frequency atmospheric remote-sensing applications (passive microwave radiometry uses frequencies in GHz, e.g., the 22 GHz water-vapor line and 60 GHz oxygen complex used in the AMSU/ATMS sounders) and for spectroscopy (the rotational-line spacing in mm-wave spectra of atmospheric trace gases is the natural frequency-unit observable). The full atmospheric photon-frequency range spans ~12 orders of magnitude inversely correlated with the wavelength range: from ~3e5 Hz at the longest radio waves through ~3e11 Hz at the CMB peak, ~3e13 Hz at the thermal-IR peak, ~6e14 Hz at the visible peak, ~1e15 Hz at the UV-B range, up to ~3e17 Hz at the soft X-ray range."
        }
      },
      "equations": [
        {
          "lhs": "ν",
          "rhs": {
            "op": "/",
            "args": [
              "c",
              "λ"
            ]
          }
        },
        {
          "lhs": "Δε",
          "rhs": {
            "op": "*",
            "args": [
              "h",
              "ν"
            ]
          }
        }
      ]
    },
    "blackbody": {
      "variables": {
        "h": {
          "type": "parameter",
          "units": "J*s",
          "default": 6.626e-34,
          "description": "Planck's constant (S&P Page 99, 4-digit-rounded CODATA value). The fundamental quantum of action that anchors the discrete photon picture and the Bose-Einstein occupation factor in Planck's law. The upstream default 6.626e-34 J·s is the historical 4-digit-rounded value; the modern CODATA-2019 exact definition is h = 6.62607015e-34 J·s (the SI redefinition of the kilogram fixes h to this value exactly). The two differ by ~1e-5 relative — well within the rtol=5e-2 upstream test gate, encoded as a parameter so downstream consumers can override h to the modern CODATA value for precision applications without forking the component."
        },
        "c": {
          "type": "parameter",
          "units": "m/s",
          "default": 299790000.0,
          "description": "Speed of light in vacuum (S&P Page 99, 5-digit-rounded value). The upstream default 2.9979e8 m/s is the historical 5-digit-rounded value; the modern CODATA-1983 exact definition is c = 2.99792458e8 m/s (the SI redefinition of the meter fixes c to this value exactly via the meter being defined as the distance light travels in 1/299792458 s). The two differ by ~8e-7 relative — well within the rtol=5e-2 upstream test gate, encoded as a parameter to support CODATA-precision overrides."
        },
        "k_B": {
          "type": "parameter",
          "units": "J/K",
          "default": 1.381e-23,
          "description": "Boltzmann constant (S&P Page 99, 4-digit-rounded CODATA value). The fundamental quantity linking thermal-statistical mechanics (mean energy per degree of freedom = (1/2)k_B·T) and macroscopic thermodynamics; appears in the Bose-Einstein occupation factor exp(hν/kT) - 1 of Planck's law. The upstream default 1.381e-23 J/K is the historical 4-digit-rounded value; the modern CODATA-2019 exact definition is k_B = 1.380649e-23 J/K (the SI redefinition of the kelvin fixes k_B to this value exactly via the Boltzmann constant becoming a defining constant). The two differ by ~3e-4 relative — within the rtol=5e-2 upstream test gate, encoded as a parameter to support precision overrides."
        },
        "π_val": {
          "type": "parameter",
          "units": "1",
          "default": 3.141592653589793,
          "description": "Mathematical pi as a Float64 constant (Float64(π) in Julia, ~3.141592653589793). Encoded explicitly as a fixed-default parameter because the upstream Julia source declares `π_val = Float64(π)` as a `@constants` — the conversion to Float64 is required to avoid Julia's automatic Irrational→BigFloat promotion inside MTK's symbolic expressions. The upstream default value is the IEEE-754 double-precision representation of π (3.141592653589793 = the round-to-nearest-even of the exact mathematical π); this exact bit pattern is preserved here. Downstream consumers needing extended precision (e.g., quad-precision sensitivity studies) can override π_val, but the default matches Julia's `Float64(π)` exactly."
        },
        "T": {
          "type": "parameter",
          "units": "K",
          "default": 5800.0,
          "description": "Temperature of the emitting blackbody (S&P Page 99). The upstream default 5800.0 K is the Sun's effective surface temperature — sometimes given as 5778 K (the modern IAU 2015 value derived from the Sun's total luminosity and radius) but the upstream uses the classic 5800 K round figure. At this temperature paired with the default λ=500 nm wavelength, Planck's law gives F_B_λ ≈ 8.46e13 W/m³ — the canonical solar-peak spectral irradiance per unit wavelength that anchors the Sun's irradiance at Earth's distance and the solar-driven photochemistry of the atmosphere. Other canonical temperatures: 300 K (Earth surface) gives a thermal-IR peak at ~9.66 μm with F_B_λ at 10 μm ≈ 3.12e7 W/m³, 3 K (CMB) gives a microwave peak at ~0.97 mm, 1e4 K (cool-star photosphere or stellar corona) gives a UV/X-ray peak shifted by Wien's law."
        },
        "λ": {
          "type": "parameter",
          "units": "m",
          "default": 5e-07,
          "description": "Wavelength of the emitted photon (S&P Page 99, visible-green canonical default). The upstream default 5.0e-7 m = 500 nm is the yellow-green visible peak that matches Wien's law applied to T_sun ≈ 5800 K and anchors the solar-peak photon used in actinic-flux and spectral-irradiance calculations. Other canonical wavelengths used in atmospheric radiative-transfer applications: 200-300 nm (UV-B/UV-C, the Hartley-Huggins ozone-photolysis bands O3 + hν → O + O2), 300-400 nm (UV-A, the O3 + hν → O(1D) + O2 channel and NO2-photolysis band), 400-700 nm (visible, solar-energy-balance photometric range), 700-3000 nm (near-IR, solar-IR component), 3-50 μm (thermal-IR, the Earth-radiation longwave range), 1 mm (microwave, the cosmic-microwave-background Wien peak)."
        },
        "F_B_λ": {
          "type": "unknown",
          "units": "W/m^3",
          "description": "Monochromatic blackbody emissive power in watts per cubic meter (W·m⁻³ = W·m⁻²·m⁻¹, i.e., emitted power per unit area per unit wavelength). Equivalently called the spectral radiance per unit wavelength integrated over the outward 2π hemisphere. F_B_λ(λ, T) gives the wavelength-resolved emission of a thermal source: integrating over all wavelengths recovers the total emissive power F_B = ∫₀^∞ F_B_λ dλ = σT⁴ (Stefan-Boltzmann; see stefan_boltzmann.esm), and the wavelength where F_B_λ is maximized is λ_max = b/T (Wien's law; see wien.esm). At the default solar-peak (T=5800, λ=500 nm), F_B_λ ≈ 8.46e13 W/m³ — the canonical solar-peak spectral irradiance per unit wavelength used in radiative-transfer codes to bin solar energy across the visible band. At the Earth-thermal peak (T=300, λ=10 μm), F_B_λ ≈ 3.12e7 W/m³ — the canonical longwave outgoing radiation peak driving the planetary energy balance (S&P Eq. 4.6 / planetary_energy_balance.esm)."
        }
      },
      "equations": [
        {
          "lhs": "F_B_λ",
          "rhs": {
            "op": "/",
            "args": [
              {
                "op": "*",
                "args": [
                  2,
                  "π_val",
                  {
                    "op": "^",
                    "args": [
                      "c",
                      2
                    ]
                  },
                  "h",
                  {
                    "op": "^",
                    "args": [
                      "λ",
                      -5
                    ]
                  }
                ]
              },
              {
                "op": "-",
                "args": [
                  {
                    "op": "exp",
                    "args": [
                      {
                        "op": "/",
                        "args": [
                          {
                            "op": "*",
                            "args": [
                              "c",
                              "h"
                            ]
                          },
                          {
                            "op": "*",
                            "args": [
                              "k_B",
                              "λ",
                              "T"
                            ]
                          }
                        ]
                      }
                    ]
                  },
                  1
                ]
              }
            ]
          }
        }
      ]
    },
    "wien": {
      "variables": {
        "b": {
          "type": "parameter",
          "units": "m*K",
          "default": 0.002897,
          "description": "Wien's displacement constant (S&P Page 100, 4-digit-rounded CODATA). The proportionality between blackbody temperature and peak emission wavelength in λ_max = b/T. The upstream default 2.897e-3 m·K is the historical 4-digit-rounded value; the modern CODATA-2018 value is 2.897771955e-3 m·K which round-trips to 2.898e-3 at four-digit precision (the upstream choice of 2.897 reflects the pre-2014 CODATA value before the latest least-squares adjustment). The constant follows analytically from the transcendental equation x = 5(1-e^(-x)) where x = hc/(kλT) gives x ≈ 4.965114, so b = hc/(k·x) — anchored by the fundamental constants h (Planck), c (speed of light), k_B (Boltzmann)."
        },
        "T": {
          "type": "parameter",
          "units": "K",
          "default": 5800.0,
          "description": "Temperature of the emitting blackbody (S&P Page 100). The upstream default 5800.0 K is the Sun's effective surface temperature (the temperature of an ideal blackbody emitting the same total radiative flux as the Sun) — sometimes given as 5778 K (the modern IAU 2015 value) but the upstream uses the classic 5800 K round figure. At this temperature, Wien's law gives λ_max = 2.897e-3/5800 = 499.5 nm, the yellow-green visible peak that anchors the human visual system's evolved sensitivity range. Other canonical temperatures: 300 K (Earth surface) → 9.66 μm thermal-IR, 3 K (CMB) → 0.97 mm microwave, 1e6 K (stellar corona/X-ray emission line region) → 2.9 nm soft X-ray."
        },
        "λ_max": {
          "type": "unknown",
          "units": "m",
          "description": "Peak emission wavelength of the blackbody at temperature T (S&P Eq. 4.3). λ_max is the wavelength at which the Planck spectral function dF_Bλ/dλ = 0 — the maximum of the spectral emission curve. The temperature-inverse scaling λ_max ∝ 1/T means hotter sources emit at shorter wavelengths: the canonical fact behind the visible spectrum of stars (red giants vs blue dwarfs), the color of a heated metal as it warms from red-hot to white-hot, and the separation of solar (shortwave) from terrestrial (longwave) radiation that anchors the planetary energy balance in S&P Chapter 4. The peak wavelength is one of three derived quantities from the Planck function (peak λ_max from Wien, total flux F_B from Stefan-Boltzmann, spectral shape F_Bλ from Planck itself) that together characterize blackbody emission."
        }
      },
      "equations": [
        {
          "lhs": "λ_max",
          "rhs": {
            "op": "/",
            "args": [
              "b",
              "T"
            ]
          }
        }
      ]
    },
    "stefan_boltzmann": {
      "variables": {
        "T": {
          "type": "parameter",
          "units": "K",
          "default": 255.0,
          "description": "Temperature (input parameter; default 255 K is Earth's equilibrium temperature per S&P Page 101)"
        },
        "σ": {
          "type": "parameter",
          "units": "W/(m^2*K^4)",
          "default": 5.671e-08,
          "description": "Stefan-Boltzmann constant (upstream `@constants` value 5.671×10⁻⁸ W·m⁻²·K⁻⁴ from S&P Page 101; encoded as a fixed-default parameter per rig convention)"
        },
        "F_B": {
          "type": "unknown",
          "units": "W/m^2",
          "description": "Total blackbody emissive power (Eq. 4.4): F_B = σ·T^4 integrated over all wavelengths."
        }
      },
      "equations": [
        {
          "lhs": "F_B",
          "rhs": {
            "op": "*",
            "args": [
              "σ",
              {
                "op": "^",
                "args": [
                  "T",
                  4
                ]
              }
            ]
          }
        }
      ]
    },
    "energy_balance": {
      "variables": {
        "sigma": {
          "type": "parameter",
          "units": "W/(m^2*K^4)",
          "default": 5.671e-08,
          "description": "Stefan-Boltzmann constant (Seinfeld & Pandis 2006 Eq. 4.4 / Ch. 4 §4.1) — upstream `@constants` sigma; the proportionality constant in the Stefan-Boltzmann law for emissive power of a blackbody. Default 5.671e-8 W/(m^2*K^4) matches the upstream Julia source verbatim; CODATA 2018 value is 5.670374419e-8 W/(m^2*K^4), within ~1e-4 relative of the upstream rounded value."
        },
        "S_0": {
          "type": "parameter",
          "units": "W/m^2",
          "default": 1370.0,
          "description": "Solar constant — total radiative flux per unit area at the top of Earth's atmosphere measured normal to the Sun's direction at 1 AU. Default 1370 W/m^2 matches the upstream Julia source and Seinfeld & Pandis 2006 p. 101; modern observation-derived total solar irradiance is ~1361 W/m^2 (Kopp & Lean 2011). The factor of 4 in Eq. 4.5 (`S_0/4 * (1 - R_p)`) is the ratio of Earth's geometric cross-section (pi*R^2) to its surface area (4*pi*R^2) — averages the per-area solar flux from the cross-section that intercepts the beam onto the full surface area."
        },
        "R_p": {
          "type": "parameter",
          "units": "1",
          "default": 0.3,
          "description": "Planetary albedo (dimensionless) — fraction of incident solar radiation reflected back to space by clouds, atmosphere, and surface. Default 0.3 matches the upstream Julia source and Seinfeld & Pandis 2006 p. 101 (the standard Earth-with-clouds value). The same upstream test family exercises R_p = 0.15 (Earth without clouds, T_e ~ 268 K), R_p = 0 (perfect absorber, T_e ~ 278.77 K), and R_p = 0.99 (near-perfect reflector, T_e ~ 88.16 K)."
        },
        "F_S": {
          "type": "unknown",
          "units": "W/m^2",
          "default": 240.0,
          "description": "Absorbed solar flux at the top of atmosphere averaged over Earth's surface (Seinfeld & Pandis Eq. 4.5): F_S = S_0/4 * (1 - R_p). Default initial value 240 W/m^2 matches the upstream Julia source `F_S(t) = 240.0` — the convergence target near 239.75 W/m^2 at the canonical defaults (S_0 = 1370, R_p = 0.3). At equilibrium F_S = F_L (Eq. 4.7)."
        },
        "F_L": {
          "type": "unknown",
          "units": "W/m^2",
          "default": 240.0,
          "description": "Emitted longwave (terrestrial) radiative flux at the top of atmosphere (Seinfeld & Pandis Eq. 4.6, Stefan-Boltzmann law): F_L = sigma * T_e^4. Default initial value 240 W/m^2 matches the upstream Julia source `F_L(t) = 240.0`. At equilibrium F_L = F_S (Eq. 4.7); the migrated algebraic chain enforces this by composition through T_e."
        },
        "T_e": {
          "type": "unknown",
          "units": "K",
          "default": 255.0,
          "description": "Planetary equilibrium temperature (Seinfeld & Pandis Eq. 4.7): the temperature at which the emitted longwave flux F_L = sigma * T_e^4 balances the absorbed solar flux F_S = S_0/4 * (1 - R_p). Closed-form: T_e = (S_0/4 * (1 - R_p) / sigma)^(1/4). Default initial value 255 K matches the upstream Julia source `T_e(t) = 255.0` — the convergence target at the canonical defaults (S_0 = 1370, R_p = 0.3); upstream Julia `NonlinearProblem` uses 250 K as the initial guess and converges to ~254.99 K (book value 255 K)."
        }
      },
      "equations": [
        {
          "lhs": "F_S",
          "rhs": {
            "op": "*",
            "args": [
              {
                "op": "/",
                "args": [
                  "S_0",
                  4.0
                ]
              },
              {
                "op": "-",
                "args": [
                  1.0,
                  "R_p"
                ]
              }
            ]
          }
        },
        {
          "lhs": "T_e",
          "rhs": {
            "op": "^",
            "args": [
              {
                "op": "/",
                "args": [
                  "F_S",
                  "sigma"
                ]
              },
              0.25
            ]
          }
        },
        {
          "lhs": "F_L",
          "rhs": {
            "op": "*",
            "args": [
              "sigma",
              {
                "op": "^",
                "args": [
                  "T_e",
                  4.0
                ]
              }
            ]
          }
        }
      ]
    },
    "climate_sensitivity": {
      "variables": {
        "σ": {
          "type": "parameter",
          "units": "W/(m^2*K^4)",
          "default": 5.671e-08,
          "description": "Stefan-Boltzmann constant (S&P Page 101). The proportionality between blackbody temperature and total emitted radiative power per unit area. The upstream default 5.671e-8 W/(m^2·K^4) is the CODATA value rounded to four significant figures (the modern CODATA-2018 value is 5.670374...e-8, which round-trips to 5.671e-8 at four-digit precision)."
        },
        "T_e": {
          "type": "parameter",
          "units": "K",
          "default": 255.0,
          "description": "Reference equilibrium temperature for the climate-sensitivity expansion (S&P Page 104). 255 K is Earth's no-greenhouse effective radiating temperature — the temperature a perfect blackbody planet receiving Earth's net solar flux F_S = (1-R_p)·S_0/4 ≈ 240 W/m^2 would have. The actual Earth's surface temperature (~288 K) exceeds T_e by the greenhouse-effect warming of ~33 K. Climate-sensitivity diagnostics are conventionally evaluated at T_e (the planetary radiative balance temperature) rather than at the surface — F_L = σ·T_e^4 must match F_S at radiative equilibrium."
        },
        "ΔF_S": {
          "type": "parameter",
          "units": "W/m^2",
          "default": 4.0,
          "description": "Perturbation to the absorbed solar flux (S&P Eq. 4.8). Positive ΔF_S means more solar energy absorbed (e.g., reduced cloud albedo, reduced ice cover, increased solar luminosity). The upstream default 4.0 W/m^2 is a representative CO2-doubling-equivalent forcing — close to but slightly smaller than the often-cited 4.6 W/m^2 CO2-doubling estimate the upstream test uses for the secondary canonical case."
        },
        "ΔF_L": {
          "type": "parameter",
          "units": "W/m^2",
          "default": 0.0,
          "description": "Perturbation to the emitted longwave flux (S&P Eq. 4.8). Positive ΔF_L means more longwave radiation escaping to space (e.g., reduced opacity of the atmosphere). The default ΔF_L = 0.0 places the full forcing on the solar side, isolating the temperature response to a pure ΔF_S perturbation."
        },
        "ΔF_net": {
          "type": "unknown",
          "units": "W/m^2",
          "description": "Net radiative-forcing perturbation, ΔF_net = ΔF_S - ΔF_L (S&P Eq. 4.8). Positive ΔF_net means the planet receives more net incoming energy than the reference state and must warm to restore balance. This is the input to the linear climate-sensitivity relation ΔT_e = λ_0·ΔF_net."
        },
        "ΔT_e": {
          "type": "unknown",
          "units": "K",
          "description": "Change in equilibrium temperature responding to the net radiative forcing (S&P Eq. 4.9). ΔT_e = λ_0·ΔF_net is the linear-response approximation of the (small-perturbation) temperature change. At Earth's T_e = 255 K, λ_0 ≈ 0.27 K·m^2/W, so a 4 W/m^2 forcing (≈ CO2 doubling) gives ΔT_e ≈ 1.06 K — the no-feedback Planck response, against which feedback-amplified ΔT_e estimates (~1.5-4.5 K for CO2 doubling per IPCC) are conventionally reported."
        },
        "λ_0": {
          "type": "unknown",
          "units": "K*m^2/W",
          "description": "Climate-sensitivity factor in the no-feedback (Planck) limit (S&P Eq. 4.10). λ_0 = 1 / (4·σ·T_e^3) is the analytic inverse of dF_L/dT_e at the reference state — the temperature change per unit radiative forcing that holds when no feedbacks amplify or damp the response. Equivalently λ_0 = T_e / (4·F_L), where F_L is the reference longwave flux. At Earth's T_e = 255 K, λ_0 ≈ 0.27 K·m^2/W; a 1 K cooler T_e would raise λ_0 by ~1% (∂λ_0/∂T_e = -3·λ_0/T_e). The factor is the baseline against which feedback-amplified sensitivities are reported — IPCC equilibrium climate sensitivity ECS = λ·ΔF_2xCO2 where λ ≈ 2-6 × λ_0 captures water vapor, lapse rate, albedo, and cloud feedbacks."
        },
        "F_L": {
          "type": "unknown",
          "units": "W/m^2",
          "description": "Reference longwave flux at the reference temperature, F_L = σ·T_e^4 (Stefan-Boltzmann law applied at T_e). At Earth's T_e = 255 K, F_L ≈ 239.78 W/m^2 — matches (within rounding) the absorbed solar flux F_S ≈ 239.75 W/m^2 (S&P p. 101: F_S = (1-R_p)·S_0/4 at R_p=0.3, S_0=1370 W/m^2). Exposed as a state variable so the alternative form λ_0 = T_e / (4·F_L) can be verified directly against λ_0 = 1 / (4·σ·T_e^3) — they are algebraically identical (multiply numerator and denominator of the second form by T_e to get the first)."
        }
      },
      "equations": [
        {
          "lhs": "ΔF_net",
          "rhs": {
            "op": "-",
            "args": [
              "ΔF_S",
              "ΔF_L"
            ]
          }
        },
        {
          "lhs": "λ_0",
          "rhs": {
            "op": "/",
            "args": [
              1,
              {
                "op": "*",
                "args": [
                  4,
                  "σ",
                  {
                    "op": "^",
                    "args": [
                      "T_e",
                      3
                    ]
                  }
                ]
              }
            ]
          }
        },
        {
          "lhs": "ΔT_e",
          "rhs": {
            "op": "*",
            "args": [
              "λ_0",
              "ΔF_net"
            ]
          }
        },
        {
          "lhs": "F_L",
          "rhs": {
            "op": "*",
            "args": [
              "σ",
              {
                "op": "^",
                "args": [
                  "T_e",
                  4
                ]
              }
            ]
          }
        }
      ]
    },
    "toa_forcing": {
      "variables": {
        "S_0": {
          "type": "parameter",
          "units": "W/m^2",
          "default": 1370.0,
          "description": "Solar constant — the time-averaged solar irradiance at the top of Earth's atmosphere measured perpendicular to the Sun-Earth line (Seinfeld & Pandis 2006 Page 100, IPCC TAR canonical value). Modern accepted value from CODATA / TIM satellite measurements is ~1361 W/m²; the upstream uses the round 1370 W/m² for textbook consistency. Drives the absorbed solar flux F_S via the planetary-cross-section factor 1/4."
        },
        "R_p": {
          "type": "parameter",
          "units": "1",
          "default": 0.3,
          "description": "Planetary albedo (dimensionless) — the fraction of incoming solar flux reflected back to space by clouds (~2/3), ice/snow, ocean, and land surfaces. Default 0.3 is Earth's Bond albedo including clouds (S&P Page 101). Removing clouds gives R_p ≈ 0.15 (T_e ≈ 268 K, S&P Page 102); the no-cloud / no-ice limit gives R_p ≈ 0.07 (just ocean / land surface reflection); the all-ice snowball-Earth limit gives R_p ≈ 0.6+ (T_e ≈ 220 K). The (1-R_p) factor in F_S is the fraction of incoming solar absorbed by the planet."
        },
        "F_L": {
          "type": "parameter",
          "units": "W/m^2",
          "default": 239.75,
          "description": "Emitted longwave flux at TOA (W/m²) — the outgoing thermal radiation the planet emits, treated here as an input parameter. Default 239.75 W/m² is chosen to exactly balance F_S at the default solar constant and albedo (radiative equilibrium F_net = 0). In a coupled system, F_L would be computed by the sibling StefanBoltzmann component as σT_e^4 with T_e ≈ 255 K (5.671e-8 · 255^4 ≈ 239.75 W/m²). A consumer studying a forcing scenario can override F_L: e.g. doubling CO₂ raises F_L by ~4-5 W/m² instantaneously before the surface temperature responds (S&P Page 105 quotes 4.6 W/m² for CO₂ doubling), producing a transient negative F_net ≈ -4 W/m² that drives subsequent warming."
        },
        "F_net": {
          "type": "unknown",
          "units": "W/m^2",
          "description": "Net radiative flux at TOA (W/m²) — F_net = F_S - F_L. Positive: planet gaining energy (warming). Negative: planet losing energy (cooling). At Earth's default radiative-balance parameters F_net = 0 exactly. The IPCC AR6 estimate of the present-day Earth-system energy imbalance is +0.79 W/m² (2006-2018, Forster et al. 2021), consistent with ongoing greenhouse-driven warming."
        },
        "F_S": {
          "type": "unknown",
          "units": "W/m^2",
          "description": "Absorbed solar flux at TOA (W/m²) — F_S = S_0/4 · (1 - R_p). The factor 1/4 is the planetary geometric correction (planet intercepts solar flux over πR² but emits over 4πR²); the factor (1 - R_p) is the fraction of incoming solar absorbed (1 minus reflected). At Earth's defaults: F_S = 1370/4 · 0.7 = 239.75 W/m²."
        }
      },
      "equations": [
        {
          "lhs": "F_S",
          "rhs": {
            "op": "*",
            "args": [
              {
                "op": "/",
                "args": [
                  "S_0",
                  4.0
                ]
              },
              {
                "op": "-",
                "args": [
                  1.0,
                  "R_p"
                ]
              }
            ]
          }
        },
        {
          "lhs": "F_net",
          "rhs": {
            "op": "-",
            "args": [
              "F_S",
              "F_L"
            ]
          }
        }
      ]
    }
  },
  "tests": [
    {
      "id": "composed_default_canonical_all_subsystems",
      "description": "Canonical default-parameter run of the composed system. Reproduces the intent of the upstream `Structural: RadiationFundamentals composed system` test (test/radiation_fundamentals_test.jl:12-28, which asserts the 7 named subsystems photon/blackbody/wien/stefan_boltzmann/energy_balance/climate_sensitivity/toa_forcing) by exercising one canonical output of every one of the 7 subsystems through the dot-namespaced flattened system: photon at the 500 nm visible-green default (ν, Δε), blackbody at T=5800 K / λ=500 nm (F_B_λ), wien at T=5800 K (λ_max), stefan_boltzmann at T=255 K (F_B), energy_balance at S_0=1370 / R_p=0.3 (F_S, T_e, F_L), climate_sensitivity at ΔF_S=4.0 (ΔF_net, λ_0, ΔT_e, F_L), toa_forcing at the radiative-equilibrium defaults (F_S, F_net≈0). Every value is cross-checked against the pinned values in the standalone subsystem .esm files (agreement to last-ULP).",
      "parameter_overrides": {},
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.photon.ν",
          "time": 0.0,
          "expected": 599580000000000.0
        },
        {
          "variable": "RadiationFundamentals.photon.Δε",
          "time": 0.0,
          "expected": 3.97281708e-19
        },
        {
          "variable": "RadiationFundamentals.blackbody.F_B_λ",
          "time": 0.0,
          "expected": 84565887378394.64
        },
        {
          "variable": "RadiationFundamentals.wien.λ_max",
          "time": 0.0,
          "expected": 4.994827586206896e-07
        },
        {
          "variable": "RadiationFundamentals.stefan_boltzmann.F_B",
          "time": 0.0,
          "expected": 239.78409294375
        },
        {
          "variable": "RadiationFundamentals.energy_balance.F_S",
          "time": 0.0,
          "expected": 239.74999999999997
        },
        {
          "variable": "RadiationFundamentals.energy_balance.T_e",
          "time": 0.0,
          "expected": 254.99093542432257
        },
        {
          "variable": "RadiationFundamentals.energy_balance.F_L",
          "time": 0.0,
          "expected": 239.74999999999997
        },
        {
          "variable": "RadiationFundamentals.climate_sensitivity.ΔF_net",
          "time": 0.0,
          "expected": 4.0
        },
        {
          "variable": "RadiationFundamentals.climate_sensitivity.λ_0",
          "time": 0.0,
          "expected": 0.2658641747972617
        },
        {
          "variable": "RadiationFundamentals.climate_sensitivity.ΔT_e",
          "time": 0.0,
          "expected": 1.0634566991890468
        },
        {
          "variable": "RadiationFundamentals.climate_sensitivity.F_L",
          "time": 0.0,
          "expected": 239.78409294375
        },
        {
          "variable": "RadiationFundamentals.toa_forcing.F_S",
          "time": 0.0,
          "expected": 239.74999999999997
        },
        {
          "variable": "RadiationFundamentals.toa_forcing.F_net",
          "time": 0.0,
          "expected": 0.0,
          "tolerance": {
            "abs": 1e-12
          }
        }
      ]
    },
    {
      "id": "upstream_analytical_composed_solves",
      "description": "Reproduces the upstream `Analytical: RadiationFundamentals composed system solves` test (test/radiation_fundamentals_test.jl:473-496). The upstream test compiles the composed system, solves it with the initial guess `radiation.energy_balance.T_e => 250.0`, and asserts `isapprox(sol[radiation.energy_balance.T_e], 255.0, rtol = 1.0e-2)` (Eq. 4.7, S&P p. 101). The migrated energy_balance subsystem uses the closed-form algebraic chain so no initial guess is needed; energy_balance.T_e is pinned both to the exact computed value 254.9909354243226 K (rel=1e-9) and to the upstream book value 255 K at the upstream rel=1.0e-2 bound.",
      "parameter_overrides": {},
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.energy_balance.T_e",
          "time": 0.0,
          "expected": 254.99093542432257
        },
        {
          "variable": "RadiationFundamentals.energy_balance.T_e",
          "time": 0.0,
          "expected": 255.0,
          "tolerance": {
            "rel": 0.01
          }
        }
      ]
    },
    {
      "id": "photon_uv_300nm_namespace_isolation",
      "description": "Overrides RadiationFundamentals.photon.λ to 3.0e-7 m (UV-B, the Hartley-Huggins ozone-photolysis band). Reproduces the UV case of the upstream `Equation: PhotonEnergy (Eq. 4.1)` test (test/radiation_fundamentals_test.jl:113-118; upstream asserts ν≈9.993e14 Hz and Δε≈6.622e-19 J at rtol=1e-3) and additionally pins blackbody.F_B_λ UNCHANGED at its λ=5.0e-7 m default value — the photon and blackbody subsystems each carry their own independent `λ` parameter, and the fully-namespaced override must not leak across the subsystem boundary.",
      "parameter_overrides": {
        "RadiationFundamentals.photon.λ": 3e-07
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.photon.ν",
          "time": 0.0,
          "expected": 999300000000000.0
        },
        {
          "variable": "RadiationFundamentals.photon.Δε",
          "time": 0.0,
          "expected": 6.6213618e-19
        },
        {
          "variable": "RadiationFundamentals.blackbody.F_B_λ",
          "time": 0.0,
          "expected": 84565887378394.64
        }
      ]
    },
    {
      "id": "blackbody_earth_thermal_10um",
      "description": "Overrides blackbody.T to 300 K (Earth surface) and blackbody.λ to 1.0e-5 m (10 μm, the thermal-IR Earth-emission peak). Reproduces the Earth case of the upstream `Equation: BlackbodyRadiation (Eq. 4.2)` test (test/radiation_fundamentals_test.jl:161-164; upstream asserts F_B_λ≈3.13e7 W/m^3 at rtol=5e-2). Pinned here at rel=1e-9 to the exact value 31217606.963872716 W/m^3.",
      "parameter_overrides": {
        "RadiationFundamentals.blackbody.T": 300.0,
        "RadiationFundamentals.blackbody.λ": 1e-05
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.blackbody.F_B_λ",
          "time": 0.0,
          "expected": 31217606.963872716
        }
      ]
    },
    {
      "id": "blackbody_temperature_namespace_isolation",
      "description": "Overrides only blackbody.T to 300 K (leaving blackbody.λ at the 5.0e-7 m default, where a 300 K body emits negligibly — F_B_λ ≈ 2.7e-26 W/m^3, the deep Wien tail). Pins wien.λ_max and stefan_boltzmann.F_B UNCHANGED at their respective T=5800 K and T=255 K defaults: blackbody, wien, and stefan_boltzmann each carry an independent `T` parameter, and the fully-namespaced override on blackbody.T must not perturb the sibling subsystems.",
      "parameter_overrides": {
        "RadiationFundamentals.blackbody.T": 300.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.blackbody.F_B_λ",
          "time": 0.0,
          "expected": 2.708496908180942e-26
        },
        {
          "variable": "RadiationFundamentals.wien.λ_max",
          "time": 0.0,
          "expected": 4.994827586206896e-07
        },
        {
          "variable": "RadiationFundamentals.stefan_boltzmann.F_B",
          "time": 0.0,
          "expected": 239.78409294375
        }
      ]
    },
    {
      "id": "wien_terrestrial_peak_300K",
      "description": "Overrides wien.T to 300 K (Earth surface). Reproduces the Earth case of the upstream `Equation: WienDisplacement (Eq. 4.3)` test (test/radiation_fundamentals_test.jl:130-133; upstream asserts λ_max≈10 μm at rtol=5e-2). Pinned at rel=1e-9 to b/T = 2.897e-3/300 = 9.656666666666667e-6 m — the thermal-IR peak that, paired with the 5800 K solar peak at ~500 nm, anchors the shortwave/longwave separation underpinning the planetary energy balance.",
      "parameter_overrides": {
        "RadiationFundamentals.wien.T": 300.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.wien.λ_max",
          "time": 0.0,
          "expected": 9.656666666666667e-06
        }
      ]
    },
    {
      "id": "wien_extreme_hot_xray_1e6K",
      "description": "Overrides wien.T to 1.0e6 K (stellar-corona / X-ray emission regime). Reproduces the hot case of the upstream `Limiting: Wien's law at extreme temperatures` test (test/radiation_fundamentals_test.jl:274-277; upstream asserts λ_max < 1.0e-8 m). Pinned at rel=1e-9 to b/T = 2.897e-3/1e6 = 2.897e-9 m, in the soft X-ray band.",
      "parameter_overrides": {
        "RadiationFundamentals.wien.T": 1000000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.wien.λ_max",
          "time": 0.0,
          "expected": 2.897e-09
        }
      ]
    },
    {
      "id": "wien_extreme_cold_cmb_3K",
      "description": "Overrides wien.T to 3.0 K (cosmic-microwave-background temperature). Reproduces the cold case of the upstream `Limiting: Wien's law at extreme temperatures` test (test/radiation_fundamentals_test.jl:280-283; upstream asserts λ_max > 1.0e-4 m and λ_max≈9.66e-4 m at rtol=1e-2). Pinned at rel=1e-9 to b/T = 2.897e-3/3 = 9.656666666666666e-4 m, in the microwave band.",
      "parameter_overrides": {
        "RadiationFundamentals.wien.T": 3.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.wien.λ_max",
          "time": 0.0,
          "expected": 0.0009656666666666666
        }
      ]
    },
    {
      "id": "stefan_boltzmann_solar_temperature_5800K",
      "description": "Overrides stefan_boltzmann.T to 5800 K (the Sun's effective surface temperature). Reproduces the solar case of the upstream `Equation: StefanBoltzmann (Eq. 4.4)` test (test/radiation_fundamentals_test.jl:145-148; upstream asserts F_B≈6.42e7 W/m^2 at rtol=1e-2). Pinned at rel=1e-9 to σ·T^4 = 5.671e-8 · 5800^4 = 64175848.816 W/m^2.",
      "parameter_overrides": {
        "RadiationFundamentals.stefan_boltzmann.T": 5800.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.stefan_boltzmann.F_B",
          "time": 0.0,
          "expected": 64175848.816
        }
      ]
    },
    {
      "id": "energy_balance_no_clouds_R_p_0_15",
      "description": "Overrides energy_balance.R_p to 0.15 (Earth without clouds — surface and atmosphere albedo only). Reproduces the second case of the upstream `Equation: PlanetaryEnergyBalance (Eqs. 4.5-4.7)` test (test/radiation_fundamentals_test.jl:178-181; upstream asserts T_e≈268 K at rtol=1e-2). Pins F_S = 1370/4·0.85 = 291.125 W/m^2, T_e = (291.125/5.671e-8)^(1/4) = 267.673 K, F_L = 291.125 W/m^2 (= F_S at equilibrium), and toa_forcing.F_S UNCHANGED at the R_p=0.3 default — energy_balance and toa_forcing carry independent `R_p` parameters.",
      "parameter_overrides": {
        "RadiationFundamentals.energy_balance.R_p": 0.15
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.energy_balance.F_S",
          "time": 0.0,
          "expected": 291.125
        },
        {
          "variable": "RadiationFundamentals.energy_balance.T_e",
          "time": 0.0,
          "expected": 267.67324479035756
        },
        {
          "variable": "RadiationFundamentals.energy_balance.F_L",
          "time": 0.0,
          "expected": 291.125
        },
        {
          "variable": "RadiationFundamentals.toa_forcing.F_S",
          "time": 0.0,
          "expected": 239.74999999999997
        }
      ]
    },
    {
      "id": "energy_balance_zero_albedo_R_p_0_0",
      "description": "Overrides energy_balance.R_p to 0.0 (perfect absorber — no reflection). Reproduces the zero-albedo case of the upstream `Limiting: Equilibrium temperature at extreme albedo` test (test/radiation_fundamentals_test.jl:290-295; upstream asserts T_e > 270 K). Pins F_S = 1370/4·1.0 = 342.5 W/m^2 and T_e = (342.5/5.671e-8)^(1/4) = 278.773 K — the upper bound on equilibrium temperature at the canonical solar constant.",
      "parameter_overrides": {
        "RadiationFundamentals.energy_balance.R_p": 0.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.energy_balance.F_S",
          "time": 0.0,
          "expected": 342.5
        },
        {
          "variable": "RadiationFundamentals.energy_balance.T_e",
          "time": 0.0,
          "expected": 278.7726940675581
        }
      ]
    },
    {
      "id": "energy_balance_high_solar_constant_1800",
      "description": "Overrides energy_balance.S_0 to 1800 W/m^2 (the upper end of the upstream `Qualitative: T_e increases with increasing solar constant` sweep, test/radiation_fundamentals_test.jl:355-374). Pins F_S = 1800/4·0.7 = 315.0 W/m^2 and T_e = (315/5.671e-8)^(1/4) = 273.000 K — substantially warmer than the canonical 255 K, anchoring the T_e ∝ S_0^(1/4) scaling.",
      "parameter_overrides": {
        "RadiationFundamentals.energy_balance.S_0": 1800.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.energy_balance.F_S",
          "time": 0.0,
          "expected": 315.0
        },
        {
          "variable": "RadiationFundamentals.energy_balance.T_e",
          "time": 0.0,
          "expected": 273.0000500276826
        }
      ]
    },
    {
      "id": "climate_sensitivity_co2_doubling_4_6",
      "description": "Overrides climate_sensitivity.ΔF_S to 4.6 W/m^2 (the S&P p. 105 CO2-doubling radiative forcing). Reproduces the CO2-doubling case of the upstream `Equation: ClimateSensitivity (Eqs. 4.8-4.10)` test (test/radiation_fundamentals_test.jl:199-201; upstream asserts ΔT_e≈1.22 K at rtol=0.05). Pins ΔF_net = 4.6 W/m^2, λ_0 = 1/(4σT_e^3) = 0.26586 K·m^2/W (unchanged from default — λ_0 depends only on T_e), and ΔT_e = λ_0·ΔF_net = 1.22298 K — the no-feedback Planck temperature response.",
      "parameter_overrides": {
        "RadiationFundamentals.climate_sensitivity.ΔF_S": 4.6
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.climate_sensitivity.ΔF_net",
          "time": 0.0,
          "expected": 4.6
        },
        {
          "variable": "RadiationFundamentals.climate_sensitivity.λ_0",
          "time": 0.0,
          "expected": 0.2658641747972617
        },
        {
          "variable": "RadiationFundamentals.climate_sensitivity.ΔT_e",
          "time": 0.0,
          "expected": 1.2229752040674038
        }
      ]
    },
    {
      "id": "climate_sensitivity_zero_forcing",
      "description": "Overrides climate_sensitivity.ΔF_S and ΔF_L both to 0.0 W/m^2. Reproduces the upstream `Steady-State: ClimateSensitivity zero forcing gives zero response` test (test/radiation_fundamentals_test.jl:252-262; upstream asserts ΔT_e≈0 and ΔF_net≈0 at atol=1e-10). With no net radiative forcing the temperature response is exactly zero; asserted with abs=1e-12 since a relative tolerance is undefined at zero.",
      "parameter_overrides": {
        "RadiationFundamentals.climate_sensitivity.ΔF_S": 0.0,
        "RadiationFundamentals.climate_sensitivity.ΔF_L": 0.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.climate_sensitivity.ΔF_net",
          "time": 0.0,
          "expected": 0.0,
          "tolerance": {
            "abs": 1e-12
          }
        },
        {
          "variable": "RadiationFundamentals.climate_sensitivity.ΔT_e",
          "time": 0.0,
          "expected": 0.0,
          "tolerance": {
            "abs": 1e-12
          }
        }
      ]
    },
    {
      "id": "climate_sensitivity_alt_form_T_e_300",
      "description": "Overrides climate_sensitivity.T_e to 300 K. Reproduces the T_e=300 K case of the upstream `Analytical: Climate sensitivity factor alternative form (Eq. 4.10)` test (test/radiation_fundamentals_test.jl:455-470), which verifies λ_0 = 1/(4σT_e^3) equals T_e/(4·F_L). Pins λ_0 = 0.16327383634736833 K·m^2/W and the reference longwave flux F_L = σ·T_e^4 = 459.351 W/m^2; the identity λ_0 = T_e/(4·F_L) = 300/(4·459.351) holds by construction.",
      "parameter_overrides": {
        "RadiationFundamentals.climate_sensitivity.T_e": 300.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.climate_sensitivity.λ_0",
          "time": 0.0,
          "expected": 0.16327383634736833
        },
        {
          "variable": "RadiationFundamentals.climate_sensitivity.F_L",
          "time": 0.0,
          "expected": 459.351
        }
      ]
    },
    {
      "id": "climate_sensitivity_alt_form_T_e_200",
      "description": "Overrides climate_sensitivity.T_e to 200 K. Reproduces the T_e=200 K case of the upstream `Analytical: Climate sensitivity factor alternative form (Eq. 4.10)` test (test/radiation_fundamentals_test.jl:455-470). Pins λ_0 = 0.5510491976723682 K·m^2/W and F_L = σ·T_e^4 = 90.736 W/m^2; the alternative form λ_0 = T_e/(4·F_L) = 200/(4·90.736) holds by construction. A colder reference temperature gives a larger climate-sensitivity factor (∂λ_0/∂T_e = -3λ_0/T_e < 0).",
      "parameter_overrides": {
        "RadiationFundamentals.climate_sensitivity.T_e": 200.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.climate_sensitivity.λ_0",
          "time": 0.0,
          "expected": 0.5510491976723682
        },
        {
          "variable": "RadiationFundamentals.climate_sensitivity.F_L",
          "time": 0.0,
          "expected": 90.736
        }
      ]
    },
    {
      "id": "toa_forcing_enhanced_greenhouse_F_L_250",
      "description": "Overrides toa_forcing.F_L to 250.0 W/m^2 (enhanced greenhouse — more longwave trapped below, but here F_L is treated as the outgoing flux input so a larger F_L drives F_net negative). Reproduces the upstream `Equation: TOARadiativeForcing (Eq. 4.11)` test's second case (test/radiation_fundamentals_test.jl:214-217; upstream asserts F_net < 0). Pins F_S = 239.75 W/m^2 (unchanged) and F_net = F_S - F_L = 239.75 - 250.0 = -10.25 W/m^2 — the planet losing more energy than it absorbs.",
      "parameter_overrides": {
        "RadiationFundamentals.toa_forcing.F_L": 250.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.toa_forcing.F_S",
          "time": 0.0,
          "expected": 239.74999999999997
        },
        {
          "variable": "RadiationFundamentals.toa_forcing.F_net",
          "time": 0.0,
          "expected": -10.250000000000028
        }
      ]
    },
    {
      "id": "toa_forcing_high_solar_namespace_isolation",
      "description": "Overrides toa_forcing.S_0 to 1800 W/m^2. Pins toa_forcing.F_S = 1800/4·0.7 = 315.0 W/m^2, toa_forcing.F_net = F_S - F_L = 315.0 - 239.75 = 75.25 W/m^2 (strong positive imbalance — planet gaining energy), and energy_balance.F_S UNCHANGED at 239.75 W/m^2 — energy_balance and toa_forcing carry independent `S_0` parameters and the fully-namespaced override must not leak across the subsystem boundary.",
      "parameter_overrides": {
        "RadiationFundamentals.toa_forcing.S_0": 1800.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.toa_forcing.F_S",
          "time": 0.0,
          "expected": 315.0
        },
        {
          "variable": "RadiationFundamentals.toa_forcing.F_net",
          "time": 0.0,
          "expected": 75.25
        },
        {
          "variable": "RadiationFundamentals.energy_balance.F_S",
          "time": 0.0,
          "expected": 239.74999999999997
        }
      ]
    },
    {
      "id": "toa_forcing_zero_albedo_R_p_0_0",
      "description": "Overrides toa_forcing.R_p to 0.0 (perfect absorber). Pins toa_forcing.F_S = 1370/4·1.0 = 342.5 W/m^2 and toa_forcing.F_net = F_S - F_L = 342.5 - 239.75 = 102.75 W/m^2 — the maximum top-of-atmosphere energy gain at the canonical solar constant and equilibrium longwave flux.",
      "parameter_overrides": {
        "RadiationFundamentals.toa_forcing.R_p": 0.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "RadiationFundamentals.toa_forcing.F_S",
          "time": 0.0,
          "expected": 342.5
        },
        {
          "variable": "RadiationFundamentals.toa_forcing.F_net",
          "time": 0.0,
          "expected": 102.75
        }
      ]
    }
  ]
}