Changeset 2579 in ntrip for trunk/BNC/bnctides.cpp


Ignore:
Timestamp:
Aug 29, 2010, 11:46:55 AM (14 years ago)
Author:
mervart
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/bnctides.cpp

    r2578 r2579  
    55
    66#include "bnctides.h"
     7#include "bncutils.h"
    78
    89using namespace std;
     
    167168          * r_Moon;
    168169}
     170
     171// Tidal Correction
     172////////////////////////////////////////////////////////////////////////////
     173void tides(const bncTime& time, ColumnVector& xyz) {
     174
     175  static double       lastMjd = 0.0;
     176  static ColumnVector xSun(3);
     177  static ColumnVector xMoon(3);
     178  static double       rSun;
     179  static double       rMoon;
     180
     181  double Mjd = time.mjd() + time.daysec() / 86400.0;
     182
     183  if (Mjd != lastMjd) {
     184    lastMjd = Mjd;
     185    xSun = Sun(Mjd);
     186    rSun = sqrt(DotProduct(xSun,xSun));
     187    xSun /= rSun;
     188    xMoon = Moon(Mjd);
     189    rMoon = sqrt(DotProduct(xMoon,xMoon));
     190    xMoon /= rMoon;
     191  }
     192
     193  double       rRec    = sqrt(DotProduct(xyz, xyz));
     194  ColumnVector xyzUnit = xyz / rRec;
     195
     196  // Love's Numbers
     197  // --------------
     198  const double H2 = 0.6090;
     199  const double L2 = 0.0852;
     200
     201  // Tidal Displacement
     202  // ------------------
     203  double scSun  = DotProduct(xyzUnit, xSun);
     204  double scMoon = DotProduct(xyzUnit, xMoon);
     205
     206  double p2Sun  = 3.0 * (H2/2.0-L2) * scSun  * scSun  - H2/2.0;
     207  double p2Moon = 3.0 * (H2/2.0-L2) * scMoon * scMoon - H2/2.0;
     208
     209  double x2Sun  = 3.0 * L2 * scSun;
     210  double x2Moon = 3.0 * L2 * scMoon;
     211 
     212  const double gmWGS = 398.6005e12;
     213  const double gms   = 1.3271250e20;
     214  const double gmm   = 4.9027890e12;
     215
     216  double facSun  = gms / gmWGS *
     217                   (rRec * rRec * rRec * rRec) / (rSun * rSun * rSun);
     218  double facMoon = gmm / gmWGS *
     219                   (rRec * rRec * rRec * rRec) / (rMoon * rMoon * rMoon);
     220
     221  double theta = GMST(Mjd);
     222
     223  double Ell[3]; xyz2ell(xyz.data(), Ell);
     224
     225  ColumnVector dX = facSun  * (x2Sun  * xSun  + p2Sun  * xyzUnit) +
     226                    facMoon * (x2Moon * xMoon + p2Moon * xyzUnit) -
     227              0.025 * sin(Ell[0]) * cos(Ell[0]) * sin(theta+Ell[1]) * xyzUnit;
     228
     229  xyz += dX;
     230}
Note: See TracChangeset for help on using the changeset viewer.