Public Member Functions | List of all members
gnsstk::MODIP Class Reference

Detailed Description

Wrap the MODIP (Modified Dip Latitude) data used by the NeQuick G ionospheric model. MODIP is a translated latitude that defines regions used by the NeQuick G ionosphere model that are based on a "pseudo-latitude" that is computed using the geodetic latitude and longitude, and a grid that maps from geodetic position to a modeled latitude. See Galileo Ionospheric Model, Figure 2.

Definition at line 54 of file MODIP.hpp.

#include <MODIP.hpp>

Public Member Functions

double interpolate (double z[4], double x) const
 
 MODIP ()
 
double stModip (const Position &pos) const
 

Constructor & Destructor Documentation

◆ MODIP()

gnsstk::MODIP::MODIP ( )

Definition at line 64 of file MODIP.cpp.

Member Function Documentation

◆ interpolate()

double gnsstk::MODIP::interpolate ( double  z[4],
double  x 
) const

Perform third-order interpolation across a set of data points.

Parameters
[in]zAn array of 4 points to perform interpolation over.
[in]xA fractional offset relative to z[1] that is the target for interpolation.
Returns
The interpolated value.

Definition at line 358 of file MODIP.cpp.

◆ stModip()

double gnsstk::MODIP::stModip ( const Position pos) const

Get the MODIP value at a lat and lon in degrees.

Parameters
[in]posThe observer geodetic position.
Returns
The modeled latitude.
Note
While the math here is labeled with the equivalent equation number in the Galileo document, the document is written around the FORTRAN implementation and thus subtle differences will be present - particularly in the fact that the FORTRAN implementation has array indices of negative values, which is not allowed in C or C++.
references to "grid" here do not refer to a grid coordinate system, but rather the 2D data array above
the multiple casting of double to int is intentional as at one point the tweaking of longGridIdx cause the attempts to compute the fractional portions led to incorrect results.
It's not entirely clear what the purpose of this was, but near as I can make out, the grid has (360/LongStep)+3 points in it and this is meant to wrap around the longitude value. I think the Galileo incorrectly checked for l>33 (longGridIdx>33) when it should have been 39? But the C code checks for 360/LongStep as the wrapping point. And that's what I'm going to mirror here. confused Maybe the extra array elements are to support the interpolation without having to muck around with wrapping array indices. Seems likely.

Definition at line 70 of file MODIP.cpp.


The documentation for this class was generated from the following files:


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:45