Main Page | Modules | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

psEarthOrientation.h

Go to the documentation of this file.
00001 /** @file  psEarthOrientation.h
00002 *
00003 *  @brief Function prototypes for earth orientation calculations
00004 *  transformation
00005 *
00006 *  @ingroup EarthOrientation
00007 *
00008 *  @author Dave Robbins, MHPCC
00009 *  @author Robert Daniel DeSonia, MHPCC
00010 *
00011 *  @version $Revision: 1.11 $ $Name: rel9_0 $
00012 *  @date $Date: 2005/11/17 03:59:05 $
00013 *
00014 *  Copyright 2005 Maui High Performance Computing Center, University of Hawaii
00015 */
00016 
00017 #ifndef PS_EARTH_ORIENTATION
00018 #define PS_EARTH_ORIENTATION
00019 
00020 #include "psCoord.h"
00021 #include "psTime.h"
00022 #include "psSphereOps.h"
00023 
00024 /** Structure for respresenting the Earth's pole at any moment or determine velocity
00025  *  at the pole.  This structure carries the polar coordinate information.       */
00026 typedef struct
00027 {
00028     double x;                          ///< X component of the earth's pole
00029     double y;                          ///< Y component of the earth's pole
00030     double s;                          ///< s component of the earth's pole
00031 }
00032 psEarthPole;
00033 
00034 /** Method for spherical precession used to specify the level of detail used in
00035  *  calculation.
00036  *
00037  *  @see psSpherePrecess
00038  *
00039  */
00040 typedef enum {
00041     PS_PRECESS_ROUGH,                  ///< roughest, lowest level of detail
00042     PS_PRECESS_COMPLETE,               ///< complete level of detail
00043     PS_PRECESS_IAU2000A,               ///< highest level of detail
00044 }
00045 psPrecessMethod;
00046 
00047 /** Initialize EOC.
00048  *
00049  *  Parses IERS table data and creates the polynomials used by certain EOC functions.
00050  *
00051  *  @return bool:       True if successful, otherwise false.
00052  */
00053 bool p_psEOCInit(void);
00054 
00055 /** Finalize EOC after using functions that make calls to eocInit for time table data
00056  *
00057  *  @return bool:       True if successful, otherwise false.
00058  */
00059 bool p_psEOCFinalize(void);
00060 
00061 /** Allocates a new psEarthPole structure.  */
00062 psEarthPole *psEarthPoleAlloc(void);
00063 
00064 /** Calculates the actual position of a star, given its apparent position and the
00065  *  velocity vector of the observer.
00066  *
00067  *  The actual and apparent positions are represented as psSphere entries, as is the
00068  *  direction of motion.  The speed in that direction is given in units of the speed
00069  *  of light.  If the value of actual is NULL, a new psSphere is allocated, otherwise
00070  *  the point to actual is used for the result.
00071  *
00072  *  @return psSphere*:      the actual position of a star.
00073  */
00074 psSphere *psAberration(
00075     psSphere *apparent,                ///< apparent position of star
00076     const psSphere *actual,            ///< actual position of star
00077     const psSphere *direction,         ///< direction of motion of observer
00078     double speed                       ///< speed of motion of observer
00079 );
00080 
00081 /** Calculates the actual position of a star, given its apparent position and the
00082  *  position of the sun.
00083  *
00084  *  The actual and apparent positions are represented as psSphere entries, as is
00085  *  position of the sun.  If the value of actual is NULL, a new psSphere is allocated,
00086  *  otherwise the point to actual is used for the result.
00087  *
00088  *  @return psSphere*:      the apparent position of a star.
00089  */
00090 psSphere *psGravityDeflection(
00091     psSphere *apparent,                ///< apparent position of star
00092     psSphere *actual,                  ///< actual position of star
00093     psSphere *sun                      ///< position of the sun
00094 );
00095 
00096 /** Calculates the components of the rotation between the CEO and GCRS frames, X, Y,
00097  *  and s, using the IAU2000A precession & nutation model.
00098  *
00099  *  The input time may be represented in any format other than UT1.  This routine must
00100  *  give results identical to the IERS XYS2000A subroutine.
00101  *
00102  *  @return psEarthPole*:       the calculated components of the rotation.
00103  */
00104 psEarthPole *psEOC_PrecessionModel(
00105     const psTime *time                 ///< specified time
00106 );
00107 
00108 /** Provides interpolated corrections to the X and Y components of the polar
00109  *  coordinates from the tables provided by the IERS, just as it does for UT1 and
00110  *  polar motion.
00111  *
00112  *  @return psEarthPole*:       interpolated corrections to the precession components.
00113  */
00114 psEarthPole *psEOC_PrecessionCorr(
00115     const psTime *time,                ///< specified time
00116     psTimeBulletin bulletin            ///< IERS tables for polar coordinate components.
00117 );
00118 
00119 /** Constructs the spherical rotation for transforming from CEO to GCRS coordinates.
00120  *
00121  *  The resulting psSphereRot may be used to determine the rotation from CIP/CEO to
00122  *  GCRS.  This function must give results identical to the IERS BPN2000.
00123  *
00124  *  @return psSphereRot*:       spherical rotation for CEO to GCRS transformation.
00125  */
00126 psSphereRot *psSphereRot_CEOtoGCRS(
00127     const psEarthPole *pole            ///< input coordinates to transform
00128 );
00129 
00130 /** Calculates the rotation of the Earth about the CIP.
00131  *
00132  *  @return psSphereRot*:       sphereical rotation
00133  */
00134 psSphereRot *psSphereRot_TEOtoCEO(
00135     const psTime *time                 ///< specified time
00136 );
00137 
00138 /** Provides interpolated values of the polar motion components extracted from the
00139  *  IERS tables.
00140  *
00141  *  @return psEarthPole*:       interpolated polar motion components.
00142  */
00143 psEarthPole *psEOC_GetPolarMotion(
00144     const psTime *time,                ///< specified time
00145     psTimeBulletin bulletin            ///< IERS tables for polar coordinate components.
00146 );
00147 
00148 /** Provides tidal corrections to the polar motion components using the Ray model
00149  *  of Simon et al.
00150  *
00151  *  @return psEarthPole*:       corrected polar motion components.
00152  */
00153 psEarthPole *psEOC_PolarTideCorr(
00154     const psTime *time                 ///< specified time
00155 );
00156 
00157 /** Provides the additional corrections due to nutation terms with periods less than
00158  *  or equal to two days, as well as the correction to the s-prime component of polar
00159  *  motion.
00160  *
00161  *  @return psEarthPole*:       corrected polar motion components.
00162  */
00163 psEarthPole *psEOC_NutationCorr(
00164     psTime *time                       ///< specified time
00165 );
00166 
00167 /** Converts the polar motion corrections to a spherical rotation.
00168  *
00169  *  This function should give identical results to the IERS POM2000 subroutine.
00170  *
00171  *  @return psSphereRot*:       ITRS to TEO sphere rotation.
00172  */
00173 psSphereRot *psSphereRot_ITRStoTEO(
00174     const psEarthPole *motion          ///< corrected polar motion components
00175 );
00176 
00177 #endif // #ifndef PS_EARTH_ORIENTATION

Generated on Tue Dec 6 17:18:42 2005 for Pan-STARRS Foundation Library by  doxygen 1.4.2