solar_line_core/
constants.rs1use crate::units::{Km, Mu};
5
6pub mod mu {
8 use super::Mu;
9
10 pub const SUN: Mu = Mu(1.327_124_400_41e11);
12
13 pub const MERCURY: Mu = Mu(2.203_2e4);
15
16 pub const VENUS: Mu = Mu(3.248_59e5);
18
19 pub const EARTH: Mu = Mu(3.986_004_418e5);
22
23 pub const MARS: Mu = Mu(4.282_837_14e4);
25
26 pub const JUPITER: Mu = Mu(1.266_865_349e8);
28
29 pub const SATURN: Mu = Mu(3.793_120_749e7);
31
32 pub const URANUS: Mu = Mu(5.793_939e6);
34
35 pub const NEPTUNE: Mu = Mu(6.836_529e6);
37}
38
39pub mod orbit_radius {
43 use super::Km;
44
45 pub const EARTH: Km = Km(149_597_870.7);
47
48 pub const MARS: Km = Km(227_939_200.0);
50
51 pub const JUPITER: Km = Km(778_570_000.0);
53
54 pub const SATURN: Km = Km(1_433_530_000.0);
56
57 pub const URANUS: Km = Km(2_872_460_000.0);
59
60 pub const MERCURY: Km = Km(57_909_050.0);
62
63 pub const VENUS: Km = Km(108_208_000.0);
65}
66
67pub const G0_M_S2: f64 = 9.806_65;
71
72pub const AU_KM: f64 = 149_597_870.7;
74
75pub const C_KM_S: f64 = 299_792.458;
77
78pub mod reference_orbits {
80 use super::Km;
81
82 pub const EARTH_RADIUS: Km = Km(6_378.137);
84
85 pub const LEO_RADIUS: Km = Km(6_578.0);
87
88 pub const GEO_RADIUS: Km = Km(42_164.0);
90}
91
92#[cfg(test)]
93mod tests {
94 use super::*;
95
96 #[test]
97 fn test_mu_sun_order_of_magnitude() {
98 assert!(mu::SUN.value() > 1.3e11);
100 assert!(mu::SUN.value() < 1.4e11);
101 }
102
103 #[test]
104 fn test_mu_ordering() {
105 assert!(mu::SUN.value() > mu::JUPITER.value());
107 assert!(mu::JUPITER.value() > mu::SATURN.value());
108 assert!(mu::SATURN.value() > mu::NEPTUNE.value());
109 assert!(mu::NEPTUNE.value() > mu::URANUS.value());
110 assert!(mu::URANUS.value() > mu::EARTH.value());
111 assert!(mu::EARTH.value() > mu::VENUS.value());
112 assert!(mu::VENUS.value() > mu::MARS.value());
113 assert!(mu::MARS.value() > mu::MERCURY.value());
114 }
115
116 #[test]
117 fn test_earth_orbit_is_1au() {
118 assert!((orbit_radius::EARTH.value() - 149_597_870.7).abs() < 1.0);
120 }
121
122 #[test]
123 fn test_mars_orbit_ratio() {
124 let ratio = orbit_radius::MARS / orbit_radius::EARTH;
126 assert!((ratio - 1.524).abs() < 0.01);
127 }
128
129 #[test]
130 fn test_reference_orbits_ordering() {
131 assert!(reference_orbits::LEO_RADIUS.value() > reference_orbits::EARTH_RADIUS.value());
132 assert!(reference_orbits::GEO_RADIUS.value() > reference_orbits::LEO_RADIUS.value());
133 }
134
135 #[test]
136 fn test_g0_standard_value() {
137 assert!((G0_M_S2 - 9.80665).abs() < 1e-5);
138 }
139
140 #[test]
141 fn test_c_km_s_order_of_magnitude() {
142 assert!(C_KM_S > 299_000.0 && C_KM_S < 300_000.0);
143 }
144
145 #[test]
146 fn test_au_km_matches_orbit_radius_earth() {
147 assert!((AU_KM - orbit_radius::EARTH.value()).abs() < 1.0);
148 }
149}