| 1 | #include "slalib.h"
|
|---|
| 2 | #include "slamac.h"
|
|---|
| 3 | void slaAoppa ( double date, double dut, double elongm, double phim,
|
|---|
| 4 | double hm, double xp, double yp, double tdk,
|
|---|
| 5 | double pmb, double rh, double wl, double tlr,
|
|---|
| 6 | double aoprms[14] )
|
|---|
| 7 | /*
|
|---|
| 8 | ** - - - - - - - - -
|
|---|
| 9 | ** s l a A o p p a
|
|---|
| 10 | ** - - - - - - - - -
|
|---|
| 11 | **
|
|---|
| 12 | ** Precompute apparent to observed place parameters required by
|
|---|
| 13 | ** slaAopqk and slaOapqk.
|
|---|
| 14 | **
|
|---|
| 15 | ** Given:
|
|---|
| 16 | ** date d UTC date/time (Modified Julian Date, JD-2400000.5)
|
|---|
| 17 | ** dut d delta UT: UT1-UTC (UTC seconds)
|
|---|
| 18 | ** elongm d mean longitude of the observer (radians, east +ve)
|
|---|
| 19 | ** phim d mean geodetic latitude of the observer (radians)
|
|---|
| 20 | ** hm d observer's height above sea level (metres)
|
|---|
| 21 | ** xp d polar motion x-coordinate (radians)
|
|---|
| 22 | ** yp d polar motion y-coordinate (radians)
|
|---|
| 23 | ** tdk d local ambient temperature (DegK; std=273.155)
|
|---|
| 24 | ** pmb d local atmospheric pressure (mB; std=1013.25)
|
|---|
| 25 | ** rh d local relative humidity (in the range 0.0-1.0)
|
|---|
| 26 | ** wl d effective wavelength (micron, e.g. 0.55)
|
|---|
| 27 | ** tlr d tropospheric lapse rate (DegK/metre, e.g. 0.0065)
|
|---|
| 28 | **
|
|---|
| 29 | ** Returned:
|
|---|
| 30 | ** aoprms d[14] star-independent apparent-to-observed parameters:
|
|---|
| 31 | **
|
|---|
| 32 | ** (0) geodetic latitude (radians)
|
|---|
| 33 | ** (1,2) sine and cosine of geodetic latitude
|
|---|
| 34 | ** (3) magnitude of diurnal aberration vector
|
|---|
| 35 | ** (4) height (hm)
|
|---|
| 36 | ** (5) ambient temperature (tdk)
|
|---|
| 37 | ** (6) pressure (pmb)
|
|---|
| 38 | ** (7) relative humidity (rh)
|
|---|
| 39 | ** (8) wavelength (wl)
|
|---|
| 40 | ** (9) lapse rate (tlr)
|
|---|
| 41 | ** (10,11) refraction constants A and B (radians)
|
|---|
| 42 | ** (12) longitude + eqn of equinoxes + sidereal DUT (radians)
|
|---|
| 43 | ** (13) local apparent sidereal time (radians)
|
|---|
| 44 | **
|
|---|
| 45 | ** Notes:
|
|---|
| 46 | **
|
|---|
| 47 | ** 1) It is advisable to take great care with units, as even
|
|---|
| 48 | ** unlikely values of the input parameters are accepted and
|
|---|
| 49 | ** processed in accordance with the models used.
|
|---|
| 50 | **
|
|---|
| 51 | ** 2) The date argument is UTC expressed as an MJD. This is,
|
|---|
| 52 | ** strictly speaking, improper, because of leap seconds. However,
|
|---|
| 53 | ** as long as the delta UT and the UTC are consistent there
|
|---|
| 54 | ** are no difficulties, except during a leap second. In this
|
|---|
| 55 | ** case, the start of the 61st second of the final minute should
|
|---|
| 56 | ** begin a new MJD day and the old pre-leap delta UT should
|
|---|
| 57 | ** continue to be used. As the 61st second completes, the MJD
|
|---|
| 58 | ** should revert to the start of the day as, simultaneously,
|
|---|
| 59 | ** the delta UTC changes by one second to its post-leap new value.
|
|---|
| 60 | **
|
|---|
| 61 | ** 3) The delta UT (UT1-UTC) is tabulated in IERS circulars and
|
|---|
| 62 | ** elsewhere. It increases by exactly one second at the end of
|
|---|
| 63 | ** each UTC leap second, introduced in order to keep delta UT
|
|---|
| 64 | ** within +/- 0.9 seconds.
|
|---|
| 65 | **
|
|---|
| 66 | ** 4) IMPORTANT -- TAKE CARE WITH THE LONGITUDE SIGN CONVENTION.
|
|---|
| 67 | ** The longitude required by the present routine is east-positive,
|
|---|
| 68 | ** in accordance with geographical convention (and right-handed).
|
|---|
| 69 | ** In particular, note that the longitudes returned by the
|
|---|
| 70 | ** slaObs routine are west-positive, following astronomical
|
|---|
| 71 | ** usage, and must be reversed in sign before use in the present
|
|---|
| 72 | ** routine.
|
|---|
| 73 | **
|
|---|
| 74 | ** 5) The polar coordinates xp,yp can be obtained from IERS
|
|---|
| 75 | ** circulars and equivalent publications. The maximum amplitude
|
|---|
| 76 | ** is about 0.3 arcseconds. If xp,yp values are unavailable,
|
|---|
| 77 | ** use xp=yp=0.0. See page B60 of the 1988 Astronomical Almanac
|
|---|
| 78 | ** for a definition of the two angles.
|
|---|
| 79 | **
|
|---|
| 80 | ** 6) The height above sea level of the observing station, hm,
|
|---|
| 81 | ** can be obtained from the Astronomical Almanac (Section J
|
|---|
| 82 | ** in the 1988 edition), or via the routine slaObs. If p,
|
|---|
| 83 | ** the pressure in millibars, is available, an adequate
|
|---|
| 84 | ** estimate of hm can be obtained from the expression
|
|---|
| 85 | **
|
|---|
| 86 | ** hm = -29.3 * tsl * log ( p / 1013.25 );
|
|---|
| 87 | **
|
|---|
| 88 | ** where tsl is the approximate sea-level air temperature
|
|---|
| 89 | ** in deg K (See Astrophysical Quantities, C.W.Allen,
|
|---|
| 90 | ** 3rd edition, section 52). Similarly, if the pressure p
|
|---|
| 91 | ** is not known, it can be estimated from the height of the
|
|---|
| 92 | ** observing station, hm as follows:
|
|---|
| 93 | **
|
|---|
| 94 | ** p = 1013.25 * exp ( -hm / ( 29.3 * tsl ) );
|
|---|
| 95 | **
|
|---|
| 96 | ** Note, however, that the refraction is proportional to the
|
|---|
| 97 | ** pressure and that an accurate p value is important for
|
|---|
| 98 | ** precise work.
|
|---|
| 99 | **
|
|---|
| 100 | ** 7) Repeated, computationally-expensive, calls to slaAoppa for
|
|---|
| 101 | ** times that are very close together can be avoided by calling
|
|---|
| 102 | ** slaAoppa just once and then using slaAoppat for the subsequent
|
|---|
| 103 | ** times. Fresh calls to slaAoppa will be needed only when changes
|
|---|
| 104 | ** in the precession have grown to unacceptable levels or when
|
|---|
| 105 | ** anything affecting the refraction has changed.
|
|---|
| 106 | **
|
|---|
| 107 | ** Defined in slamac.h: D2PI, DS2R
|
|---|
| 108 | **
|
|---|
| 109 | ** Called: slaGeoc, slaRefco, slaEqeqx, slaAoppat
|
|---|
| 110 | **
|
|---|
| 111 | ** Last revision: 6 September 1999
|
|---|
| 112 | **
|
|---|
| 113 | ** Copyright P.T.Wallace. All rights reserved.
|
|---|
| 114 | */
|
|---|
| 115 |
|
|---|
| 116 | #define C 173.14463331 /* Speed of light (AU per day) */
|
|---|
| 117 | #define SOLSID 1.00273790935 /* Ratio between solar and sidereal time */
|
|---|
| 118 |
|
|---|
| 119 | {
|
|---|
| 120 | double cphim, xt, yt, zt, xc, yc, zc, elong, phi, uau, vau;
|
|---|
| 121 |
|
|---|
| 122 | /* Observer's location corrected for polar motion */
|
|---|
| 123 | cphim = cos( phim );
|
|---|
| 124 | xt = cos ( elongm ) * cphim;
|
|---|
| 125 | yt = sin ( elongm ) * cphim;
|
|---|
| 126 | zt = sin ( phim );
|
|---|
| 127 | xc = xt - xp * zt;
|
|---|
| 128 | yc = yt + yp * zt;
|
|---|
| 129 | zc = xp * xt - yp * yt + zt;
|
|---|
| 130 |
|
|---|
| 131 | elong = ( ( xc == 0.0 ) && ( yc == 0.0 ) ) ? 0.0 : atan2 ( yc, xc );
|
|---|
| 132 |
|
|---|
| 133 | phi = atan2 ( zc, sqrt ( xc * xc + yc * yc ) );
|
|---|
| 134 | aoprms[0] = phi;
|
|---|
| 135 | aoprms[1] = sin ( phi );
|
|---|
| 136 | aoprms[2] = cos ( phi );
|
|---|
| 137 |
|
|---|
| 138 | /* Magnitude of the diurnal aberration vector */
|
|---|
| 139 | slaGeoc ( phi, hm, &uau, &vau );
|
|---|
| 140 | aoprms[3] = D2PI * uau * SOLSID / C;
|
|---|
| 141 |
|
|---|
| 142 | /* Copy the refraction parameters and compute the A & B constants */
|
|---|
| 143 | aoprms[4] = hm;
|
|---|
| 144 | aoprms[5] = tdk;
|
|---|
| 145 | aoprms[6] = pmb;
|
|---|
| 146 | aoprms[7] = rh;
|
|---|
| 147 | aoprms[8] = wl;
|
|---|
| 148 | aoprms[9] = tlr;
|
|---|
| 149 | slaRefco ( hm, tdk, pmb, rh, wl, phi, tlr, 1e-10,
|
|---|
| 150 | &aoprms[10], &aoprms[11] );
|
|---|
| 151 |
|
|---|
| 152 | /* Longitude + equation of the equinoxes + sidereal equivalent of DUT */
|
|---|
| 153 | aoprms[12] = elong + slaEqeqx ( date ) + dut * SOLSID * DS2R;
|
|---|
| 154 |
|
|---|
| 155 | /* Sidereal time */
|
|---|
| 156 | slaAoppat ( date, aoprms );
|
|---|
| 157 | }
|
|---|