cheatah
Class

space::irbem::TotalFieldOm97

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

IGRF plus Ostapenko & Maltsev (1997), as a single field.

Satisfies GeoFieldModel, so it drops into trace_invariant and make_lstar exactly as TotalFieldT89 does; the frames are handled the same way (IGRF in GEO, the external model in GSM, the epoch's Rotations built once). Every evaluation goes through om97_field so that the validity verdict external_status reports is the one the value was computed under; the 85 multiply-adds that rebuilds the amplitudes are noise beside the IGRF evaluation.

Template parameters
NMAX

the internal field's truncation degree. 10 reproduces IRBEM's own choice.

Unit testIrbemOm97.TotalFieldSuperposesInternalAndExternal

Functions

fn constexpr TotalFieldOm97(const Igrf< NMAX > &internal, const Rotations &rotations, const Om97Drivers &drivers, const Om97Normalization &norm=om97_normalization_published) #
Parameters
internal

the internal field, already built for the epoch.

rotations

the epoch's frame rotations — built once, reused for every point.

drivers

the epoch's drivers, IRBEM units (Kp x 10).

norm

the normalization; the published Table 2 by default.

Complexity

O(1) — pointers, a copy of the drivers, one degrees-to-radians.

Allocation

none.

Unit testIrbemOm97.TotalFieldSuperposesInternalAndExternal
fn FieldVector< Frame::GEO > evaluate(const Position< Frame::GEO > &p) const #

The total field at a geographic point.

Parameters
p

the position, GEO, Earth radii.

Returns

B_internal + B_external, in GEO, nT. When the external model refuses the point (Status::DomainError) the INTERNAL field is returned alone rather than a zero or a NaN, for the reason TotalFieldT89::evaluate gives; out-of-validity extrapolations are included, since a polynomial has a value there and the trace needs a continuous field.

Complexity

One IGRF evaluation, one OM97 evaluation, two 3x3 rotations.

Allocation

none.

Unit testIrbemOm97.TotalFieldSuperposesInternalAndExternal
fn Status external_status(const Position< Frame::GEO > &p) const #

Whether the external model answered at p, and if not, why.

Parameters
p

the position, GEO, Earth radii.

Returns

the external model's status; Status::Ok when it contributed without caveat.

Complexity

One OM97 evaluation and one rotation.

Allocation

none.

Unit testIrbemOm97.TotalFieldReportsWhenTheExternalModelDeclines
fn const Om97Drivers & drivers() const #

The drivers this field was built for.

Returns

the value passed to the constructor.

Complexity

O(1).

Allocation

none.

Unit testIrbemOm97.TotalFieldSuperposesInternalAndExternal
fn const Rotations & rotations() const #

The epoch's frame rotations.

Returns

the rotations this field was built with.

Complexity

O(1).

Allocation

none.

Unit testIrbemOm97.TotalFieldSuperposesInternalAndExternal
fn double g(int n, int m) const #

The internal part's Gauss coefficient g(n, m), in nT — forwarded for the reason TotalFieldT89::g gives: the dipole moment and the trace step sizing are questions about the internal field.

Parameters
n

the degree.

m

the order.

Returns

the internal part's coefficient.

Complexity

O(1).

Allocation

none.

Unit testIrbemOm97.TotalFieldSuperposesInternalAndExternal
fn double h(int n, int m) const #

The internal part's h(n, m), in nT — see g.

Parameters
n

the degree.

m

the order.

Returns

the internal part's coefficient.

Complexity

O(1).

Allocation

none.

Unit testIrbemOm97.TotalFieldSuperposesInternalAndExternal
fn const Igrf< NMAX > & internal() const #

The internal field alone.

Returns

the internal model.

Complexity

O(1).

Allocation

none.

Unit testIrbemOm97.TotalFieldSuperposesInternalAndExternal

Constants & variables

var static int degree #

The internal part's truncation degree — what generic staging and buffer sizing read.

var const Igrf< NMAX > * internal_ #
var const Rotations * rotations_ #
var Om97Drivers drivers_ #
var Om97Normalization norm_ #
var double tilt_rad_ #