GeodeticFrames Class Reference

#include <GeodeticFrames.hpp>

List of all members.


Detailed Description

Class GeodeticFrames encapsulates frame transformations between the conventional terrestrial frame and the conventional inertial frame, as defined by the reference.

It implements models of precession and nutation (IERS 1996) of Earth's axis, as well as the precise rotation of Earth and its 'wobble' as given by the Earth orientation parameters (see class EarthOrientation).

Reference: IERS Technical Note 21, IERS Conventions (1996), Dennis D. McCarthy, U.S. Naval Observatory.

The conventional terrestrial system (CTS) or Earth-centered, Earth-fixed frame (ECEF), is related to the conventional inertial system (CIS) by four things: a) precession and b) nutation of the Earth and c) Earth rotation and d) polar motion. The transformation between a vector X(CTS) in the terrestrial (ECEF) frame and the vector X(CIS) in the inertial frame is

 X(CIS) = P * N * R * W * X(CTS)
    where
 W is the transformation using Earth Orientation Parameters
    xp, yp (pole coordinates obtained from the IERS bulletin),
 R is the effect of both Earth rotation and
    precession and nutation in the right ascension,
 N is the nutation matrix,
 P is the precession matrix.

 Reference: IERS Technical Note 21, IERS Conventions (1996), Chapter 5.

 IF
   R1(a) =  [ 1    0      0    ]
            [ 0  cos(a) sin(a) ]
            [ 0 -sin(a) cos(a) ]

   R2(b) =  [ cos(b) 0 -sin(b) ]
            [   0    1    0    ]
            [ sin(b) 0  cos(b) ]

   R3(c) =  [  cos(c) sin(c) 0 ]
            [ -sin(c) cos(c) 0 ]
            [    0      0    1 ]

 and if

   T = (t-t0)(in days)/36525.0 days
   where
   t0 = J2000 = January 1 2000 12h UT = 2451545.0JD

 THEN ----------------------------------------------------------------
  [PRECESSION IAU76]

   P = R3(zeta)*R2(-theta)*R3(z)
  where
   zeta  = 2306.2181*T + 0.30188*T^2 + 0.017998*T^3 seconds of arc
   theta = 2004.3109*T - 0.42665*T^2 - 0.041833*T^3 seconds of arc
   z     = 2306.2181*T + 1.09468*T^2 + 0.018203*T^3 seconds of arc

 AND -----------------------------------------------------------------
  [NUTATION IAU76]

   N = R1(-eps)*R3(dpsi)*R1(eps+deps)
  where
   eps  = obliquity of the ecliptic
   deps = nutation in obliquity
   dpsi = nutation in longitude (counted in the ecliptic)

   eps = (84381.448 - 46.8150*T - 0.00059*T^2 +0.001813*T^3) seconds of arc

  and the principal terms in the series for the other two parameters are
  ( " denotes seconds of arc)

  (IAU76)
   deps   =
     ( 9.205356 + 0.000886*T)*cos(Omega)"       + 0.001553*sin(Omega)"
   + ( 0.573058 - 0.000306*T)*cos(2F-2D+2Omega)"- 0.000464*sin(2F-2D+2Omega)"
   + ( 0.097864 - 0.000048*T)*cos(2F+2Omega)"   + 0.000136*sin(2F+2Omega)"
   + (-0.089747 + 0.000047*T)*cos(2Omega)"      - 0.000029*sin(2Omega)"
   + ( 0.007388 - 0.000019*T)*cos(-L')"         + 0.000198*sin(-L')"
   + ( 0.022440 - 0.000068*T)*cos(Larg)"        - 0.000018*sin(Larg)"
   + (-0.000687 + 0.000000*T)*cos(L)"           - 0.000039*sin(L)"
   etc...
   dpsi   =     
     (-17.206277- 0.017419*T)*sin(Omega)"       + 0.003645*cos(Omega)"
   + (-1.317014 - 0.000156*T)*sin(2F-2D+2Omega)"- 0.001400*cos(2F-2D+2Omega)"
   + (-0.227720 - 0.000023*T)*sin(2F+2Omega)"   + 0.000269*cos(2F+2Omega)"
   + ( 0.207429 + 0.000021*T)*sin(2Omega)"      - 0.000071*cos(2Omega)"
   + (-0.147538 + 0.000364*T)*sin(-L')"         + 0.001121*cos(-L')"
   + (-0.051687 + 0.000123*T)*sin(Larg)"        - 0.000054*cos(Larg)"
   + ( 0.071118 + 0.000007*T)*sin(L)"           - 0.000094*cos(L)"
   etc...
 OR

  (IERS 1980)
   deps   =   ( 9.2025 + 0.00089*T)*cos(Omega)"
            + ( 0.5736 - 0.00031*T)*cos(2F-2D+2Omega)"
            + ( 0.0977 - 0.00005*T)*cos(2F+2Omega)"
            + (-0.0895 + 0.00005*T)*cos(2Omega)"
            + ( 0.0054 - 0.00001*T)*cos(-L')"
            + (-0.0007 + 0.00000*T)*cos(L)"
   etc...
   dpsi   =   (-17.1996- 0.01742*T)*sin(Omega)"
            + (-1.3187 - 0.00016*T)*sin(2F-2D+2Omega)"
            + (-0.2274 - 0.00002*T)*sin(2F+2Omega)"
            + ( 0.2062 + 0.00002*T)*sin(2Omega)"
            + (-0.1426 + 0.00034*T)*sin(-L')"
            + ( 0.0712 + 0.00001*T)*sin(L)"
   etc...
  with

   Larg    = L'+2F-2D+2Omega

   Omega   = mean longitude of the lunar ascending node
           = 125.04455501 degrees - 6962890.2665"*T + 7.4722"*T^2
               + 0.007702"*T^3 - 0.00005939"*T^4

   D       = mean elongation of the moon from the sun
           = 297.85019547 degrees + 1602961601.2090"*T - 6.3706"*T^2
               + 0.006593"*T^3 - 0.00003169"*T^4

   F       = mean longitude of the moon - Omega
           = 93.27209062 degrees + 1739527262.8478"*T - 12.7512"*T^2

   L'      = mean anomaly of the sun
           = 357.52910918 degrees + 129596581.0481"*T - 0.5532"*T^2
               + 0.000136"*T^3 - 0.00001149"*T^4

   L       = mean anomaly of the moon
           = 134.96340251 degrees + 1717915923.2178"*T + 31.8792"*T^2
               +0.051635"*T^3 -0.00024470"*T^4

 AND -----------------------------------------------------------------

   R = R3(-GAST)

   GAST = Greenwich hour angle of the true vernal equinox
   GAST = Greenwich Apparent Sidereal Time
   GAST = GMST + dpsi*cos(eps) + 0.00264"*sin(Omega) +0.000063"*sin(2*Omega)
      (these terms account for the accumulated precession and nutation in
         right ascension and minimize any discontinuity in UT1)

   GMST = Greenwich hour angle of the mean vernal equinox
        = Greenwich Mean Sidereal Time
        = GMST0 + r*[(UT1-UTC)+UTC]
   r    = is the ratio of universal to sidereal time
        = 1.002737909350795 + 5.9006E-11*T' - 5.9e-15*T'^2
   T'   = days'/36525
   days'= number of days elapsed since t0 = +/-(integer+0.5)
      and
   (UT1-UTC) is taken from the IERS bulletin (seconds)

   GMST0 = GMST at 0h UT1
        = 6h 41m (50.54841+8640184.812866*T'+0.093104*T'^2-6.2E-6*T'^3)s

 AND -----------------------------------------------------------------

   W = R1(yp)*R2(xp)
   where xp and yp are the polar coordinates of the celestial ephemeris pole,
      taken from the IERS bulletin. (NB in the bulletin they are in units
      of arcseconds, and they must be converted to radians by multiplying
      by pi/180/3600.)

 

Definition at line 228 of file GeodeticFrames.hpp.

Static Public Member Functions

double GMST (DayTime t, double UT1mUTC, bool reduced=false) throw ()
 Compute Greenwich Mean Sidereal Time, or the Greenwich hour angle of the mean vernal equinox (radians), given the coordinate time of interest, and UT1-UTC (sec), which comes from the IERS bulletin.
double GAST (DayTime t, double UT1mUTC, bool reduced=false) throw ()
 Compute Greenwich Apparent Sidereal Time, or the Greenwich hour angle of the true vernal equinox (radians), given the coordinate time of interest, and UT1-UTC (sec), which comes from the IERS bulletin.
Matrix< double > PolarMotion (double xp, double yp) throw (InvalidRequest)
 Generate transformation matrix (3X3 rotation) due to the polar motion angles xp and yp (arcseconds), as found in the IERS bulletin; see class EarthOrientation.
Matrix< double > PreciseEarthRotation (DayTime t, double UT1mUTC, bool reduced=false) throw (InvalidRequest)
 Generate precise transformation matrix (3X3 rotation) due to Earth rotation at Greenwich hour angle of the true vernal equinox and which accounts for precession and nutation in right ascension, given the UT time of interest and the UT1-UTC correction (in sec), obtained from the IERS bulletin.
Matrix< double > Precession (DayTime t) throw (InvalidRequest)
 Generate an Earth Precession Matrix (3X3 rotation) at the given DayTime.
Matrix< double > Nutation (DayTime t) throw (InvalidRequest)
 Generate an Earth Nutation Matrix (3X3 rotation) at the given DayTime.
Matrix< double > ECEFtoInertial (DayTime t, double xp, double yp, double UT1mUTC, bool reduced=false) throw (InvalidRequest)
 Generate the full transformation matrix (3x3 rotation) relating the ECEF frame to the conventional inertial frame.
void ResolveRotation (const Matrix< double > &R, double &theta, double &phi, double &psi, double &alpha, Vector< double > &nhat) throw (InvalidRequest)
 Given a rotation matrix R (3x3), find the Euler angles (theta,phi,psi) which produce this rotation, and also determine the magnitude alpha and direction nhat (= unit 3-vector) of the net rotation.


Member Function Documentation

Matrix< double > ECEFtoInertial DayTime  t,
double  xp,
double  yp,
double  UT1mUTC,
bool  reduced = false
throw (InvalidRequest) [static]
 

Generate the full transformation matrix (3x3 rotation) relating the ECEF frame to the conventional inertial frame.

Input is the time of interest, the polar motion angles xp and yp (arcseconds), and UT1-UTC (seconds) (xp,yp and UT1-UTC are just as found in the IERS bulletin; see class EarthOrientation).

Parameters:
t DayTime epoch of the rotation.
xp,Earth wobble in arcseconds, as found in the IERS bulletin.
yp,Earth wobble in arcseconds, as found in the IERS bulletin.
UT1mUTC,UT1-UTC in seconds, as found in the IERS bulletin.
reduced,bool true when UT1mUTC is 'reduced', meaning assumes 'no tides', as is the case with the NGA EOPs (default=F).
Returns:
3x3 rotation matrix

Definition at line 1673 of file GeodeticFrames.cpp.

References GPSTK_RETHROW, gpstk::rotation(), and gpstk::UT1mUTC().

double GAST DayTime  t,
double  UT1mUTC,
bool  reduced = false
throw () [static]
 

Compute Greenwich Apparent Sidereal Time, or the Greenwich hour angle of the true vernal equinox (radians), given the coordinate time of interest, and UT1-UTC (sec), which comes from the IERS bulletin.

Parameters:
t DayTime epoch of the rotation.
UT1mUTC,UT1-UTC in seconds, as found in the IERS bulletin.
reduced,bool true when UT1mUTC is 'reduced', meaning assumes 'no tides', as is the case with the NGA EOPs (default=F).

Definition at line 1589 of file GeodeticFrames.cpp.

References gpstk::UT1mUTC().

double GMST DayTime  t,
double  UT1mUTC,
bool  reduced = false
throw () [static]
 

Compute Greenwich Mean Sidereal Time, or the Greenwich hour angle of the mean vernal equinox (radians), given the coordinate time of interest, and UT1-UTC (sec), which comes from the IERS bulletin.

Parameters:
t DayTime epoch of the rotation.
UT1mUTC,UT1-UTC in seconds, as found in the IERS bulletin.
reduced,bool true when UT1mUTC is 'reduced', meaning assumes 'no tides', as is the case with the NGA EOPs (default=F).

Definition at line 1548 of file GeodeticFrames.cpp.

References gpstk::UT1mUTC().

Matrix< double > Nutation DayTime  t  )  throw (InvalidRequest) [static]
 

Generate an Earth Nutation Matrix (3X3 rotation) at the given DayTime.

Parameters:
t DayTime epoch of the rotation.
Returns:
3x3 rotation matrix

Definition at line 1650 of file GeodeticFrames.cpp.

References GPSTK_RETHROW.

Matrix< double > PolarMotion double  xp,
double  yp
throw (InvalidRequest) [static]
 

Generate transformation matrix (3X3 rotation) due to the polar motion angles xp and yp (arcseconds), as found in the IERS bulletin; see class EarthOrientation.

Parameters:
xp,Earth wobble in arcseconds, as found in the IERS bulletin.
yp,Earth wobble in arcseconds, as found in the IERS bulletin.

Definition at line 1612 of file GeodeticFrames.cpp.

References GPSTK_RETHROW, and gpstk::rotation().

Matrix<double> Precession DayTime  t  )  throw (InvalidRequest) [inline, static]
 

Generate an Earth Precession Matrix (3X3 rotation) at the given DayTime.

Definition at line 434 of file GeodeticFrames.hpp.

Matrix< double > PreciseEarthRotation DayTime  t,
double  UT1mUTC,
bool  reduced = false
throw (InvalidRequest) [static]
 

Generate precise transformation matrix (3X3 rotation) due to Earth rotation at Greenwich hour angle of the true vernal equinox and which accounts for precession and nutation in right ascension, given the UT time of interest and the UT1-UTC correction (in sec), obtained from the IERS bulletin.

Parameters:
t DayTime epoch of the rotation.
UT1mUTC,UT1-UTC in seconds, as found in the IERS bulletin.
Returns:
3x3 rotation matrix

Definition at line 1634 of file GeodeticFrames.cpp.

References GPSTK_RETHROW, gpstk::rotation(), and gpstk::UT1mUTC().

void ResolveRotation const Matrix< double > &  R,
double &  theta,
double &  phi,
double &  psi,
double &  alpha,
Vector< double > &  nhat
throw (InvalidRequest) [static]
 

Given a rotation matrix R (3x3), find the Euler angles (theta,phi,psi) which produce this rotation, and also determine the magnitude alpha and direction nhat (= unit 3-vector) of the net rotation.

Throw InvalidRequest if the matrix is not a rotation matrix.

Definition at line 1809 of file GeodeticFrames.cpp.

References GPSTK_THROW, gpstk::norm(), gpstk::normF(), Matrix::resize(), SQRT, and gpstk::transpose().


The documentation for this class was generated from the following files:
Generated on Wed Feb 8 03:31:27 2012 for GPS ToolKit Software Library by  doxygen 1.3.9.1