Go to the documentation of this file.
53 const bool semicircle_units) noexcept
55 setModel(a, b, semicircle_units);
63 engalm.getIon(alpha,
beta);
66 catch(InvalidRequest& e)
74 const bool semicircle_units) noexcept
76 for (
int n = 0; n < 4; n++)
83 if (!semicircle_units)
105 InvalidIonoModel e(
"Alpha and beta parameters invalid.");
114 double svE = svel / 180.0;
119 double psi = (0.0137 / (svE + 0.11)) - 0.022;
121 double phi_i = phi_u + psi *
std::cos(azRad);
127 double lambda_i = lambda_u + psi *
::sin(azRad) /
::cos(phi_i*
PI);
129 double phi_m = phi_i + 0.064 *
::cos((lambda_i - 1.617)*
PI);
147 double x =
TWO_PI * (t - 50400.0) / iPER;
149 double iF = 1.0 + 16.0 * (0.53 - svE)*(0.53 - svE)*(0.53 - svE);
153 t_iono = iF * (5.0e-9 + iAMP * (1 + x*x * (-0.5 + x*x/24.0)));
155 t_iono = iF * 5.0e-9;
168 throw InvalidIonoModel(
"Invalid CarrierBand, not one of L1,L2,L5.");
171 double correction = t_iono *
C_MPS;
179 for (
int n = 0; n < 4; n++)
181 if (alpha[n] != right.alpha[n] ||
beta[n] != right.beta[n])
198 for (
int n = 0; n < 4; n++)
211 s <<
"a = { " <<
alpha[0] <<
" , " <<
alpha[1] <<
" , "
213 s <<
"b = { " <<
beta[0] <<
" , " <<
beta[1] <<
" , "
214 <<
beta[2] <<
" , " <<
beta[3] <<
" }" << std::endl;
IonoModel() noexcept
Default constructor, creates an invalid model for lack of parameters.
bool operator==(const IonexData::IonexValType &x, const IonexData::IonexValType &y)
operator == for IonexData::IonexValType
void setModel(const double a[4], const double b[4], const bool semicircle_units=true) noexcept
const double TWO_PI
GPS value of PI*2.
const double PI
GPS value of PI; also specified by GAL.
bool operator==(const IonoModel &right) const noexcept
Equality operator.
const double GAMMA_GPS_15
double sin(gnsstk::Angle x)
const double GAMMA_GPS_12
GPS Gamma constants.
bool operator!=(const IonoModel &right) const noexcept
Inequality operator.
const double C_MPS
m/s, speed of light; this value defined by GPS but applies to GAL and GLO.
double getCorrection(const CommonTime &time, const Position &rxgeo, double svel, double svaz, CarrierBand band=CarrierBand::L1) const
virtual void dump(std::ostream &s=std::cout) const
double getGeodeticLatitude() const noexcept
return geodetic latitude (deg N)
@ L1
GPS L1, Galileo E1, SBAS L1, QZSS L1, BeiDou L1.
double cos(gnsstk::Angle x)
double beta(double x, double y)
double getLongitude() const noexcept
return longitude (deg E) (either geocentric or geodetic)
#define GNSSTK_THROW(exc)
bool getModel(double a[4], double b[4]) const noexcept
@ L5
GPS L5, Galileo E5a, SBAS L5, QZSS L5, BeiDou B2a, NavIC L5.
static const double DEG_TO_RAD
Conversion Factor from degrees to radians (units: degrees^-1)
gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:39