SGP4 Theory Archive
The SGP4 algorithm that predicts satellite positions from Two-Line Element sets has a remarkably traceable pedigree. Every equation in the FORTRAN code can be followed back through a chain of papers to its mathematical origin.
The Intellectual Lineage
Section titled “The Intellectual Lineage”graph TD
B["Brouwer (1959)<br/>Mean element theory"]
L["Lyddane (1963)<br/>Zero-inclination fix"]
LC["Lane & Cranford (1969)<br/>SGP4 development"]
STR2["Lane & Hoots (1979)<br/>Spacetrack Report #2"]
STR1["Hujsak (1979)<br/>Spacetrack Report #1"]
STR3["Hoots & Roehrich (1980)<br/>Spacetrack Report #3"]
H81["Hoots (1981)<br/>Brouwer reformulation"]
K88["Kelso (1988)<br/>Electronic distribution"]
REV1["Vallado et al. (2006/2008)<br/>AIAA 2006-6753-Rev1"]
K07["Kelso (2007)<br/>SGP4 validation vs GPS"]
MOD["Modern implementations<br/>satellite.js, Skyfield, etc."]
B --> LC
L --> LC
LC --> STR2
LC --> STR1
STR2 --> STR3
STR1 --> STR3
STR3 --> H81
STR3 --> K88
H81 --> REV1
K88 --> REV1
K07 --> MOD
REV1 --> MOD
click STR3 "/docs/sgp4-theory/original/00-overview/"
click REV1 "/docs/sgp4-theory/rev1/00-overview/"
click STR1 "/docs/sgp4-theory/foundations/str1/"
click STR2 "/docs/sgp4-theory/foundations/str2/"
click B "/docs/sgp4-theory/foundations/brouwer-1959/"
click L "/docs/sgp4-theory/foundations/lyddane-1963/"
click H81 "/docs/sgp4-theory/foundations/hoots-1980/"
click K07 "/docs/sgp4-theory/foundations/kelso-2007/"
Geodetic Constants Thread
Section titled “Geodetic Constants Thread”A parallel lineage supplies the physical constants that SGP4 depends on:
graph LR
WGS72["WGS-72<br/>Seppelin, 1974"]
WGS84["WGS-84<br/>TR8350.2, 2000"]
IERS["IERS Conventions<br/>Tech. Note 36, 2010"]
WGS72 -->|"GM, J2, ae"| PROP["SGP4 propagation"]
WGS84 -->|"ellipsoid, geoid"| CONV["TEME-to-ITRF conversion"]
IERS -->|"nutation, precession"| FRAME["TEME-to-J2000 conversion"]
click WGS72 "/docs/sgp4-theory/foundations/wgs-72/"
click WGS84 "/docs/sgp4-theory/foundations/wgs-84/"
click IERS "/docs/sgp4-theory/foundations/iers-2010/"
Document Inventory
Section titled “Document Inventory”Primary Documents (Already Transcribed)
Section titled “Primary Documents (Already Transcribed)”| Directory | Document | Year | Pages | Significance |
|---|---|---|---|---|
sgp-4/ | Spacetrack Report No. 3 | 1980 | 91 | Canonical FORTRAN IV source code |
sgp-4-rev-1/ | AIAA 2006-6753-Rev1 | 2006 | 92 | Corrected SGP4 with test vectors |
Foundation Documents (Newly Acquired)
Section titled “Foundation Documents (Newly Acquired)”| Directory | Document | Year | Pages | Significance |
|---|---|---|---|---|
brouwer-1959/ | Brouwer, AJ 64 | 1959 | 19 | Mean element theory for artificial satellites |
lyddane-1963/ | Lyddane, AJ 68 | 1963 | 4 | Zero-inclination singularity fix |
str-1/ | STR#1, Hujsak | 1979 | 72 | Deep-space resonance theory |
str-2/ | STR#2, Lane & Hoots | 1979 | 64 | Near-earth general perturbation theory |
hoots-1980/ | Hoots, Cel. Mech. 24 | 1981 | 9 | Brouwer theory reformulation |
kelso-2007/ | Kelso, AAS 07-127 | 2007 | 15 | SGP4 validation against GPS precision ephemerides |
wgs-72/ | Seppelin, DMA | 1974 | ~50 | SGP4 geodetic constants (GM, J2, ae) |
wgs-84/ | NIMA TR8350.2 | 2000 | 175 | Modern geodetic datum for display/observer |
iers-2010/ | IERS Tech. Note 36 | 2010 | 179 | Earth rotation and reference frame transforms |
Not Obtained
Section titled “Not Obtained”| Document | Reason |
|---|---|
| Lane & Cranford (1969) | Behind AIAA paywall |
| Crawford (1995) | Unpublished, likely lost |
| Vallado textbook (2013) | Copyrighted commercial publication |
Cross-Document Insights
Section titled “Cross-Document Insights”1. The Transcription Problem
Section titled “1. The Transcription Problem”The STR#3 FORTRAN was distributed only as a printed report. No authoritative digital source files ever existed. Every digital copy was produced by hand-typing, OCR, or PDF extraction — all vulnerable to column-shift errors in FORTRAN IV’s fixed format, where a single misplaced space silently changes meaning. This is a root cause of 25 years of SGP4 divergence that Vallado’s Rev-1 paper documented.
See the STR#3 extraction notes for our own encounter with this problem during the 2026 transcription.
2. The Constant Chain of Custody
Section titled “2. The Constant Chain of Custody”The magic numbers in SGP4’s DATA statements trace directly to WGS-72:
-
XKE = 0.0743669161 - `XJ2 = 1.082616 \times 10^-3$
Sixth-decimal-place differences between implementations reflect 1974 vs. 1980 measurement precision. See FORTRAN source constants for the full constant table.
3. The Brouwer-to-FORTRAN Pipeline
Section titled “3. The Brouwer-to-FORTRAN Pipeline”The equation flow from theory to code follows a clear path:
Brouwer’s Section 9 → Lyddane singularity patches → Lane & Hoots add atmospheric drag → STR#3 FORTRAN
The secular, long-period, and short-period perturbation terms in Brouwer’s original paper map directly to identifiable blocks in the SGP4 source code.
4. The Critical Inclination and Resonance
Section titled “4. The Critical Inclination and Resonance”Brouwer’s term blows up at (the critical inclination). Molniya orbits deliberately exploit this singularity for their ground-track properties. STR#1 handles the deep-space resonance case with a numerical integrator in the DEEP subroutine — the only numerical integration in an otherwise fully analytical propagator.
5. The TEME Frame Gap
Section titled “5. The TEME Frame Gap”Before Rev-1 (2006), SGP4 output was loosely described as “ECI” without specifying which reference frame. Rev-1 defined TEME (True Equator, Mean Equinox) as using only 4 of the 106 IAU-80 nutation terms. Converting TEME to J2000 requires the full IERS 2010 nutation model.
The nutation model hierarchy:
See Appendix C: TEME Coordinate System for the complete transformation equations.
6. The Validation Hierarchy
Section titled “6. The Validation Hierarchy”Three levels of validation exist, each testing different properties:
| Source | Vectors | What It Tests | Accuracy Level |
|---|---|---|---|
| STR#3 Ch. 13 | 25 | Internal consistency | Sub-meter (near-earth) |
| Vallado Rev-1 | 518 | Cross-implementation agreement | Machine epsilon |
| Kelso 2007 | — | SGP4 vs. GPS precision ephemerides | ~1 km at epoch, 1—3 km/day growth |
7. Archive Fragility
Section titled “7. Archive Fragility”Half of the official URLs for these documents no longer resolve. Internet Archive and NASA ADS preserve access to some. Local archival — like this collection — remains the most reliable approach to ensuring continued access.
8. The DEEP Subroutine Architecture
Section titled “8. The DEEP Subroutine Architecture”The DEEP subroutine uses three ENTRY points (DPINIT,
DPSEC, DPPER) sharing state through static local variables. The resonance integrator inside
DEEP is the only numerical integration in all of SGP4/SDP4 — every other computation is
purely analytical. This architecture was clever for 1980 but causes significant problems for
modern compilers.
9. The Theory-to-Code Sign Problem
Section titled “9. The Theory-to-Code Sign Problem”STR#1 Appendices A—B use different sign conventions than Appendices D—G in several places. When the theoretical derivation and the FORTRAN code disagreed, the code became authoritative — not the theory paper. In operational practice, the code is the specification.
10. The DEEP Model Selection Threshold
Section titled “10. The DEEP Model Selection Threshold”Satellites with an orbital period 225 minutes are classified as deep-space and routed to
SDP4 instead of SGP4. The .15625 threshold in the code is (minutes per day).
This single branch determines the entire perturbation model applied to an object.