Skip to content

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 rotation frame -> ICRF
  • frame.ToFrame(targetFrame, epoch) returns a rotation frame -> 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 frame J2000, treated as ICRF-aligned
  • GCRF: ICRS axes centred on the Earth, the same axes as ICRF
  • CIRS: celestial intermediate frame, CIO-based, IAU 2006 precession with IAU 2000B nutation
  • TIRS: terrestrial intermediate frame adding Earth rotation angle to CIRS

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 0 for the solar-system barycenter and 3 for 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, and m²/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, Z state-vector elements use km
  • X_DOT, Y_DOT, Z_DOT use km/s
  • MISS_DISTANCE and RELATIVE_POSITION_* use m
  • 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.