CelestialCalendar 1.0.0 · unreleased development @ 67a7c4c79a4a4a6aa7e703c9e6f0039ae34bee82
Loading...
Searching...
No Matches
astro::ephemeris::detail Namespace Reference

Classes

struct  EventBounds
 Source-model derivative and evaluation allowances under the event-search floating-point contract. More...

Functions

constexpr auto consistent_provider (const TargetFacts &facts) -> bool
 Keep each source's dispatch operands consistent before any runtime lookup.
consteval auto complete_target_facts () -> bool
 Check membership, provider operands and shared-source windows; enum aliases are indistinguishable.
auto physical_apparent (const TargetFacts &facts, const double jde_tt) -> toolbox::SphericalCoordinate
 Return an apparent geocentric ecliptic position, including AU distance.
auto longitude_for_rate (const Target target, const double jde_tt) -> toolbox::AngleDeg
 Evaluate apparent longitude at JDE(TT); descending nodes use the paired ascending rate trajectory.
auto validate_position (const Position &coordinate) -> void
 Reject impossible computed coordinates without clamping latitude or distance.
auto validate_stencil (const double jde_tt) -> void
 Require finite JDE(TT) and exact representability of all six binary-offset sample times.
auto validate_reach (const double jde_tt, const double start_jde_tt, const double end_jde_tt) -> void
 Require the whole ±3/8-day stencil to remain inside the provider's half-open TT domain.
auto validate_rate_input (const Target target, const double jde_tt) -> void
 Validate sample representability before identity and the source's sampling reach.
template<typename LongitudeProvider>
requires std::invocable<const LongitudeProvider&, double> and std::same_as<std::invoke_result_t<const LongitudeProvider&, double>, toolbox::AngleDeg>
auto differentiate (const LongitudeProvider &longitude, const double jde_tt) -> LongitudeRate
 Evaluate the seven-point centered longitude rate, in degrees per TT day.
auto event_longitude (const Target target, const double jde_tt) -> toolbox::AngleDeg
 Evaluate the actual target longitude; descending-node rates alone use the ascending trajectory.
auto constant_longitude_difference (const Target first, const Target second) -> std::optional< toolbox::AngleDeg >
 Recognize constant real-model first-minus-second relations by target identity, not sampled positions.
auto event_rate_center (const Target target, const double jde_tt) -> double
 Choose a query-independent legal rate center for a time in the closed rate domain.
template<typename Provider>
requires std::invocable<const Provider&, double> and std::same_as<std::invoke_result_t<const Provider&, double>, astro::detail::event_search::Value>
auto event_rate_value (const Provider &provider, const Target target, const double jde_tt, const double first_derivative) -> astro::detail::event_search::Value
 Evaluate a rate at a legal center and charge its displacement from the requested TT time.
auto validate_event_environment () -> void
 Reject execution environments outside the source-model error contract before evaluating a provider.
auto event_grid (const Target first, const std::optional< Target > second, const astro::detail::event_search::Interval query) -> astro::detail::event_search::Grid
 Validate a nonempty query against the published rate domains, then form its absolute cell grid.
auto event_bounds (const Target target, const astro::detail::event_search::Interval cell) -> EventBounds
 Select a fixed analysis band by the entire canonical cell and sample halo, never by query endpoints.
auto has_no_station (const EventBounds bounds) -> bool
 Recognize a globally certified nonzero rate without scanning its sign.
auto event_position_value (const Target target, const double jde_tt, const EventBounds bounds) -> astro::detail::event_search::LongitudeValue
 Observe the source longitude with its selected fixed-band evaluation allowance.
auto event_rate_observation (const Target target, const double jde_tt, const EventBounds bounds) -> astro::detail::event_search::Value
 Evaluate the seven-point rate at a center allowed by its domain, bounding any time displacement.
auto subtract_event_rates (const astro::detail::event_search::Value first, const astro::detail::event_search::Value second) -> astro::detail::event_search::Value
 Subtract independent scalar observations with a conservative binary64 subtraction allowance.
auto difference_bounds (const EventBounds first, const EventBounds second) -> astro::detail::event_search::TrajectoryBounds
 Sum absolute derivative bounds for a directed difference, without subtracting independent uncertainties.
auto event_direction (const astro::detail::event_search::ContactDirection direction) -> EventDirection
 Translate the private search classification without coupling the kernel to public result types.
auto search_longitudes (const Target first, const std::optional< Target > second, const toolbox::AngleDeg target, const astro::detail::event_search::Grid grid, const astro::detail::event_search::Interval query) -> std::vector< astro::detail::event_search::LongitudeRoot >
 Search whole absolute cells; station refinement uses the cell's allowances, contact regions the window's.

Variables

constexpr double DIFFERENCE_STEP_TT_DAYS
constexpr double DIFFERENCE_REACH_TT_DAYS
constexpr std::array< EventBounds, 14 > EVENT_BOUNDS_WIDE
constexpr std::array< EventBounds, 14 > EVENT_BOUNDS_CENTURY
constexpr double EVENT_RATE_CENTER_QUANTUM_TT_DAYS
constexpr double EVENT_CELL_WIDTH_TT_DAYS
constexpr double EVENT_TIME_RESOLUTION_TT_DAYS
constexpr std::size_t EVENT_MAXIMUM_EVALUATIONS
constexpr std::size_t EVENT_MAXIMUM_CANDIDATES
constexpr double EVENT_CENTURY_START_JDE_TT
constexpr double EVENT_CENTURY_END_JDE_TT

Function Documentation

◆ complete_target_facts()

auto astro::ephemeris::detail::complete_target_facts ( ) ->bool
nodiscardconsteval

Check membership, provider operands and shared-source windows; enum aliases are indistinguishable.

◆ consistent_provider()

auto astro::ephemeris::detail::consistent_provider ( const TargetFacts & facts) ->bool
nodiscardconstexpr

Keep each source's dispatch operands consistent before any runtime lookup.

◆ constant_longitude_difference()

auto astro::ephemeris::detail::constant_longitude_difference ( const Target first,
const Target second )->std::optional< toolbox::AngleDeg >
inlinenodiscard

Recognize constant real-model first-minus-second relations by target identity, not sampled positions.

Exceptions
std::invalid_argumentIf either target is unknown.

◆ difference_bounds()

auto astro::ephemeris::detail::difference_bounds ( const EventBounds first,
const EventBounds second )->astro::detail::event_search::TrajectoryBounds
inlinenodiscard

Sum absolute derivative bounds for a directed difference, without subtracting independent uncertainties.

◆ differentiate()

template<typename LongitudeProvider>
requires std::invocable<const LongitudeProvider&, double> and std::same_as<std::invoke_result_t<const LongitudeProvider&, double>, toolbox::AngleDeg>
auto astro::ephemeris::detail::differentiate ( const LongitudeProvider & longitude,
const double jde_tt )->LongitudeRate
inlinenodiscard

Evaluate the seven-point centered longitude rate, in degrees per TT day.

Note
Each sample pair's continuously lifted change must be within (-180, 180) degrees.
See also
docs/EPHEMERIS_EVENTS.md, "Seven-point operator and remainder" (coefficients and Peano kernel).
https://en.wikipedia.org/wiki/Finite_difference_coefficient#Central_finite_difference

◆ event_bounds()

auto astro::ephemeris::detail::event_bounds ( const Target target,
const astro::detail::event_search::Interval cell )->EventBounds
inlinenodiscard

Select a fixed analysis band by the entire canonical cell and sample halo, never by query endpoints.

◆ event_direction()

auto astro::ephemeris::detail::event_direction ( const astro::detail::event_search::ContactDirection direction) ->EventDirection
inlinenodiscard

Translate the private search classification without coupling the kernel to public result types.

◆ event_grid()

auto astro::ephemeris::detail::event_grid ( const Target first,
const std::optional< Target > second,
const astro::detail::event_search::Interval query )->astro::detail::event_search::Grid
inlinenodiscard

Validate a nonempty query against the published rate domains, then form its absolute cell grid.

See also
docs/EPHEMERIS_EVENTS.md, "Domains, limits and failures" and "Search policies".

◆ event_longitude()

auto astro::ephemeris::detail::event_longitude ( const Target target,
const double jde_tt )->toolbox::AngleDeg
inlinenodiscard

Evaluate the actual target longitude; descending-node rates alone use the ascending trajectory.

◆ event_position_value()

auto astro::ephemeris::detail::event_position_value ( const Target target,
const double jde_tt,
const EventBounds bounds )->astro::detail::event_search::LongitudeValue
inlinenodiscard

Observe the source longitude with its selected fixed-band evaluation allowance.

◆ event_rate_center()

auto astro::ephemeris::detail::event_rate_center ( const Target target,
const double jde_tt )->double
inlinenodiscard

Choose a query-independent legal rate center for a time in the closed rate domain.

Note
Requires round-to-nearest-even. The final domain endpoint is virtual and selects the preceding grid center.

◆ event_rate_observation()

auto astro::ephemeris::detail::event_rate_observation ( const Target target,
const double jde_tt,
const EventBounds bounds )->astro::detail::event_search::Value
inlinenodiscard

Evaluate the seven-point rate at a center allowed by its domain, bounding any time displacement.

◆ event_rate_value()

template<typename Provider>
requires std::invocable<const Provider&, double> and std::same_as<std::invoke_result_t<const Provider&, double>, astro::detail::event_search::Value>
auto astro::ephemeris::detail::event_rate_value ( const Provider & provider,
const Target target,
const double jde_tt,
const double first_derivative )->astro::detail::event_search::Value
inlinenodiscard

Evaluate a rate at a legal center and charge its displacement from the requested TT time.

Note
The provider's Value bounds D_h g at the selected center; first_derivative bounds |(D_h g)'| over the domain.

◆ has_no_station()

auto astro::ephemeris::detail::has_no_station ( const EventBounds bounds) ->bool
inlinenodiscard

Recognize a globally certified nonzero rate without scanning its sign.

◆ longitude_for_rate()

auto astro::ephemeris::detail::longitude_for_rate ( const Target target,
const double jde_tt )->toolbox::AngleDeg
inlinenodiscard

Evaluate apparent longitude at JDE(TT); descending nodes use the paired ascending rate trajectory.

◆ physical_apparent()

auto astro::ephemeris::detail::physical_apparent ( const TargetFacts & facts,
const double jde_tt )->toolbox::SphericalCoordinate
inlinenodiscard

Return an apparent geocentric ecliptic position, including AU distance.

Exceptions
std::logic_errorIf the source is nonphysical or a required planet operand is missing.

◆ search_longitudes()

auto astro::ephemeris::detail::search_longitudes ( const Target first,
const std::optional< Target > second,
const toolbox::AngleDeg target,
const astro::detail::event_search::Grid grid,
const astro::detail::event_search::Interval query )->std::vector< astro::detail::event_search::LongitudeRoot >
inlinenodiscard

Search whole absolute cells; station refinement uses the cell's allowances, contact regions the window's.

See also
docs/EPHEMERIS_EVENTS.md, "Numerical contacts" and "Scalar cell certificates" (project derivations).

◆ subtract_event_rates()

auto astro::ephemeris::detail::subtract_event_rates ( const astro::detail::event_search::Value first,
const astro::detail::event_search::Value second )->astro::detail::event_search::Value
inlinenodiscard

Subtract independent scalar observations with a conservative binary64 subtraction allowance.

◆ validate_event_environment()

auto astro::ephemeris::detail::validate_event_environment ( ) ->void
inline

Reject execution environments outside the source-model error contract before evaluating a provider.

◆ validate_position()

auto astro::ephemeris::detail::validate_position ( const Position & coordinate) ->void
inline

Reject impossible computed coordinates without clamping latitude or distance.

◆ validate_rate_input()

auto astro::ephemeris::detail::validate_rate_input ( const Target target,
const double jde_tt )->void
inline

Validate sample representability before identity and the source's sampling reach.

◆ validate_reach()

auto astro::ephemeris::detail::validate_reach ( const double jde_tt,
const double start_jde_tt,
const double end_jde_tt )->void
inline

Require the whole ±3/8-day stencil to remain inside the provider's half-open TT domain.

◆ validate_stencil()

auto astro::ephemeris::detail::validate_stencil ( const double jde_tt) ->void
inline

Require finite JDE(TT) and exact representability of all six binary-offset sample times.

Variable Documentation

◆ DIFFERENCE_REACH_TT_DAYS

double astro::ephemeris::detail::DIFFERENCE_REACH_TT_DAYS
inlineconstexpr

◆ DIFFERENCE_STEP_TT_DAYS

double astro::ephemeris::detail::DIFFERENCE_STEP_TT_DAYS
inlineconstexpr

◆ EVENT_BOUNDS_CENTURY

std::array<EventBounds, 14> astro::ephemeris::detail::EVENT_BOUNDS_CENTURY
inlineconstexpr

◆ EVENT_BOUNDS_WIDE

std::array<EventBounds, 14> astro::ephemeris::detail::EVENT_BOUNDS_WIDE
inlineconstexpr

◆ EVENT_CELL_WIDTH_TT_DAYS

double astro::ephemeris::detail::EVENT_CELL_WIDTH_TT_DAYS
inlineconstexpr

◆ EVENT_CENTURY_END_JDE_TT

double astro::ephemeris::detail::EVENT_CENTURY_END_JDE_TT
inlineconstexpr

◆ EVENT_CENTURY_START_JDE_TT

double astro::ephemeris::detail::EVENT_CENTURY_START_JDE_TT
inlineconstexpr

◆ EVENT_MAXIMUM_CANDIDATES

std::size_t astro::ephemeris::detail::EVENT_MAXIMUM_CANDIDATES
inlineconstexpr

◆ EVENT_MAXIMUM_EVALUATIONS

std::size_t astro::ephemeris::detail::EVENT_MAXIMUM_EVALUATIONS
inlineconstexpr

◆ EVENT_RATE_CENTER_QUANTUM_TT_DAYS

double astro::ephemeris::detail::EVENT_RATE_CENTER_QUANTUM_TT_DAYS
inlineconstexpr

◆ EVENT_TIME_RESOLUTION_TT_DAYS

double astro::ephemeris::detail::EVENT_TIME_RESOLUTION_TT_DAYS
inlineconstexpr