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
1.4.2