celestial_core/nutation/mod.rs
1//! Nutation models for computing oscillations in Earth's rotational axis.
2//!
3//! Nutation is the short-period oscillation of Earth's rotational axis about its mean
4//! position, superimposed on the longer-term precession. It arises from gravitational
5//! torques exerted by the Moon, Sun, and planets on Earth's equatorial bulge. The
6//! principal component has a period of 18.6 years (the lunar nodal period) with an
7//! amplitude of about 9 arcseconds in obliquity.
8//!
9//! This module provides implementations of the IAU standard nutation models:
10//!
11//! | Model | Lunisolar Terms | Planetary Terms | Precision | Use Case |
12//! |-------|-----------------|-----------------|-----------|----------|
13//! | [`NutationIAU2000A`] | 678 | 687 | ~0.1 µas | High-precision astrometry, VLBI |
14//! | [`NutationIAU2000B`] | 77 | 0 (bias only) | ~1 mas | General ephemeris, telescope pointing |
15//! | [`NutationIAU2006A`] | 678 | 687 | ~0.1 µas | Use with IAU 2006 precession |
16//!
17//! # Output
18//!
19//! All models return [`NutationResult`] containing:
20//! - `delta_psi`: Nutation in longitude (radians)
21//! - `delta_eps`: Nutation in obliquity (radians)
22//!
23//! # Time Argument
24//!
25//! All `compute(jd1, jd2)` methods accept a two-part Julian Date in TDB (Barycentric
26//! Dynamical Time). The split preserves precision: typically `jd1 = 2451545.0` (J2000.0)
27//! and `jd2` = days from that epoch.
28//!
29//! # Example
30//!
31//! ```
32//! use celestial_core::nutation::NutationIAU2006A;
33//!
34//! let nutation = NutationIAU2006A::new();
35//! let result = nutation.compute(2451545.0, 0.0).unwrap();
36//!
37//! // At J2000.0: Δψ ≈ -0.04 arcsec, Δε ≈ -0.007 arcsec
38//! println!("Δψ = {:.6} rad", result.delta_psi);
39//! println!("Δε = {:.6} rad", result.delta_eps);
40//! ```
41//!
42//! # Sub-modules
43//!
44//! - [`iau2000a`]: Full IAU 2000A model (678 lunisolar + 687 planetary terms)
45//! - [`iau2000b`]: Truncated IAU 2000B model (77 terms + planetary bias)
46//! - [`iau2006a`]: IAU 2000A with J2 corrections for IAU 2006 precession compatibility
47//! - [`fundamental_args`]: Delaunay arguments and planetary mean longitudes
48//! - [`lunisolar_terms`]: Coefficient table for lunisolar nutation series
49//! - [`planetary_terms`]: Coefficient table for planetary nutation series
50//! - [`types`]: [`NutationResult`] and [`NutationModel`] wrapper
51
52#[cfg(feature = "erfa-tests")]
53pub mod fundamental_args;
54
55#[cfg(not(feature = "erfa-tests"))]
56mod fundamental_args;
57
58pub mod iau2000a;
59pub mod iau2000b;
60pub mod iau2006a;
61pub mod lunisolar_terms;
62pub mod planetary_terms;
63pub mod types;
64
65pub use fundamental_args::{IERS2010FundamentalArgs, MHB2000FundamentalArgs};
66pub use iau2000a::NutationIAU2000A;
67pub use iau2000b::NutationIAU2000B;
68pub use iau2006a::NutationIAU2006A;
69pub use types::{NutationModel, NutationResult};