Propagation fidelity
Propagation advances a satellite from a known state at one time to its state at another. Every model is an approximation; they differ in which physics they keep.
Choosing one is a judgment about what you are asking. A model that answers “is the geometry roughly right?” is not the model that answers “where will this spacecraft be in six weeks?”
The five models
| Model | Forces included | Cost | Honest for |
|---|---|---|---|
two-body | Point-mass Earth | Lowest | Intuition, teaching, a first look at geometry |
j2 | Two-body plus secular J2 | Low | Constellation geometry over days to weeks, sun-synchronous design |
sgp4 | The perturbation set TLEs are fitted to | Low | Catalog objects, and only from TLEs |
numerical | Configurable: zonal harmonics, drag, solar radiation pressure, third bodies | Highest | Design reviews, maneuver planning, anything quantitative |
ephemeris | Whatever produced the supplied table | Lowest | Reproducing an externally supplied trajectory |
Two hard constraints
sgp4 requires TLE-derived satellites. Two-line element sets are fitted
to the SGP4 model; the model and the data are a matched pair. Feeding SGP4 a
state vector from another source produces a confidently wrong answer rather
than an error, because nothing about the arithmetic fails.
ephemeris requires an imported table, and only works inside the span that
table covers. Outside it there is nothing to interpolate.
Selecting either on a constellation from constellation walker fails
immediately, naming the satellite that lacks the required data:
Error: simulation failed
Caused by:
satellite `demo-s0-p00-sat00` has no TLE; SGP4 propagation requires one (import via TLE)That is the correct behavior. A silent fallback to a different model would be far worse than an error.
What J2 buys
J2 is the largest departure of Earth’s gravity from a sphere, and it dominates every other perturbation in low Earth orbit. It produces two secular effects that matter for constellation design:
Nodal regression: the orbit plane rotates about the polar axis at a rate set by inclination. This is what makes sun-synchronous orbits possible, by choosing an inclination where the plane precesses at one revolution per year and the local solar time of the crossing stays fixed.
Apsidal rotation: the major axis rotates within the plane, which matters for eccentric orbits and vanishes for circular ones.
Ignoring J2 over a week-long window will put your planes in visibly wrong places.
This is why two-body is for intuition rather than analysis.
When to use the numerical model
Use it when the answer must be defensible. It integrates the total acceleration directly, with terms you enable explicitly:
orbitforge simulate \
--constellation demo.json --duration-hours 24 --step-seconds 60 \
--model numerical --gravity j4 \
--drag-cdam 0.02 --atmosphere harris-priester \
--srp-cram 0.02 --third-body sun,moon \
--czml demo-hifi.czmlEach force term is opt-in because each one needs a parameter you must know:
| Term | Parameter | Units | If you guess |
|---|---|---|---|
| Drag | --drag-cdam, | m^2/kg | Along-track error grows without bound |
| Solar radiation pressure | --srp-cram, | m^2/kg | Smaller error, still secular |
| Gravity field | --gravity | n/a | Higher degree costs time, not accuracy, once past the dominant terms |
A high-fidelity propagator fed a guessed ballistic coefficient is not more accurate than a low-fidelity one. It is more expensive and equally wrong. If you do not know the spacecraft’s drag term, say so in the output rather than inventing a plausible value.
Choosing, in practice
The diagram splits first on data provenance, because that decides two of the five models outright. Only a designed constellation gives you a real choice, and that choice is driven by what the answer will be used for.
Next steps
- Accuracy and limitations for where the error actually comes from.
simulatereference for every force-model flag.
main (pre-release)