1 //==============================================================================
2 //
3 //  This file is part of GPSTk, the GPS Toolkit.
4 //
5 //  The GPSTk is free software; you can redistribute it and/or modify
6 //  it under the terms of the GNU Lesser General Public License as published
7 //  by the Free Software Foundation; either version 3.0 of the License, or
8 //  any later version.
9 //
10 //  The GPSTk is distributed in the hope that it will be useful,
11 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 //  GNU Lesser General Public License for more details.
14 //
15 //  You should have received a copy of the GNU Lesser General Public
16 //  License along with GPSTk; if not, write to the Free Software Foundation,
17 //  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 //  This software was developed by Applied Research Laboratories at the
20 //  University of Texas at Austin.
21 //  Copyright 2004-2020, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 //==============================================================================
26 //
27 //  This software was developed by Applied Research Laboratories at the
28 //  University of Texas at Austin, under contract to an agency or agencies
29 //  within the U.S. Department of Defense. The U.S. Government retains all
30 //  rights to use, duplicate, distribute, disclose, or release this software.
31 //
32 //  Pursuant to DoD Directive 523024
33 //
34 //  DISTRIBUTION STATEMENT A: This software has been approved for public
35 //                            release, distribution is unlimited.
36 //
37 //==============================================================================
38 
39 /// @file SolidEarthTides.hpp
40 /// Implement the formula for the displacement of a point fixed to the solid Earth
41 /// due to the solid Earth tides resulting from the influence of the Sun and Moon.
42 /// Reference IERS Conventions (1996) found in IERS Technical Note 21 (IERS).
43 /// NB. Currently only the largest terms are implemented, yielding a result accurate
44 /// to the millimeter level. Specifically, IERS pg 61 eq 8 and IERS pg 65 eq 17.
45 /// The second equation referenced here is the permanent component.
46 /// Class SolarSystem may be used to get Solar and Lunar ephemeris information,
47 /// including position and mass ratios.
48 
49 //------------------------------------------------------------------------------------
50 #ifndef SOLID_EARTH_TIDES_INCLUDE
51 #define SOLID_EARTH_TIDES_INCLUDE
52 
53 //------------------------------------------------------------------------------------
54 // system
55 // GPSTk
56 #include "Exception.hpp"
57 #include "EphTime.hpp"
58 #include "Position.hpp"
59 #include "Triple.hpp"
60 #include "IERSConvention.hpp"
61 
62 namespace gpstk
63 {
64 
65    //---------------------------------------------------------------------------------
66    /// Compute the site displacement due to solid Earth tides for the given Position
67    /// (assumed to be fixed to the solid Earth) at the given time, given the position
68    /// of the site of interest, positions and mass ratios of the sun and moon.
69    /// Return a Triple containing the site displacement in ECEF XYZ coordinates with
70    /// units meters.
71    /// Reference IERS Conventions (1996) found in IERS Technical Note 21
72    ///       and IERS Conventions (2003) found in IERS Technical Note 32
73    ///       and IERS Conventions (2010) found in IERS Technical Note 36.
74    /// NB. Currently only the largest terms are implemented, yielding a result
75    /// accurate to the millimeter level. Specifically, TN21 pg 61 eq 8 and
76    /// TN21 pg 65 eq 17.
77    /// @param Position site  Nominal position of the site of interest.
78    /// @param EphTime time   Time of interest.
79    /// @param Position Sun   Position of the Sun at time
80    /// @param Position Moon  Position of the Moon at time
81    /// @param double EMRAT   Earth-to-Moon mass ratio (default to DE405 value)
82    /// @param double SERAT   Sun-to-Earth mass ratio (default to DE405 value)
83    /// @param IERSConvention IERS convention to use (default IERS2010)
84    /// @return Triple        Displacement vector, ECEF XYZ in meters.
85    /// @throw Exception
86    Triple computeSolidEarthTides(const Position site,
87                                  const EphTime time,
88                                  const Position Sun,
89                                  const Position Moon,
90                                  const double EMRAT=81.30056,
91                                  const double SERAT=332946.050894783285912,
92                                  const IERSConvention iers=IERSConvention::IERS2010);
93 
94    //---------------------------------------------------------------------------------
95    /// Compute the site displacement due to rotational deformation due to polar motion
96    /// for the given Position (assumed to fixed to the solid Earth) at the given time,
97    /// given the polar motion angles at time (cf.EarthOrientation) and the IERS
98    /// convention to use. Return a Triple containing the site displacement in
99    /// ECEF XYZ coordinates with units meters.
100    /// Reference IERS Conventions (1996) found in IERS Technical Note 21, ch. 7 pg 67.
101    /// @param Position site  Nominal position of the site of interest.
102    /// @param EphTime time   Time of interest.
103    /// @param double xp,yp   Polar motion angles in arcsec (cf. EarthOrientation)
104    /// @param IERSConvention IERS convention to use (default IERS2010)
105    /// @return Triple disp   Displacement vector, ECEF XYZ in meters.
106    /// @throw Exception
107    Triple computePolarTides(const Position site, const EphTime time,
108                             const double xp, const double yp,
109                             const IERSConvention iers=IERSConvention::IERS2010);
110 
111 }  // end namespace gpstk
112 
113 #endif // SOLID_EARTH_TIDES_INCLUDE
114 // nothing below this
115 
116