Standards & Units¶
SI Units¶
IO.Astrodynamics uses SI units throughout.
| Quantity | Unit | Symbol |
|---|---|---|
| Length | Meters | m |
| Mass | Kilograms | kg |
| Time | Seconds | s |
| Angle | Radians | rad |
| Velocity | Meters per second | m/s |
| Acceleration | Meters per second squared | m/s2 |
| Gravitational parameter | m3/s2 | m3/s2 |
| Temperature | Celsius | deg C |
| Pressure | Kilopascals | kPa |
| Density | Kilograms per cubic meter | kg/m3 |
Physical Constants¶
Defined in IO.Astrodynamics.Constants:
public const double G = 6.67430e-11;
public const double AU = 149597870700.0;
public const double C = 299792458.0;
public const double g0 = 9.80665;
public const double Deg2Rad = Math.PI / 180.0;
public const double Rad2Deg = 180.0 / Math.PI;
Reference Standards¶
- Time: IERS conventions. The managed time conversions (
Time,TimeFrame) use a built-in leap second table, last entry 2017-01-01; SPICE calls use the NAIF LSK kernel - Ephemerides: JPL DE series
- Frames: IAU, IAG, and IERS conventions
- Gravity: EGM2008 spherical harmonics up to degree and order 70
- Atmosphere: U.S. Standard Atmosphere 1976 and NRLMSISE-00
- TLE propagation: SGP4 and SDP4 compatibility
Frame Transform Convention¶
Frame transforms in the managed API use a consistent source-to-destination convention.
frame.GetStateOrientationToICRF(epoch)returns a rotationframe -> ICRFframe.ToFrame(targetFrame, epoch)returns a rotationframe -> targetFrame- applying the returned quaternion rotates a vector from the source frame into the destination frame
Example:
var so = Frame.CIRS.GetStateOrientationToICRF(epoch);
var positionIcrf = positionCirs.Rotate(so.Rotation);
var positionCirs = positionIcrf.Rotate(so.Rotation.Conjugate());
StateOrientation.ReferenceFrame identifies the source frame of the rotation, not the destination frame.
Earth-Centered Inertial And Intermediate Frames¶
Note
These frames are exposed as Frame.GCRF, Frame.CIRS and Frame.TIRS.
ICRF: shared inertial frame used throughout the API, the SPICE frameJ2000, treated as ICRF-alignedGCRF: ICRS axes centred on the Earth, the same axes asICRFCIRS: celestial intermediate frame, CIO-based, IAU 2006 precession with IAU 2000B nutationTIRS: terrestrial intermediate frame adding Earth rotation angle toCIRS
These frames are useful when you need an explicit IAU Earth-orientation chain instead of relying only on SPICE-defined built-in frames.
ICRF, GCRF And EME2000¶
SPICE treats its J2000 frame as aligned with the ICRF, and the DE ephemerides it carries are
ICRF-aligned. Frame.ICRF is that frame, and Frame.GCRF shares its axes: converting between them
is the identity. The ~23 mas IAU 2006 frame bias separates the ICRF from the mean equator and
equinox of J2000 (EME2000), about 0.8 m on a LEO position (6,778 km) and 4.7 m on a GEO position
(42,164 km). No library frame models EME2000: data labelled EME2000 (CCSDS OPM REF_FRAME,
ImpulseManeuver.ToOpmManeuverParameters) is read or written in Frame.ICRF and the bias is
ignored. See Frames & Orientation.
Accuracy Without EOP¶
The IAU chain takes Earth orientation parameters through IEarthOrientationParameters. With the
default NullEop (Frame.TIRS, new TirsFrame()):
| Quantity | Neglected | Effect |
|---|---|---|
| UT1 - UTC | up to 0.9 s, the IERS limit | up to about 13.5 arcseconds of Earth rotation angle in TIRS, about 420 m for a point fixed on the equator |
| Polar motion | up to about 0.5 arcsecond | about 15 m on the ground; never applied, with or without a provider, because the chain stops at TIRS (no ITRS frame) |
SPICE body-fixed frames, such as ITRF93 with earth_latest_high_prec.bpc, include the EOP and are
not affected.
Measured Agreement With SOFA¶
Iau2006SofaSweepTests compares the chain with SOFA (IAU 2006/2000A, release 2023-10-11) on 300
epochs from 1990 to 2040, generated by tools/sofa_reference/sofa_ref.c --sweep. Largest
deviations, measured on 2026-10-04:
| Quantity | Largest deviation | Test tolerance | Origin of the deviation |
|---|---|---|---|
| CIP X, Y | 3.6e-9 rad (0.73 mas) | 5e-9 rad | IAU 2000B nutation against IAU 2000A |
| CIO locator s, from SOFA's X, Y | 9.3e-23 rad | 1e-11 rad | none: same series and arguments as iauS06 |
| Earth rotation angle | 1.3e-11 rad | 2e-11 rad | double resolution of the date |
| GCRS to TIRS rotation | 4.2e-9 rad (0.87 mas) | 5e-9 rad | inherits the CIP deviation |
Iau2006ModelTests also checks the nutation against SOFA iauNut00b with the P03 adjustments to
1e-13 rad between 1990 and 2050, and the CIO locator against iauS06 to 1e-11 rad where its
periodic terms peak.
NAIF IDs¶
- Sun:
10 - Earth:
399 - Moon:
301 - Barycenters include
0for the solar-system barycenter and3for the Earth-Moon barycenter
Be explicit about units when consuming external data, especially for OMM, OPM, and TLE-derived values where source conventions may differ from internal SI storage.
SSA And CDM Units¶
Internally, the SSA workflow stays in SI units:
- miss distance in meters
- relative position in meters
- relative velocity in meters per second
- covariance in
m²,m²/s, andm²/s² - hard-body radius in meters
When you export a CCSDS CDM, the XML writer converts values to the units required by the schema:
X,Y,Zstate-vector elements usekmX_DOT,Y_DOT,Z_DOTusekm/sMISS_DISTANCEandRELATIVE_POSITION_*usem- covariance terms use the CCSDS units defined by the CDM schema
That split is intentional: end users work in SI inside the managed API, while interchange files follow CCSDS rules.