forked from scottransom/pyslalib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
aoppa.f
193 lines (177 loc) · 7.27 KB
/
aoppa.f
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
SUBROUTINE sla_AOPPA ( DATE, DUT, ELONGM, PHIM, HM,
: XP, YP, TDK, PMB, RH, WL, TLR, AOPRMS )
*+
* - - - - - -
* A O P P A
* - - - - - -
*
* Precompute apparent to observed place parameters required by
* sla_AOPQK and sla_OAPQK.
*
* 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
* sla_OBS 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 sla_OBS. 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 sla_AOPPA for
* times that are very close together can be avoided by calling
* sla_AOPPA just once and then using sla_AOPPAT for the subsequent
* times. Fresh calls to sla_AOPPA will be needed only when
* changes in the precession have grown to unacceptable levels or
* when anything affecting the refraction has changed.
*
* Called: sla_GEOC, sla_REFCO, sla_EQEQX, sla_AOPPAT
*
* 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., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA
*
*-
IMPLICIT NONE
DOUBLE PRECISION DATE,DUT,ELONGM,PHIM,HM,XP,YP,TDK,PMB,
: RH,WL,TLR,AOPRMS(14)
DOUBLE PRECISION sla_EQEQX
* 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 sla_GEOC(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 sla_REFCO(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+sla_EQEQX(DATE)+DUT*SOLSID*S2R
* Sidereal time
CALL sla_AOPPAT(DATE,AOPRMS)
END