kshana 0.18.0

Open, reproducible PNT-resilience simulator with quantum-sensor performance models
Documentation
// SPDX-License-Identifier: Apache-2.0
//! IGRF-14 main-field Gauss coefficients — AUTO-GENERATED from the IAGA
//! `igrf14coeffs.txt` reference by `tools/gen_igrf.py`; do not edit by hand.
//! Schmidt semi-normalised, degree/order 13. `IGRF_G`/`IGRF_H` are the 2025.0
//! main field (nT); `IGRF_GDOT`/`IGRF_HDOT` are the 2025-2030 secular variation
//! (nT/yr). Indexed `[n][m]`. The values are IAGA reference data.

/// Maximum spherical-harmonic degree/order of the shipped model.
pub const IGRF_NMAX: usize = 13;
/// Reference epoch of the shipped main field (decimal year).
pub const IGRF_EPOCH: f64 = 2025.0;

#[rustfmt::skip]
pub static IGRF_G: [[f64; 14]; 14] = [
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [-29350.0, -1410.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [-2556.2, 2950.9, 1648.7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [1360.9, -2404.2, 1243.8, 453.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [894.7, 799.6, 55.8, -281.1, 12.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [-232.9, 369.0, 187.2, -138.7, -141.9, 20.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [64.3, 63.8, 76.7, -115.7, -40.9, 14.9, -60.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [79.6, -76.9, -8.8, 59.3, 15.8, 2.5, -11.2, 14.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [23.1, 10.9, -17.5, 2.0, -21.8, 16.9, 14.9, -16.8, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [4.7, 8.0, 3.0, -0.2, -2.5, -13.1, 2.4, 8.6, -8.7, -12.8, 0.0, 0.0, 0.0, 0.0],
    [-1.3, -6.4, 0.2, 2.0, -1.0, -0.5, -0.9, 1.5, 0.9, -2.6, -3.9, 0.0, 0.0, 0.0],
    [3.0, -1.4, -2.5, 2.4, -0.6, 0.0, -0.6, -0.1, 1.1, -1.0, -0.1, 2.6, 0.0, 0.0],
    [-2.0, -0.1, 0.4, 1.2, -1.2, 0.6, 0.5, 0.5, -0.1, -0.5, -0.2, -1.2, -0.7, 0.0],
    [0.2, -0.9, 0.6, 0.7, -0.2, 0.5, 0.1, 0.7, 0.0, 0.3, 0.2, 0.4, -0.5, -0.4],
];
#[rustfmt::skip]
pub static IGRF_H: [[f64; 14]; 14] = [
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 4545.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -3133.6, -814.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -56.9, 237.6, -549.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 278.6, -134.0, 212.0, -375.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 45.3, 220.0, -122.9, 42.9, 106.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -18.4, 16.8, 48.9, -59.8, 10.9, 72.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -48.9, -14.4, -1.0, 23.5, -7.4, -25.1, -2.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 7.2, -12.6, 11.5, -9.7, 12.7, 0.7, -5.2, 3.9, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -24.8, 12.1, 8.3, -3.4, -5.3, 7.2, -0.6, 0.8, 9.8, 0.0, 0.0, 0.0, 0.0],
    [0.0, 3.3, 0.1, 2.5, 5.4, -9.0, 0.4, -4.2, -3.8, 0.9, -9.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 2.8, -0.6, 0.1, 0.5, -0.3, -1.2, -1.7, -2.9, -1.8, -2.3, 0.0, 0.0],
    [0.0, -1.2, 0.6, 1.0, -1.5, 0.0, 0.6, -0.2, 0.8, 0.1, -0.9, 0.1, 0.2, 0.0],
    [0.0, -0.9, 0.7, 1.2, -0.3, -1.3, -0.1, 0.2, -0.2, 0.5, 0.6, -0.6, -0.3, -0.5],
];
#[rustfmt::skip]
pub static IGRF_GDOT: [[f64; 14]; 14] = [
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [12.6, 10.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [-11.2, -5.3, -8.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [-1.5, -4.4, 0.4, -15.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [-1.7, -2.3, -5.8, 5.4, -6.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.6, 1.3, 0.0, 0.7, 2.3, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [-0.2, -0.3, 0.8, 1.2, -0.8, 0.4, 0.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [-0.1, -0.1, -0.1, 0.5, -0.1, -0.8, -0.8, 0.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [-0.1, 0.2, 0.0, 0.4, -0.1, 0.3, 0.1, 0.0, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
];
#[rustfmt::skip]
pub static IGRF_HDOT: [[f64; 14]; 14] = [
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -21.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -27.3, -11.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 3.8, -0.2, -3.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -1.3, 4.1, 1.6, -4.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -0.5, 2.1, 0.5, 1.7, 1.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.3, -1.6, -0.4, 0.8, 0.7, 0.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.6, 0.5, -0.7, 0.0, -0.9, 0.5, -0.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, -0.3, 0.4, -0.3, 0.4, -0.5, -0.6, 0.3, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
];