Skip to main content

space_units/
constants.rs

1//! Typed physical and astronomical constants.
2//!
3//! 34 constants — 29 typed as quantities ([`Velocity`], [`Length`], [`Mass`],
4//! [`Acceleration`], [`GravitationalParameter`], [`Power`], [`HeatFlux`],
5//! [`Time`], [`ElectricCharge`]) and 5 raw `f64` for compound units without
6//! a matching type.
7//!
8//! Typed constants prevent misuse: `GM_EARTH + R_EARTH` is a compile error.
9//!
10//! ```
11//! use space_units::constants::*;
12//! use space_units::prelude::*;
13//!
14//! let signal_delay = AU / C;           // Length / Velocity → Time
15//! let weight = 1000.kg() * G0;        // Mass * Acceleration → Force
16//! ```
17
18use crate::quantities::{
19    Acceleration, ElectricCharge, GravitationalParameter, HeatFlux, Length, Mass, Power, Time,
20    Velocity,
21};
22
23// =========================================================================
24// Fundamental / defined
25// =========================================================================
26
27/// Speed of light in vacuum.
28///
29/// Exact by definition (SI).
30pub const C: Velocity = Velocity::from_mps(299_792_458.0);
31
32/// Astronomical Unit.
33///
34/// Exact by IAU 2012 definition.
35pub const AU: Length = Length::from_m(149_597_870_700.0);
36
37/// Standard gravity.
38///
39/// Defined as exactly 9.80665 m/s^2.
40pub const G0: Acceleration = Acceleration::from_mps2(9.806_65);
41
42/// One Julian day (exact by convention).
43pub const DAY: Time = Time::from_s(86_400.0);
44
45/// Elementary charge.
46pub const ELEMENTARY_CHARGE: ElectricCharge = ElectricCharge::from_c(1.602_176_634e-19);
47
48/// Electron mass.
49pub const ELECTRON_MASS: Mass = Mass::from_kg(9.109_383_701_5e-31);
50
51/// Proton mass.
52pub const PROTON_MASS: Mass = Mass::from_kg(1.672_621_923_69e-27);
53
54/// Planck constant (J·s). No typed product type for Energy × Time.
55pub const PLANCK: f64 = 6.626_070_15e-34;
56
57/// Boltzmann constant (J/K). No typed ratio for Energy / Temperature.
58pub const BOLTZMANN: f64 = 1.380_649e-23;
59
60/// Stefan–Boltzmann constant (W·m⁻²·K⁻⁴).
61pub const STEFAN_BOLTZMANN: f64 = 5.670_374_419e-8;
62
63/// Avogadro constant (mol⁻¹).
64pub const AVOGADRO: f64 = 6.022_140_76e23;
65
66/// Molar gas constant (J·mol⁻¹·K⁻¹).
67pub const GAS_CONSTANT: f64 = 8.314_462_618;
68
69// =========================================================================
70// Gravitational parameters (mu = GM) — m³/s²
71// =========================================================================
72
73/// Earth gravitational parameter.
74pub const GM_EARTH: GravitationalParameter = GravitationalParameter::from_m3ps2(3.986_004_418e14);
75
76/// Sun gravitational parameter.
77pub const GM_SUN: GravitationalParameter = GravitationalParameter::from_m3ps2(1.327_124_400_18e20);
78
79/// Moon gravitational parameter.
80pub const GM_MOON: GravitationalParameter = GravitationalParameter::from_m3ps2(4.902_800_066e12);
81
82/// Mercury gravitational parameter.
83pub const GM_MERCURY: GravitationalParameter = GravitationalParameter::from_m3ps2(2.203_2e13);
84
85/// Venus gravitational parameter.
86pub const GM_VENUS: GravitationalParameter = GravitationalParameter::from_m3ps2(3.248_59e14);
87
88/// Mars gravitational parameter.
89pub const GM_MARS: GravitationalParameter = GravitationalParameter::from_m3ps2(4.282_837_1e13);
90
91/// Jupiter gravitational parameter.
92pub const GM_JUPITER: GravitationalParameter = GravitationalParameter::from_m3ps2(1.266_865_3e17);
93
94/// Saturn gravitational parameter.
95pub const GM_SATURN: GravitationalParameter = GravitationalParameter::from_m3ps2(3.793_120_6e16);
96
97/// Uranus gravitational parameter.
98pub const GM_URANUS: GravitationalParameter = GravitationalParameter::from_m3ps2(5.793_939e15);
99
100/// Neptune gravitational parameter.
101pub const GM_NEPTUNE: GravitationalParameter = GravitationalParameter::from_m3ps2(6.836_529e15);
102
103/// Pluto gravitational parameter.
104pub const GM_PLUTO: GravitationalParameter = GravitationalParameter::from_m3ps2(8.71e11);
105
106// =========================================================================
107// Astrophysical
108// =========================================================================
109
110/// Solar luminosity.
111pub const SOLAR_LUMINOSITY: Power = Power::from_w(3.828e26);
112
113/// Solar flux at 1 AU (solar constant).
114pub const SOLAR_FLUX_1AU: HeatFlux = HeatFlux::from_wpm2(1_361.0);
115
116// =========================================================================
117// Planetary radii (mean volumetric)
118// =========================================================================
119
120/// Mean radius of Earth.
121pub const R_EARTH: Length = Length::from_m(6_371_000.0);
122
123/// Mean radius of Moon.
124pub const R_MOON: Length = Length::from_m(1_737_400.0);
125
126/// Mean radius of Mars.
127pub const R_MARS: Length = Length::from_m(3_389_500.0);
128
129/// Mean radius of Jupiter.
130pub const R_JUPITER: Length = Length::from_m(69_911_000.0);
131
132/// Mean radius of Saturn.
133pub const R_SATURN: Length = Length::from_m(58_232_000.0);
134
135// =========================================================================
136// Planetary masses
137// =========================================================================
138
139/// Mass of Earth.
140pub const M_EARTH: Mass = Mass::from_kg(5.972_2e24);
141
142/// Mass of Moon.
143pub const M_MOON: Mass = Mass::from_kg(7.342e22);
144
145/// Mass of Mars.
146pub const M_MARS: Mass = Mass::from_kg(6.4171e23);
147
148/// Mass of Jupiter.
149pub const M_JUPITER: Mass = Mass::from_kg(1.8982e27);