Changeset 5801 in ntrip for trunk/BNC/src/PPP/pppModel.cpp


Ignore:
Timestamp:
Aug 6, 2014, 10:24:02 AM (10 years ago)
Author:
mervart
Message:
 
File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/PPP/pppModel.cpp

    r5800 r5801  
    22#include <cmath>
    33
    4 #include "bnctides.h"
     4#include "pppModel.h"
    55#include "bncutils.h"
    66
    77using namespace std;
    88
    9 // Auxiliary Functions
    10 ///////////////////////////////////////////////////////////////////////////
    11 namespace {
    12 
    13   static const double RHO_DEG   = 180.0 / M_PI;
    14   static const double RHO_SEC   = 3600.0 * RHO_DEG;
    15   static const double MJD_J2000 = 51544.5;
    16 
    17   double Frac (double x) { return x-floor(x); };
    18   double Modulo (double x, double y) { return y*Frac(x/y); }
    19 
    20   Matrix rotX(double Angle) {
    21     const double C = cos(Angle);
    22     const double S = sin(Angle);
    23     Matrix UU(3,3);
    24     UU[0][0] = 1.0;  UU[0][1] = 0.0;  UU[0][2] = 0.0;
    25     UU[1][0] = 0.0;  UU[1][1] =  +C;  UU[1][2] =  +S;
    26     UU[2][0] = 0.0;  UU[2][1] =  -S;  UU[2][2] =  +C;
    27     return UU;
    28   }
    29  
    30   Matrix rotY(double Angle) {
    31     const double C = cos(Angle);
    32     const double S = sin(Angle);
    33     Matrix UU(3,3);
    34     UU[0][0] =  +C;  UU[0][1] = 0.0;  UU[0][2] =  -S;
    35     UU[1][0] = 0.0;  UU[1][1] = 1.0;  UU[1][2] = 0.0;
    36     UU[2][0] =  +S;  UU[2][1] = 0.0;  UU[2][2] =  +C;
    37     return UU;
    38   }
    39  
    40   Matrix rotZ(double Angle) {
    41     const double C = cos(Angle);
    42     const double S = sin(Angle);
    43     Matrix UU(3,3);
    44     UU[0][0] =  +C;  UU[0][1] =  +S;  UU[0][2] = 0.0;
    45     UU[1][0] =  -S;  UU[1][1] =  +C;  UU[1][2] = 0.0;
    46     UU[2][0] = 0.0;  UU[2][1] = 0.0;  UU[2][2] = 1.0;
    47     return UU;
    48   }
     9double Frac (double x) { return x-floor(x); };
     10double Modulo (double x, double y) { return y*Frac(x/y); }
     11
     12Matrix t_astro::rotX(double Angle) {
     13  const double C = cos(Angle);
     14  const double S = sin(Angle);
     15  Matrix UU(3,3);
     16  UU[0][0] = 1.0;  UU[0][1] = 0.0;  UU[0][2] = 0.0;
     17  UU[1][0] = 0.0;  UU[1][1] =  +C;  UU[1][2] =  +S;
     18  UU[2][0] = 0.0;  UU[2][1] =  -S;  UU[2][2] =  +C;
     19  return UU;
     20}
     21
     22Matrix t_astro::rotY(double Angle) {
     23  const double C = cos(Angle);
     24  const double S = sin(Angle);
     25  Matrix UU(3,3);
     26  UU[0][0] =  +C;  UU[0][1] = 0.0;  UU[0][2] =  -S;
     27  UU[1][0] = 0.0;  UU[1][1] = 1.0;  UU[1][2] = 0.0;
     28  UU[2][0] =  +S;  UU[2][1] = 0.0;  UU[2][2] =  +C;
     29  return UU;
     30}
     31
     32Matrix t_astro::rotZ(double Angle) {
     33  const double C = cos(Angle);
     34  const double S = sin(Angle);
     35  Matrix UU(3,3);
     36  UU[0][0] =  +C;  UU[0][1] =  +S;  UU[0][2] = 0.0;
     37  UU[1][0] =  -S;  UU[1][1] =  +C;  UU[1][2] = 0.0;
     38  UU[2][0] = 0.0;  UU[2][1] = 0.0;  UU[2][2] = 1.0;
     39  return UU;
    4940}
    5041
    5142// Greenwich Mean Sidereal Time
    5243///////////////////////////////////////////////////////////////////////////
    53 double GMST(double Mjd_UT1) {
     44double t_astro::GMST(double Mjd_UT1) {
    5445
    5546  const double Secs = 86400.0;
     
    6859// Nutation Matrix
    6960///////////////////////////////////////////////////////////////////////////
    70 Matrix NutMatrix(double Mjd_TT) {
     61Matrix t_astro::NutMatrix(double Mjd_TT) {
    7162
    7263  const double T  = (Mjd_TT-MJD_J2000)/36525.0;
     
    8980// Precession Matrix
    9081///////////////////////////////////////////////////////////////////////////
    91 Matrix PrecMatrix (double Mjd_1, double Mjd_2) {
     82Matrix t_astro::PrecMatrix(double Mjd_1, double Mjd_2) {
    9283
    9384  const double T  = (Mjd_1-MJD_J2000)/36525.0;
     
    10596// Sun's position
    10697///////////////////////////////////////////////////////////////////////////
    107 ColumnVector Sun(double Mjd_TT) {
     98ColumnVector t_astro::Sun(double Mjd_TT) {
    10899
    109100  const double eps = 23.43929111/RHO_DEG;
     
    126117// Moon's position
    127118///////////////////////////////////////////////////////////////////////////
    128 ColumnVector Moon(double Mjd_TT) {
     119ColumnVector t_astro::Moon(double Mjd_TT) {
    129120
    130121  const double eps = 23.43929111/RHO_DEG;
     
    169160// Tidal Correction
    170161////////////////////////////////////////////////////////////////////////////
    171 void tides(const bncTime& time, ColumnVector& xyz) {
    172 
    173   static double       lastMjd = 0.0;
    174   static ColumnVector xSun;
    175   static ColumnVector xMoon;
    176   static double       rSun;
    177   static double       rMoon;
     162ColumnVector t_tides::displacement(const bncTime& time, const ColumnVector& xyz) {
    178163
    179164  double Mjd = time.mjd() + time.daysec() / 86400.0;
    180165
    181   if (Mjd != lastMjd) {
    182     lastMjd = Mjd;
    183     xSun = Sun(Mjd);
    184     rSun = sqrt(DotProduct(xSun,xSun));
    185     xSun /= rSun;
    186     xMoon = Moon(Mjd);
    187     rMoon = sqrt(DotProduct(xMoon,xMoon));
    188     xMoon /= rMoon;
     166  if (Mjd != _lastMjd) {
     167    _lastMjd = Mjd;
     168    _xSun = t_astro::Sun(Mjd);
     169    _rSun = sqrt(DotProduct(_xSun,_xSun));
     170    _xSun /= _rSun;
     171    _xMoon = t_astro::Moon(Mjd);
     172    _rMoon = sqrt(DotProduct(_xMoon,_xMoon));
     173    _xMoon /= _rMoon;
    189174  }
    190175
     
    199184  // Tidal Displacement
    200185  // ------------------
    201   double scSun  = DotProduct(xyzUnit, xSun);
    202   double scMoon = DotProduct(xyzUnit, xMoon);
     186  double scSun  = DotProduct(xyzUnit, _xSun);
     187  double scMoon = DotProduct(xyzUnit, _xMoon);
    203188
    204189  double p2Sun  = 3.0 * (H2/2.0-L2) * scSun  * scSun  - H2/2.0;
     
    213198
    214199  double facSun  = gms / gmWGS *
    215                    (rRec * rRec * rRec * rRec) / (rSun * rSun * rSun);
     200                   (rRec * rRec * rRec * rRec) / (_rSun * _rSun * _rSun);
    216201
    217202  double facMoon = gmm / gmWGS *
    218                    (rRec * rRec * rRec * rRec) / (rMoon * rMoon * rMoon);
    219 
    220   ColumnVector dX = facSun  * (x2Sun  * xSun  + p2Sun  * xyzUnit) +
    221                     facMoon * (x2Moon * xMoon + p2Moon * xyzUnit);
    222 
    223   xyz += dX;
    224 }
     203                   (rRec * rRec * rRec * rRec) / (_rMoon * _rMoon * _rMoon);
     204
     205  ColumnVector dX = facSun  * (x2Sun  * _xSun  + p2Sun  * xyzUnit) +
     206                    facMoon * (x2Moon * _xMoon + p2Moon * xyzUnit);
     207
     208  return dX;
     209}
Note: See TracChangeset for help on using the changeset viewer.