Skip to main content

NutationIAU2000A

Struct NutationIAU2000A 

Source
pub struct NutationIAU2000A;
Expand description

IAU 2000A nutation calculator.

Computes nutation angles using the full IAU 2000A model with 678 lunisolar terms and 687 planetary terms. The computation follows the MHB2000 formulation with coefficients expressed in microarcseconds.

§Example

use celestial_core::nutation::iau2000a::NutationIAU2000A;

let nut = NutationIAU2000A::new();

// J2000.0 epoch (two-part JD for precision)
let jd1 = 2451545.0;
let jd2 = 0.0;

let result = nut.compute(jd1, jd2).unwrap();
// result.delta_psi: nutation in longitude (radians)
// result.delta_eps: nutation in obliquity (radians)

Implementations§

Source§

impl NutationIAU2000A

Source

pub fn new() -> Self

Creates a new IAU 2000A nutation calculator.

Source

pub fn compute(&self, jd1: f64, jd2: f64) -> AstroResult<NutationResult>

Computes nutation for the given epoch.

Evaluates both lunisolar and planetary nutation series at the specified Julian Date, returning nutation in longitude (delta_psi) and obliquity (delta_eps) in radians.

§Arguments
  • jd1 - First part of two-part Julian Date (typically the integer day)
  • jd2 - Second part of two-part Julian Date (typically the fractional day)

The epoch is computed as jd1 + jd2. The two-part representation preserves precision when the epoch is far from J2000.0.

§Returns

NutationResult containing:

  • delta_psi: Nutation in longitude (radians)
  • delta_eps: Nutation in obliquity (radians)
Source

pub fn compute_lunisolar(&self, args: &[f64; 5], t: f64) -> (f64, f64)

Computes the lunisolar nutation contribution.

Evaluates 678 terms of the lunisolar nutation series. Each term is a trigonometric function of a linear combination of the five fundamental arguments of lunisolar motion.

The series has the form:

delta_psi = sum_i (A_i + A'_i * t) * sin(arg_i) + A''_i * cos(arg_i)
delta_eps = sum_i (B_i + B'_i * t) * cos(arg_i) + B''_i * sin(arg_i)

where arg_i = n_l * l + n_lp * l' + n_F * F + n_D * D + n_Om * Om and coefficients are in microarcseconds.

§Arguments
  • args - Five fundamental arguments in radians: [l, l’, F, D, Om]
    • l: Moon’s mean anomaly
    • l’: Sun’s mean anomaly
    • F: Moon’s argument of latitude
    • D: Mean elongation of Moon from Sun
    • Om: Longitude of Moon’s ascending node
  • t - Julian centuries from J2000.0 (TT)
§Returns

Tuple of (delta_psi, delta_eps) in radians.

Source

pub fn compute_planetary(&self, t: f64) -> (f64, f64)

Computes the planetary nutation contribution.

Evaluates 687 terms of the planetary nutation series. Each term depends on the mean longitudes of the planets (Mercury through Neptune) plus the general precession in longitude.

The planetary series is smaller in amplitude than the lunisolar series but essential for sub-milliarcsecond accuracy. The largest planetary terms arise from resonances between planetary and lunar orbital periods.

§Arguments
  • t - Julian centuries from J2000.0 (TT)
§Returns

Tuple of (delta_psi, delta_eps) in radians.

Trait Implementations§

Source§

impl Clone for NutationIAU2000A

Source§

fn clone(&self) -> NutationIAU2000A

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NutationIAU2000A

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for NutationIAU2000A

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for NutationIAU2000A

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.