cheatah
Struct

space::irbem::T89PositionFold

cheatah-space v0.1.0-alpha — Biome Standard 0.6.5-alpha

The batch's position caveat, accumulated one point at a time.

A batch returns ONE Status for N points, so it can only be the worst of them — and it must not be better than the worst, or a caller who checks it learns nothing about the point that was wrong. Computing that honestly must not cost a second pass over the positions: at 2^22 points the input is 100 MB and re-reading it is a measurable fraction of the whole call. So this folds into the loop that is already touching each point, and it does so without a sqrt: T89's envelope is a radius band plus a sunward x bound, all three monotone, so the smallest radius, the largest radius and the smallest x decide the entire batch and the radii can be compared as SQUARES. Two check_position calls per CALL then reproduce exactly what N of them would have said.

Unit testIrbemT89.BatchReportsTheSameEnvelopeTheScalarLaneDoes

Functions

fn void add(const Position< Frame::GSM > &p) #

Fold one position in.

Parameters
p

the position, GSM, in Earth radii.

Complexity

O(1) — one fused radius, three comparisons, no sqrt and no branch that a compiler cannot turn into a select.

Allocation

none.

Unit testIrbemT89.BatchReportsTheSameEnvelopeTheScalarLaneDoes
fn Status verdict() const #

What the batch's positions say about the model's envelope.

Returns

Status::DomainError when any point is not finite or is inside the Earth, Status::OutOfValidityRange when any point is outside T89's published r_GEO <= 70 R_E, otherwise Status::Ok.

Complexity

O(1) — two square roots and two envelope lookups for the whole batch.

Allocation

none.

Unit testIrbemT89.BatchReportsTheSameEnvelopeTheScalarLaneDoes

Constants & variables

var double r2_lo #

The smallest r^2 seen, R_E^2; +inf until the first point.

var double r2_hi #

The largest r^2 seen, R_E^2; zero until the first point.

var double x_lo #

The smallest GSM x seen, R_E; +inf until the first point.

var bool finite #

False once any point has had a non-finite coordinate.

Tracked separately because a NaN radius compares false against everything and would otherwise slip through both extremes.