Executable reference implementation of the orbital-thermal-bounds radiator model (Lee-Odinson, 2026)
Project description
Wiki · Installation · Run the Simulation · Verification
Thermodynamic Bounds and Mass-Trade Criteria for Heat Rejection in Orbital Data Centers
Machine-verified thermodynamic bounds for orbital data-center thermal architecture, plus an audited Python simulation package that extends the analytic results to time-dependent, environment-coupled radiator behavior. This repository contains three things: the bounds preprint and its proofs, the AI1 design-point companion paper, and the orbital_thermal package — a reduced-order radiator model whose headline result is a quantified correction to a published peer model.
Bounds preprint: DOI 10.5281/zenodo.20650893
AI1 companion paper: DOI 10.5281/zenodo.20670771
Edge-On Geometry preprint DOI 10.5281/zenodo.20695720
Author: Dan Lee-Odinson (ORCID 0009-0009-9504-0796) | dan.lee.odinson@gmail.com
Scope. This package provides mathematical, computational, software, and cross-model verification for a reduced-order, one-node radiator model. It is not validated against flown hardware and is not intended for flight design, certification, or safety-critical decisions. See
docs/VERIFICATION_AND_VALIDATION.md.
Key results
- +6.35 K correction to a public radiator model at its default edge-on geometry — McCalip's coded equilibrium 335.75 K → 342.10 K with the exact Earth view factor — decomposed into +5.77 K model-form geometry and +0.58 K a floating-point branch artifact (paper three).
- Exact tilted-plate-to-sphere edge-on Earth view factor 0.257773 per face at 550 km.
- A certified orbit-coupled transient solver: at periodic steady state ⟨T⁴⟩ = T_steady⁴, so a steady averaged-sink sizing under-predicts the orbital peak (up to several kelvin), not the mean.
Install
pip install -e ".[fluids]" # editable dev install; "[fluids]" adds the optional CoolProp coolant screen
Stable releases are published to PyPI: pip install orbital-thermal. PyPI always holds the stable release; the GitHub main branch may contain later development. You can also download a wheel from the Releases page. Full instructions: Wiki → Installation.
My role
This work was produced through a human-directed, multi-model AI workflow that I orchestrated and for which I take responsibility: derivation and implementation, literature-armed review, and an eight-round adversarial software review with independent computer-algebra verification. This is machine-executable verification and adversarial technical review — not formal human scholarly peer review. See Provenance.
Contents
- What this is
- The
orbital_thermalpackage - Repository layout
- Running the verification suites
- Paper three: the edge-on view-factor correction
- Companion paper: The AI1 Design Point
- Provenance · How to cite · License
Documentation
New to the project? Start with the GitHub Wiki for installation instructions, simulation examples, API guidance, verification steps, and troubleshooting.
For the complete technical record, see the preprints, source code, tests, and verification materials below.
What this is
Orbital data centers must reject waste heat by far-field thermal radiation, and the resulting radiator-area requirement is widely regarded as the binding engineering constraint on the concept. This work derives, within a gray-body effective-sink radiator model, a set of exact results governing that constraint:
- The Carnot efficiency evaluated at the environmental sink temperature (the "2.7 K cold reservoir" argument) is unattainable by any heat engine with a material cold reservoir at finite radiator area and positive throughput. Near-limit efficiencies command extreme area (a worked 99% example requires roughly 6.4 billion square meters per megawatt).
- Radiator area per unit work output is minimized, along the reversible lower envelope, at a cold-side temperature of exactly three quarters of the hot-side temperature, with a 25% efficiency ceiling. The nonzero-sink optimum satisfies a quintic with the exact implicit form T_c*/T_h = (3 + q⁴)/4, q = T_s/T_c*.
- Converting waste heat to work before rejecting it multiplies the required radiator area by at least (T_h/T_c)³. Equality requires reversible conversion and a zero-temperature sink.
- No cyclic system can sustain its compute load solely by reconverting its own waste heat.
- Radiator selection, heat-pump inclusion, and topping-cycle inclusion reduce to explicit mass-trade inequalities whose verdicts depend on empirical parameters but whose algebraic form does not.
The design implication: within the model, orbital thermal management is a temperature-architecture problem. The temperature at which heat finally leaves the system enters the area requirement quartically and dominates fixed-temperature efficiency optimization.
The orbital_thermal package (below) turns these static bounds into an executable, time-dependent model — and in doing so produces a new, independently verified result.
My role:
I selected and scoped the research questions, established acceptance criteria, directed the multi-model workflow, evaluated competing outputs, made revision and release decisions, integrated the papers and software, and take responsibility for the published results. AI systems were used for derivation support, drafting, implementation, research assistance, adversarial review, and computational verification.
The orbital_thermal package
A dependency-light Python package (src/orbital_thermal/) that implements the bounds as executable functions and extends them to the regime the analytic results do not cover: a panel with thermal mass whose effective radiative sink swings around the orbit. It is the simulation/modeling layer behind the papers, and it has been through nine rounds of adversarial review (eight remediation rounds plus a final pass; see Audit status).
Headline result: McCalip's edge-on geometry is ~6.35 K low at its own default
The package vendors and re-executes Andrew McCalip's open thoughts orbital-radiator model (frozen and SHA-256-pinned under external_models/) and substitutes the exact tilted-plate-to-sphere Earth view factor for his cos-tilt heuristic with a 5% edge-on floor. At his own default geometry (β = 90°, sun-tracking bifacial panel, 550 km), the panel is edge-on to Earth, where the heuristic underestimates the per-face view factor by ~12×. Correcting it moves his equilibrium temperature:
McCalip replicated equilibrium 335.749538028260 K
Exact-view-factor equilibrium 342.099222283610 K
Correction +6.349684255349 K
Exact edge-on per-face view factor 0.257772825310
This is a headline contribution, not a caveat: his replicated result is reproduced to floating-point roundoff, and the shift comes entirely from the view factor. The +6.35 K is the correction to the public code as executed; it decomposes into +5.77 K of model-form geometry (relative to the model's intended 5%-of-nadir floor) and +0.58 K of a floating-point cos(90°) branch artifact in the orbit average. The correction is positive at every sampled β and largest at the edge-on default.
This result, its decomposition, and an orbit-coupled transient extension are written up as a standalone preprint (paper three) in this repository: orbital-thermal-edge-on-correction.pdf, DOI 10.5281/zenodo.20695720. Its numbers are reproduced by verify_paper3.py against orbital-thermal==1.0.1.
Install
pip install -e . # core (numpy only)
pip install -e ".[fluids]" # adds CoolProp==7.2.0 for the ammonia coolant screen
Requires Python 3.10+.
Quickstart
from orbital_thermal import equilibrium, mccalip_exact_vf as mx, transient
from orbital_thermal.constants import SIGMA_SB
# 1. Static radiator sizing (AI1 primary operating point: 120 kW / 220 m^2)
T = equilibrium.equilibrium_temperature(Q=120e3, area=220.0, emissivity=0.91, T_sink=220.0)
# -> 337.1 K
# 2. The McCalip exact-view-factor correction table vs orbit beta angle
for row in mx.correction_table_vs_beta():
print(row["beta_deg"], round(row["delta_K"], 3)) # +6.35 K at beta = 90
# 3. Transient averaging-load bias with a certified periodic steady state
Q = 0.91 * SIGMA_SB * (337.1**4 - 220.0**4)
bias = transient.averaging_bias(
altitude_km=550, beta_deg=30, q_load=Q, areal_heat_capacity=8000.0,
tilt_deg=0, assume_sun_shielded=True) # raises unless fully certified
print(bias["transient_mean_K"], bias["peak_excess_over_steady_K"])
Module map
| Module | Purpose |
|---|---|
constants |
SI constants (full binary64 Stefan–Boltzmann σ) |
radiation |
Gray-body net flux, required area, area ratios |
equilibrium |
Equilibrium temperature and fixed-temperature capacity (inverses) |
bounds |
Theorems 1–5 / Corollary 2.1: Carnot non-attainability, the 3/4 rule, quintic optimum, conversion-area penalty, heat-pump identities |
environment |
Orbital period/radius and the exact tilted-plate-to-sphere view factor |
sink |
Orbit-varying effective sink, subpoint-albedo approximation, exact orbit-mean closed form |
transient |
One-node RK4 radiator solver, periodic-steady-state convergence + temporal-resolution certificate, averaging-load bias, areal heat-capacity provenance |
mccalip_replication |
Faithful replication of McCalip's heat balance |
mccalip_exact_vf |
The exact per-face view-factor correction and β-sweep table |
fluids |
CoolProp-backed ammonia coolant screen (pinned EOS, optional) |
Transient solver and convergence certificate
The one-node model C dT/dt = q_load − εσ(T⁴ − T_sink_eff(t)⁴) is marched with fixed-step RK4 and a positivity guard at every stage. simulate(..., check_time_resolution=True) returns a result only when it is certified along three independent axes:
- periodic closure — start-to-end orbit change below tolerance;
- scale-aware energy balance — orbit-mean net flux, as an equivalent temperature error, below tolerance (catches the high-thermal-inertia false-convergence trap that periodic closure alone misses);
- temporal resolution — the N-, 2N-, and 4N-step periodic solutions are independently converged and compared by a grid-free analytic forcing-quadrature certificate, direct N→4N summaries, and a pointwise waveform comparison on a common phase grid, with a conservative default safety factor. Peak-time/phase drift is reported separately (an amplitude bound does not bound peak timing).
time_residual_K is documented as a refinement-based error estimate, not a guaranteed continuum bound; the gate is made conservative by a default factor-of-two margin.
Verification and reproducibility
- Test suite: 259 passing, 3 intentional xfails (placeholders for the not-yet-implemented disk-integrated albedo model, pinned to
NotImplementedError). Runpytest. - Oracle freeze: the vendored McCalip model is SHA-256-pinned (
external_models/mccalip_thoughts/PINS.json), semantically regenerated via Node, and attested against the upstream GitHub blob; CI fails closed (ORACLE_REQUIRE_EXTERNAL=1). Published/oracle expected values are never edited to pass tests. - Thermophysics: ammonia properties are computed from a pinned CoolProp backend (HEOS, EOS key
Gao-JPCRD-2020), not transcribed; the generated table is hash-checked. - CI: tests on Python 3.10/3.11/3.12, an oracle-freeze job, and a wheel-license job (PEP 639, MIT-only wheel).
Audit status
The package passed an adversarial review cycle conducted by GPT-5.5 with independent Wolfram verification: eight remediation rounds and a final pass, ending in FULL PASS — AUDIT CLOSED at v1.0.0. The reviewer independently reproduced the +6.35 K headline correction every round, confirmed the analytic bounds symbolically, and verified the transient certificate against 8×–16×-resolution reference solutions across structured and randomized parameter sweeps (largest certified pointwise error 0.0046 K against a 0.01 K tolerance; zero exceedances). No P1/P2/blocking defect remains.
Repository layout
| Path | Description |
|---|---|
src/orbital_thermal/ |
The audited reduced-order radiator package (see module map above) |
tests/ |
Test suite (259 passing, 3 intentional xfails) |
external_models/ |
Vendored, SHA-256-pinned McCalip oracle + attestation |
scripts/ |
Plotting and helper scripts (figures, ammonia table, wheel-license check) |
results/ |
Generated figures and the ammonia property table |
docs/ |
McCalip replication and ammonia-model notes |
orbital-thermal-preprint.pdf / .tex |
The bounds preprint (paper one) and LaTeX source |
orbital-thermal-edge-on-correction.pdf / .tex |
The edge-on view-factor correction preprint (paper three) and source |
orbital-thermal-resolution-proof-v3.md |
Audited proof document with full revision history |
verify_suite.py / verify_suite.wl |
Independent Python and Wolfram verification suites (paper one) |
verify_paper3.py |
Paper-three verification script (view-factor decomposition, balances, transient bias) |
companion/ |
The AI1 design-point paper (paper two), source, and verification suite |
LICENSING.md |
Per-component license map |
Running the verification suites
Python (Python 3.10+, numpy):
python3 verify_suite.py # -> All assertions pass.
asserts every central numerical claim in the manuscript: the exact sink-corrected area ratios, the 3/4-rule optimum with second-order condition, the q⁴/3 shift identity at eight sink temperatures, the COP identities, and the conversion-area penalty bounds.
Wolfram Language (Mathematica or Wolfram Engine): open verify_suite.wl and evaluate blocks W1–W9 in order; each states its expected output. They verify the proofs symbolically (stationarity, the fixed-point contraction factor, the Theorem-1 divergence limits, the nonzero-sink penalty inequality, and the quintic root to 50 digits). The two suites are independent implementations.
Provenance
This work was produced through an iterative, adversarial workflow across multiple AI systems, orchestrated and directed by the author: derivations and drafting by Claude (Anthropic), literature-armed review by Perplexity deep research, and formal proof and software audits with independent computer-algebra verification by GPT-5.5 with the Wolfram plugin. The source and response documents record every correction from every audit round. The author takes responsibility for the result.
How to cite
Lee-Odinson, D. (2026). Thermodynamic Bounds and Mass-Trade Criteria for Heat Rejection in Orbital Data Centers. Zenodo. [Version 3] https://doi.org/10.5281/zenodo.20650893
@misc{leeodinson2026orbitalthermal,
author = {Lee-Odinson, Dan},
title = {Thermodynamic Bounds and Mass-Trade Criteria for
Heat Rejection in Orbital Data Centers},
year = {2026},
month = jun,
publisher = {Zenodo},
version = {v3},
doi = {10.5281/zenodo.20650893},
url = {https://doi.org/10.5281/zenodo.20650893},
note = {Preprint}
}
Paper three: The edge-on view-factor correction
A standalone preprint that builds on the package's headline result. It reproduces Andrew McCalip's public "Space Datacenters" radiator model to floating-point roundoff, then replaces only its approximate Earth view factor with the exact tilted-plate-to-sphere value at the model's own default (β = 90°, 550 km) edge-on geometry. The exact per-face view factor there is 0.25777; the public code produces an orbit-averaged 0.02118 (its intended 5% floor is 0.04237, halved by a cos(90°) floating-point branch), so the corrected equilibrium rises 335.75 K → 342.10 K (+6.35 K) — decomposed as +5.77 K geometry and +0.58 K implementation artifact. The paper also extends the static balance to an orbit-coupled one-node transient model and quantifies the averaging-load bias (mean ≤ steady by Jensen; peak excess up to several kelvin). It is offered as cross-model verification, not validation against a flown radiator.
Archived version: Zenodo DOI 10.5281/zenodo.20695720
Reproduce its numbers (requires the installed package):
python verify_paper3.py # decomposition, Tables 1-4, the periodic identity
How to cite paper three
Lee-Odinson, D. (2026). Edge-On Geometry Raises a Public Orbital Data-Center Radiator Model's Coded Equilibrium Temperature by 6.35 K: An Exact Earth View-Factor Correction, Its Decomposition, and a Verified Orbit-Coupled Transient Extension. Zenodo. https://doi.org/10.5281/zenodo.20695720
@misc{leeodinson2026edgeon,
author = {Lee-Odinson, Dan},
title = {Edge-On Geometry Raises a Public Orbital Data-Center
Radiator Model's Coded Equilibrium Temperature by 6.35 K},
year = {2026},
month = jun,
publisher = {Zenodo},
doi = {10.5281/zenodo.20695720},
url = {https://doi.org/10.5281/zenodo.20695720},
note = {Preprint}
}
Companion paper: The AI1 Design Point
On June 9–10, 2026, SpaceX announced AI1, its first orbital data-center satellite. The companion paper in companion/ applies this repository's thermodynamic bounds to the announced design and establishes its coherence within the gray-body radiator model, under one specific reading of the reported figures.
Archived version: Zenodo DOI 10.5281/zenodo.20670771
What it shows, briefly: treating the reported 110 m² of radiators as double-sided panel planform (the reading SpaceX itself states — "radiating both sides, orientated knife-edge to the sun"), the implied radiator surface temperature is about 337 K at the 120 kW sustained load and about 353 K if the 150 kW peak runs continuously. The alternative total-emitting-area reading requires 391–412 K, which strongly disfavors the subcritical ammonia loop secondary coverage describes as likely. An illustrative combined stress case (emissivity 0.91 → 0.80, effective sink 220 → 260 K) removes about 40 kW of fixed-temperature capacity. The reduced-order model does not rule the design out; margin, the engineering interior, and the economics remain open.
Every reported figure traces to a quoted source, and every radiator-model calculation and displayed value is asserted by companion/verify_ai1.py. The paper passed four rounds of adversarial technical review with independent Wolfram verification; the revision history is in the response letters.
How to cite the companion paper
Lee-Odinson, D. (2026). The AI1 design point: A bounds-based analysis of SpaceX's orbital data-center satellite (Revision 4) [Preprint]. Zenodo. https://doi.org/10.5281/zenodo.20670771
@misc{leeodinson2026ai1,
author = {Lee-Odinson, Dan},
title = {The AI1 design point: A bounds-based analysis of SpaceX's orbital data-center satellite},
year = {2026},
month = jun,
publisher = {Zenodo},
version = {v1},
doi = {10.5281/zenodo.20670771},
url = {https://doi.org/10.5281/zenodo.20670771},
note = {Preprint}
}
License
This repository is licensed by component (see LICENSING.md):
- Software —
src/,tests/,scripts/, the rootverify_suite.py/verify_suite.wl,companion/verify_ai1.py, and packaging — is MIT-licensed (seeLICENSE-MIT). The packaged distribution declares MIT. - Papers, documentation, and figures — the manuscripts,
docs/, andresults/figures/— are licensed under Creative Commons Attribution 4.0 International (CC BY 4.0; seeLICENSE-DOCS-CC-BY-4.0). - Vendored McCalip model —
external_models/— retains its upstream MIT license (seeexternal_models/mccalip_thoughts/UPSTREAM-LICENSE.md).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file orbital_thermal-1.0.1.tar.gz.
File metadata
- Download URL: orbital_thermal-1.0.1.tar.gz
- Upload date:
- Size: 75.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5106dcd20d0997dced7bc7c30a5a0fe4e6338f26f7503311553c182a16513663
|
|
| MD5 |
e029ed451785bb1814d62448e424acdf
|
|
| BLAKE2b-256 |
0f79b5c0fa7e3363d0217a75a6f51246ac5ed9809733c2cebe8cc75a835ae610
|
Provenance
The following attestation bundles were made for orbital_thermal-1.0.1.tar.gz:
Publisher:
publish.yml on dan-lee-odinson/orbital-thermal-bounds
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orbital_thermal-1.0.1.tar.gz -
Subject digest:
5106dcd20d0997dced7bc7c30a5a0fe4e6338f26f7503311553c182a16513663 - Sigstore transparency entry: 1832474510
- Sigstore integration time:
-
Permalink:
dan-lee-odinson/orbital-thermal-bounds@6cf9809de7e29dc566c65c764dc30404add0741e -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/dan-lee-odinson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6cf9809de7e29dc566c65c764dc30404add0741e -
Trigger Event:
release
-
Statement type:
File details
Details for the file orbital_thermal-1.0.1-py3-none-any.whl.
File metadata
- Download URL: orbital_thermal-1.0.1-py3-none-any.whl
- Upload date:
- Size: 47.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69581bd71541e8e88a70c3f5821bfc6353f81095f95b4b7c547ea25d05d3e392
|
|
| MD5 |
5c38b6066d727ea05461abe20316a239
|
|
| BLAKE2b-256 |
453e321efc8184513ce0891e74cd79036f60087a97f533c3c4bc442410cd0c2b
|
Provenance
The following attestation bundles were made for orbital_thermal-1.0.1-py3-none-any.whl:
Publisher:
publish.yml on dan-lee-odinson/orbital-thermal-bounds
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orbital_thermal-1.0.1-py3-none-any.whl -
Subject digest:
69581bd71541e8e88a70c3f5821bfc6353f81095f95b4b7c547ea25d05d3e392 - Sigstore transparency entry: 1832474707
- Sigstore integration time:
-
Permalink:
dan-lee-odinson/orbital-thermal-bounds@6cf9809de7e29dc566c65c764dc30404add0741e -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/dan-lee-odinson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6cf9809de7e29dc566c65c764dc30404add0741e -
Trigger Event:
release
-
Statement type: