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