{ "id": "sgp4-propagation", "title": "SGP4 propagation", "summary": "From a parsed element set to a state vector: element preparation, branch selection, and the propagation itself.", "nodes": [ {"id": "start", "label": "TwoLineElement and GravityModel", "kind": "data", "group": "input", "summary": "Mean elements as parsed from the element set, plus the gravity model they were fitted against.", "api": "TwoLineElement"}, {"id": "prepare", "label": "Prepare mean elements", "kind": "step", "group": "prepare", "summary": "Convert degrees to radians and revolutions per day to radians per minute, and recover the un-Kozai mean motion.", "api": "Satellite"}, {"id": "valid", "label": "Elements propagatable?", "kind": "decision", "group": "prepare", "summary": "The eccentricity must be below one, the mean motion positive, and the recovered semi-major axis physical.", "api": "validate"}, {"id": "invalid", "label": "InvalidElements", "kind": "terminal", "group": "error", "summary": "The elements do not describe a satellite the model can propagate.", "api": "PropagationErrorKind"}, {"id": "branch", "label": "Period at or above 225 minutes?", "kind": "decision", "group": "branch", "summary": "Selects the deep space branch. The period follows from the mean motion.", "api": "is_deep_space"}, {"id": "sgp4", "label": "SGP4 secular terms", "kind": "step", "group": "propagate", "summary": "Apply the secular rates from the oblateness, and the drag decay of the semi-major axis and the eccentricity.", "api": "Satellite"}, {"id": "sdp4", "label": "SDP4 deep space terms", "kind": "step", "group": "propagate", "summary": "Add the resonance with the Earth's gravity field and the long period luni-solar perturbations.", "api": "Satellite"}, {"id": "anomaly", "label": "Solve Kepler's equation", "kind": "step", "group": "propagate", "summary": "Recover the eccentric anomaly from the mean anomaly by iteration, then the true anomaly and the radius.", "api": "eccentric_from_mean"}, {"id": "position", "label": "Perifocal position", "kind": "step", "group": "propagate", "summary": "Evaluate the position and velocity in the orbital plane.", "api": "Satellite"}, {"id": "rotate", "label": "Rotate to TEME", "kind": "step", "group": "propagate", "summary": "Apply the argument of perigee, the inclination, and the right ascension of the ascending node.", "api": "State"}, {"id": "decayed", "label": "Radius physical?", "kind": "decision", "group": "propagate", "summary": "A radius below the surface means the drag term has brought the satellite down.", "api": "PropagationErrorKind"}, {"id": "decayed_end", "label": "Decayed", "kind": "terminal", "group": "error", "summary": "The satellite has decayed.", "api": "PropagationErrorKind"}, {"id": "state", "label": "State", "kind": "terminal", "group": "output", "summary": "Position in kilometers and velocity in kilometers per second in the True Equator Mean Equinox frame.", "api": "State"} ], "edges": [ {"source": "start", "target": "prepare", "kind": "flow", "label": null}, {"source": "prepare", "target": "valid", "kind": "flow", "label": null}, {"source": "valid", "target": "invalid", "kind": "branch", "label": "no"}, {"source": "valid", "target": "branch", "kind": "branch", "label": "yes"}, {"source": "branch", "target": "sgp4", "kind": "branch", "label": "no"}, {"source": "branch", "target": "sdp4", "kind": "branch", "label": "yes"}, {"source": "sgp4", "target": "anomaly", "kind": "flow", "label": null}, {"source": "sdp4", "target": "anomaly", "kind": "flow", "label": null}, {"source": "anomaly", "target": "position", "kind": "flow", "label": null}, {"source": "position", "target": "rotate", "kind": "flow", "label": null}, {"source": "rotate", "target": "decayed", "kind": "flow", "label": null}, {"source": "decayed", "target": "decayed_end", "kind": "branch", "label": "below the surface"}, {"source": "decayed", "target": "state", "kind": "branch", "label": "valid"} ] }