0.3.0
Loading...
Searching...
No Matches
ViennaMappingFunction.cpp
Go to the documentation of this file.
1// This file is part of INSTINCT, the INS Toolkit for Integrated
2// Navigation Concepts and Training by the Institute of Navigation of
3// the University of Stuttgart, Germany.
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
10#include <cmath>
11#include <tuple>
12
13namespace NAV
14{
15double vmf1h(const double& ah, const double& dmjd,
16 const double& dlat, const double& ht, const double& zd)
17{
18 double doy = dmjd - 44239.0 + 1 - 28;
19
20 double bh = 0.0029;
21 double c0h = 0.062;
22
23 auto [phh, c11h, c10h] = dlat < 0.0
24 ? std::make_tuple(M_PI, 0.007, 0.002) // southern hemisphere
25 : std::make_tuple(0.0, 0.005, 0.001); // northern hemisphere
26
27 double ch = c0h + ((std::cos(doy / 365.25 * 2.0 * M_PI + phh) + 1.0) * c11h / 2.0 + c10h) * (1.0 - std::cos(dlat));
28
29 double sine = std::sin(M_PI / 2.0 - zd);
30 double beta = bh / (sine + ch);
31 double gamma = ah / (sine + beta);
32 double topcon = 1.0 + ah / (1.0 + bh / (1.0 + ch));
33 double vmf1h = topcon / (sine + gamma);
34
35 // height correction [Niell, 1996]
36 double a_ht = 2.53e-5;
37 double b_ht = 5.49e-3;
38 double c_ht = 1.14e-3;
39 double hs_km = ht / 1000.0;
40 beta = b_ht / (sine + c_ht);
41 gamma = a_ht / (sine + beta);
42 topcon = 1.0 + a_ht / (1.0 + b_ht / (1.0 + c_ht));
43 double ht_corr_coef = 1.0 / sine - topcon / (sine + gamma);
44 double ht_corr = ht_corr_coef * hs_km;
45 vmf1h += ht_corr;
46
47 return vmf1h;
48}
49double vmf1w(const double& aw, const double& zd)
50{
51 double sine = std::sin(M_PI / 2.0 - zd);
52 double bw = 0.00146;
53 double cw = 0.04391;
54 double beta = bw / (sine + cw);
55 double gamma = aw / (sine + beta);
56 double topcon = 1.0 + aw / (1.0 + bw / (1.0 + cw));
57
58 return topcon / (sine + gamma);
59}
60
61} // namespace NAV
Gridded Vienna Mapping Function.
double vmf1w(const double &aw, const double &zd)
mapping functions with height correction
double vmf1h(const double &ah, const double &dmjd, const double &dlat, const double &ht, const double &zd)
mapping functions with height correction