aboutsummaryrefslogtreecommitdiff
path: root/math/slalib/aoppa.f
blob: a8d51ccc0c2eab58109408040d1300a47407f159 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
SUBROUTINE slAOPA ( DATE, DUT, ELONGM, PHIM, HM,
     :                       XP, YP, TDK, PMB, RH, WL, TLR, AOPRMS )
*+
*     - - - - - -
*      A O P A
*     - - - - - -
*
*  Precompute apparent to observed place parameters required by
*  slAOPQ and slOAPQ.
*
*  Given:
*     DATE   d      UTC date/time (modified Julian Date, JD-2400000.5)
*     DUT    d      delta UT:  UT1-UTC (UTC seconds)
*     ELONGM d      mean longitude of the observer (radians, east +ve)
*     PHIM   d      mean geodetic latitude of the observer (radians)
*     HM     d      observer's height above sea level (metres)
*     XP     d      polar motion x-coordinate (radians)
*     YP     d      polar motion y-coordinate (radians)
*     TDK    d      local ambient temperature (K; std=273.15D0)
*     PMB    d      local atmospheric pressure (mb; std=1013.25D0)
*     RH     d      local relative humidity (in the range 0D0-1D0)
*     WL     d      effective wavelength (micron, e.g. 0.55D0)
*     TLR    d      tropospheric lapse rate (K/metre, e.g. 0.0065D0)
*
*  Returned:
*     AOPRMS d(14)  star-independent apparent-to-observed parameters:
*
*       (1)      geodetic latitude (radians)
*       (2,3)    sine and cosine of geodetic latitude
*       (4)      magnitude of diurnal aberration vector
*       (5)      height (HM)
*       (6)      ambient temperature (TDK)
*       (7)      pressure (PMB)
*       (8)      relative humidity (RH)
*       (9)      wavelength (WL)
*       (10)     lapse rate (TLR)
*       (11,12)  refraction constants A and B (radians)
*       (13)     longitude + eqn of equinoxes + sidereal DUT (radians)
*       (14)     local apparent sidereal time (radians)
*
*  Notes:
*
*   1)  It is advisable to take great care with units, as even
*       unlikely values of the input parameters are accepted and
*       processed in accordance with the models used.
*
*   2)  The DATE argument is UTC expressed as an MJD.  This is,
*       strictly speaking, improper, because of leap seconds.  However,
*       as long as the delta UT and the UTC are consistent there
*       are no difficulties, except during a leap second.  In this
*       case, the start of the 61st second of the final minute should
*       begin a new MJD day and the old pre-leap delta UT should
*       continue to be used.  As the 61st second completes, the MJD
*       should revert to the start of the day as, simultaneously,
*       the delta UTC changes by one second to its post-leap new value.
*
*   3)  The delta UT (UT1-UTC) is tabulated in IERS circulars and
*       elsewhere.  It increases by exactly one second at the end of
*       each UTC leap second, introduced in order to keep delta UT
*       within +/- 0.9 seconds.
*
*   4)  IMPORTANT -- TAKE CARE WITH THE LONGITUDE SIGN CONVENTION.
*       The longitude required by the present routine is east-positive,
*       in accordance with geographical convention (and right-handed).
*       In particular, note that the longitudes returned by the
*       slOBS routine are west-positive, following astronomical
*       usage, and must be reversed in sign before use in the present
*       routine.
*
*   5)  The polar coordinates XP,YP can be obtained from IERS
*       circulars and equivalent publications.  The maximum amplitude
*       is about 0.3 arcseconds.  If XP,YP values are unavailable,
*       use XP=YP=0D0.  See page B60 of the 1988 Astronomical Almanac
*       for a definition of the two angles.
*
*   6)  The height above sea level of the observing station, HM,
*       can be obtained from the Astronomical Almanac (Section J
*       in the 1988 edition), or via the routine slOBS.  If P,
*       the pressure in millibars, is available, an adequate
*       estimate of HM can be obtained from the expression
*
*             HM ~ -29.3D0*TSL*LOG(P/1013.25D0).
*
*       where TSL is the approximate sea-level air temperature in K
*       (see Astrophysical Quantities, C.W.Allen, 3rd edition,
*       section 52).  Similarly, if the pressure P is not known,
*       it can be estimated from the height of the observing
*       station, HM, as follows:
*
*             P ~ 1013.25D0*EXP(-HM/(29.3D0*TSL)).
*
*       Note, however, that the refraction is nearly proportional to the
*       pressure and that an accurate P value is important for precise
*       work.
*
*   7)  Repeated, computationally-expensive, calls to slAOPA for
*       times that are very close together can be avoided by calling
*       slAOPA just once and then using slAOPT for the subsequent
*       times.  Fresh calls to slAOPA will be needed only when
*       changes in the precession have grown to unacceptable levels or
*       when anything affecting the refraction has changed.
*
*  Called:  slGEOC, slRFCO, slEQEX, slAOPT
*
*  Last revision:   2 December 2005
*
*  Copyright P.T.Wallace.  All rights reserved.
*
*  License:
*    This program is free software; you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation; either version 2 of the License, or
*    (at your option) any later version.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU General Public License for more details.
*
*    You should have received a copy of the GNU General Public License
*    along with this program (see SLA_CONDITIONS); if not, write to the
*    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
*    Boston, MA  02110-1301  USA
*
*  Copyright (C) 1995 Association of Universities for Research in Astronomy Inc.
*-

      IMPLICIT NONE

      DOUBLE PRECISION DATE,DUT,ELONGM,PHIM,HM,XP,YP,TDK,PMB,
     :                 RH,WL,TLR,AOPRMS(14)

      DOUBLE PRECISION slEQEX

*  2Pi
      DOUBLE PRECISION D2PI
      PARAMETER (D2PI=6.283185307179586476925287D0)

*  Seconds of time to radians
      DOUBLE PRECISION S2R
      PARAMETER (S2R=7.272205216643039903848712D-5)

*  Speed of light (AU per day)
      DOUBLE PRECISION C
      PARAMETER (C=173.14463331D0)

*  Ratio between solar and sidereal time
      DOUBLE PRECISION SOLSID
      PARAMETER (SOLSID=1.00273790935D0)

      DOUBLE PRECISION CPHIM,XT,YT,ZT,XC,YC,ZC,ELONG,PHI,UAU,VAU



*  Observer's location corrected for polar motion
      CPHIM = COS(PHIM)
      XT = COS(ELONGM)*CPHIM
      YT = SIN(ELONGM)*CPHIM
      ZT = SIN(PHIM)
      XC = XT-XP*ZT
      YC = YT+YP*ZT
      ZC = XP*XT-YP*YT+ZT
      IF (XC.EQ.0D0.AND.YC.EQ.0D0) THEN
         ELONG = 0D0
      ELSE
         ELONG = ATAN2(YC,XC)
      END IF
      PHI = ATAN2(ZC,SQRT(XC*XC+YC*YC))
      AOPRMS(1) = PHI
      AOPRMS(2) = SIN(PHI)
      AOPRMS(3) = COS(PHI)

*  Magnitude of the diurnal aberration vector
      CALL slGEOC(PHI,HM,UAU,VAU)
      AOPRMS(4) = D2PI*UAU*SOLSID/C

*  Copy the refraction parameters and compute the A & B constants
      AOPRMS(5) = HM
      AOPRMS(6) = TDK
      AOPRMS(7) = PMB
      AOPRMS(8) = RH
      AOPRMS(9) = WL
      AOPRMS(10) = TLR
      CALL slRFCO(HM,TDK,PMB,RH,WL,PHI,TLR,1D-10,
     :               AOPRMS(11),AOPRMS(12))

*  Longitude + equation of the equinoxes + sidereal equivalent of DUT
*  (ignoring change in equation of the equinoxes between UTC and TDB)
      AOPRMS(13) = ELONG+slEQEX(DATE)+DUT*SOLSID*S2R

*  Sidereal time
      CALL slAOPT(DATE,AOPRMS)

      END