Skip to main content

Crate astrodyn_atmosphere

Crate astrodyn_atmosphere 

Source
Expand description

Neutral-atmosphere density, temperature, pressure, and wind models.

Pure-Rust port of JEOD’s atmosphere models from models/environment/atmosphere/. All evaluations are framed by the AtmosphereState return type — density (kg/m^3), temperature (K), pressure (Pa), and inertial-frame wind velocity (m/s). The crate has zero Bevy dependency; orchestration lives in astrodyn.

§Models

  • exponentialrho = rho_0 * exp(-(h - h_0) / H). A simple, single-parameter scale-height model intended as a fallback and as a sanity-check baseline for tests. Not physically accurate above ~100 km where diffusive equilibrium takes over.
  • met — Marshall Engineering Thermosphere model. Faithful port of JEOD’s MET implementation, which is built on the Jacchia 1970/1971 thermosphere papers (SAO Special Reports No. 313 and 332). MET combines temperature-profile integration via Gauss quadrature with seasonal- latitude density corrections and is the production model for LEO drag.

§Co-rotation wind

compute_corotation_wind (and its typed sibling compute_corotation_wind_typed) implement JEOD’s WindVelocity::update_wind() for a planet whose angular velocity points along the inertial Z axis: wind = omega × r. Aerodynamic drag computes its relative velocity against this co-rotating wind, not against the bare inertial frame.

§Typed quantities

AtmosphereState<P> is parameterized over the atmosphere planet P so the wind vector carries Velocity<PlanetInertial<P>> directly. AtmosphereState<Earth> and AtmosphereState<Mars> are distinct types and the compiler refuses to feed Mars’s wind to an Earth drag kernel. Producers that determine the planet at runtime (evaluate_atmosphere, the runner’s per-body atmospheric_state) return AtmosphereState<SelfPlanet>; mission code that knows the planet at compile time uses the typed sibling evaluate_atmosphere_typed::<P>() and consumes AtmosphereState<P>. The boundary between the two is the AtmosphereState::<SelfPlanet>::relabel method, restricted to the planet-erased variant so a planet-pinned AtmosphereState<Earth> cannot accidentally be retagged as AtmosphereState<Mars>. JEOD source paths used: models/environment/atmosphere/MET/ and the broader models/environment/atmosphere/ model directory; the wind-frame convention is documented in models/environment/atmosphere/base_atmos/include/wind_velocity.hh (“the inertial frame of the planet causing the wind velocity”).

§Example

Default exponential atmosphere with Earth sea-level reference values:

use astrodyn_atmosphere::exponential::ExponentialAtmosphere;

let atmos = ExponentialAtmosphere::default();
let sea_level = atmos.density(0.0);
assert!((sea_level.density - 1.225).abs() < 1e-9);

// Density falls off exponentially with altitude.
let one_scale_height = atmos.density(8_500.0);
assert!(one_scale_height.density < sea_level.density);

Modules§

exponential
Exponential atmosphere model.
met
MET (Marshall Engineering Thermosphere) atmosphere model.

Structs§

AtmosphereState
Atmospheric state at a given position.
BodyAttitude
RootInertial → body attitude of vehicle V, witnessed unit-norm and scalar-first / left-transformation (JEOD canonical).
BodyFrame
Body (CoM-centered) frame of vehicle V. Rotates with the vehicle.
CartesianState
A Cartesian state sample: position, velocity, and the epoch they hold at, all in frame F.
Earth
Planet marker for Earth.
Ecef
Earth-centered Earth-fixed frame (ITRF-like). Rotates with Earth.
FrameTransform
Proper rotation taking vectors expressed in From to the same vectors expressed in To.
FrameUid
Owned, comparable, hashable runtime frame identity.
GMST
Greenwich Mean Sidereal Time (angle, but seconds-ized by convention).
GPS
GPS Time (TAI − 19 s).
GravParam
Gravitational parameter μ = GM tagged with the source planet P.
HarmonicDegree
Spherical-harmonic degree or order index. Unitless ordinal.
InertiaTensor
Mass moment of inertia tensor (kg·m²) expressed in frame F.
IntegOrigin
The integration-frame origin: position and velocity of the integration-frame origin expressed in root-inertial coordinates.
IntegrationFrame
A body’s integration frame — a non-rotating quasi-inertial frame whose origin generally differs from the root inertial origin.
Jupiter
Planet marker for Jupiter.
LeftTransform
r' = q r q⁻¹ — the JEOD convention.
Lvlh
Local Vertical / Local Horizontal frame relative to chief vehicle Chief. Z axis points planet-ward; Y opposes orbital angular momentum; X completes the right-handed triad (approximately along-track in near-circular orbits).
Mars
Planet marker for Mars.
MassNode
Mass-tree wildcard inertial-flavor frame for kinematic-propagation scratch state.
Moon
Planet marker for Moon.
Ned
North-East-Down topocentric frame relative to chief vehicle Chief.
NormalizedQuat
A quaternion witnessed to have unit norm at construction time.
PlanetFixed
Planet-fixed frame for any planet P. Rotates with that planet.
PlanetInertial
A particular planet’s inertial (non-rotating, J2000-aligned) frame, centered at the planet’s CoM.
Qty3
Componentwise 3-vector: each of x, y, z carries the dimension D, and the whole vector carries the frame tag F.
Quat
Quaternion tagged with its storage layout and transformation convention.
RightTransform
r' = q⁻¹ r q — the opposite of JEOD; common in many textbooks.
RootInertial
The simulation’s root inertial frame — the unique inertial node at the top of the frame tree.
Saturn
Planet marker for Saturn.
ScalarFirst
Storage layout [q0, q1, q2, q3] where q0 is the scalar part (JEOD).
ScalarLast
Storage layout [x, y, z, w] where w is the scalar part (glam).
SecondsSince
Seconds elapsed in the named time scale, measured from that scale’s epoch.
SelfPlanet
Phantom marker for “this entity’s own planet” — used by ECS adapters whose per-entity components carry PlanetFixed<P> phantoms but whose planet identity is determined at runtime by the entity itself.
SelfRef
Phantom marker for “this entity’s own vehicle frame” — used by ECS adapters whose per-entity components carry frame phantoms but whose vehicle identity is determined at runtime by the entity itself.
StructuralFrame
Structural (geometric-origin) frame of vehicle V. Rotates with vehicle.
Sun
Planet marker for Sun.
TAI
International Atomic Time.
TDB
Barycentric Dynamical Time (relativistic correction to TT).
TT
Terrestrial Time (TAI + 32.184 s).
TimeConverter
Explicit converter between two time scales.
Topocentric
Site-anchored topocentric (ENU) frame on planet P.
UT1
Universal Time 1 (Earth-rotation based).
UTC
Coordinated Universal Time (leap-second stepped).

Enums§

FrameClass
Coarse runtime taxonomy of frame kinds.

Traits§

Array3Ext
Extension trait on [f64; 3] (raw component arrays from CSVs or JEOD initial conditions) producing frame-tagged 3-vectors.
F64Ext
Unit-construction extension on f64.
Frame
Compile-time reference frame tag.
Layout
Compile-time quaternion storage layout marker.
Planet
Compile-time planet tag used to parameterize planet-fixed frames.
TimeScale
Compile-time time-scale tag.
Transform
Compile-time quaternion transformation convention marker.
Vec3Ext
Extension trait on glam::DVec3 producing frame-tagged 3-vectors.
Vehicle
Compile-time vehicle tag used to parameterize vehicle-relative frames.

Functions§

compute_corotation_wind
Compute atmospheric co-rotation wind velocity in the inertial frame.
compute_corotation_wind_typed
Typed variant of compute_corotation_wind.

Type Aliases§

Acceleration
Acceleration in frame F. Base SI unit: m/s².
AngularAcceleration
Angular acceleration in frame F. Base SI unit: rad/s².
AngularMomentum
Angular momentum in frame F. Base SI unit: kg·m²/s.
AngularVelocity
Angular velocity in frame F. Base SI unit: rad/s.
Force
Force in frame F. Base SI unit: newtons.
JeodQuat
The JEOD canonical quaternion type: scalar-first, left-transformation.
Jerk
Jerk (time derivative of acceleration) in frame F. Base SI unit: m/s³.
MassFlowRate
Scalar mass-flow rate.
Position
Position in frame F (default: RootInertial). Base SI unit: meters.
SpecificAngMom
Scalar specific angular momentum.
SpecificEnergy
Scalar specific energy.
Torque
Torque in frame F. Base SI unit: N·m.
Velocity
Velocity in frame F. Base SI unit: m/s.