cheatah
Struct

space::irbem::HotState

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

What the inner loop touches — the field call and the GEO<->GSM hop, on every one of the ~10^5 evaluations a single L* costs.

The first eight doubles are exactly one 64-byte cache line, and they are the ones a Tsyganenko external field call needs: the tilt with its precomputed trigonometry, and the five drivers the published models read (Kp for Mead & Fairfield 1975, Tsyganenko 1987/1989 and Mead-Tsyganenko; Dst, Pdyn, By and Bz for Tsyganenko 1996 onwards). The two matrices follow.

geo_to_gsm and gsm_to_geo duplicate what ColdState::to_geo already holds for GSM. That is deliberate: the duplicate keeps the inner loop off the cold block entirely and spares it a transpose per call. A test pins the two copies to each other so the duplicate cannot go stale.

Constants & variables

var double tilt_rad #

The geodipole tilt angle psi, radians — the angle between the dipole axis and the GSM z axis.

var double sin_tilt #

sin(tilt_rad), computed once per epoch so no field call computes it.

var double cos_tilt #

cos(tilt_rad), likewise.

var double kp #

Driver::Kp, copied out of the driver vector (OMNI2 scaling: Kp x 10).

var double dst #

Driver::Dst, nT.

var double pdyn #

Driver::Pdyn, nPa.

var double by_imf #

Driver::ByIMF, nT.

var double bz_imf #

Driver::BzIMF, nT.

var fixarray::mat3d geo_to_gsm #

Takes GEO components to GSM.

var fixarray::mat3d gsm_to_geo #

Takes GSM components to GEO — the transpose of geo_to_gsm, since a rotation is orthogonal and construction has already checked that this one is.