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 | }
|
---|