lox_frames/iers/nutation/
iau2006.rs1use lox_time::Time;
7use lox_time::julian_dates::JulianDate;
8use lox_time::time_scales::Tdb;
9
10use crate::iers::nutation::Nutation;
11
12impl Nutation {
13 pub fn iau2006a(time: Time<Tdb>) -> Nutation {
16 let mut nutation = Self::iau2000a(time);
17
18 let j2_correction = -2.7774e-6 * time.centuries_since_j2000();
19 nutation.dpsi += (0.4697e-6 + j2_correction) * nutation.dpsi;
20 nutation.deps += j2_correction * nutation.deps;
21
22 nutation
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use crate::iers::nutation::Nutation;
29
30 use lox_core::units::AngleUnits;
31 use lox_test_utils::assert_approx_eq;
32 use lox_time::{Time, time_scales::Tdb};
33
34 #[test]
35 fn test_nutation_iau2006a() {
36 let time = Time::from_two_part_julian_date(Tdb, 2400000.5, 53736.0);
37 let expected = Nutation {
38 dpsi: -9.630_912_025_820_31e-6.rad(),
39 deps: 4.063_238_496_887_25e-5.rad(),
40 };
41 let actual = Nutation::iau2006a(time);
42 assert_approx_eq!(expected, actual, rtol <= 1e-13);
43 }
44}