source: branches/FACT++_part_filenames/erfa/src/atioq.c@ 19365

Last change on this file since 19365 was 18711, checked in by tbretz, 8 years ago
Updated to ERFA 1.3.0 (no relevant code change except the leap second at the beginning of 2017)
File size: 9.7 KB
Line 
1#include "erfa.h"
2
3void eraAtioq(double ri, double di, eraASTROM *astrom,
4 double *aob, double *zob,
5 double *hob, double *dob, double *rob)
6/*
7** - - - - - - - - -
8** e r a A t i o q
9** - - - - - - - - -
10**
11** Quick CIRS to observed place transformation.
12**
13** Use of this function is appropriate when efficiency is important and
14** where many star positions are all to be transformed for one date.
15** The star-independent astrometry parameters can be obtained by
16** calling eraApio[13] or eraApco[13].
17**
18** Given:
19** ri double CIRS right ascension
20** di double CIRS declination
21** astrom eraASTROM* star-independent astrometry parameters:
22** pmt double PM time interval (SSB, Julian years)
23** eb double[3] SSB to observer (vector, au)
24** eh double[3] Sun to observer (unit vector)
25** em double distance from Sun to observer (au)
26** v double[3] barycentric observer velocity (vector, c)
27** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor
28** bpn double[3][3] bias-precession-nutation matrix
29** along double longitude + s' (radians)
30** xpl double polar motion xp wrt local meridian (radians)
31** ypl double polar motion yp wrt local meridian (radians)
32** sphi double sine of geodetic latitude
33** cphi double cosine of geodetic latitude
34** diurab double magnitude of diurnal aberration vector
35** eral double "local" Earth rotation angle (radians)
36** refa double refraction constant A (radians)
37** refb double refraction constant B (radians)
38**
39** Returned:
40** aob double* observed azimuth (radians: N=0,E=90)
41** zob double* observed zenith distance (radians)
42** hob double* observed hour angle (radians)
43** dob double* observed declination (radians)
44** rob double* observed right ascension (CIO-based, radians)
45**
46** Notes:
47**
48** 1) This function returns zenith distance rather than altitude in
49** order to reflect the fact that no allowance is made for
50** depression of the horizon.
51**
52** 2) The accuracy of the result is limited by the corrections for
53** refraction, which use a simple A*tan(z) + B*tan^3(z) model.
54** Providing the meteorological parameters are known accurately and
55** there are no gross local effects, the predicted observed
56** coordinates should be within 0.05 arcsec (optical) or 1 arcsec
57** (radio) for a zenith distance of less than 70 degrees, better
58** than 30 arcsec (optical or radio) at 85 degrees and better
59** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon.
60**
61** Without refraction, the complementary functions eraAtioq and
62** eraAtoiq are self-consistent to better than 1 microarcsecond all
63** over the celestial sphere. With refraction included, consistency
64** falls off at high zenith distances, but is still better than
65** 0.05 arcsec at 85 degrees.
66**
67** 3) It is advisable to take great care with units, as even unlikely
68** values of the input parameters are accepted and processed in
69** accordance with the models used.
70**
71** 4) The CIRS RA,Dec is obtained from a star catalog mean place by
72** allowing for space motion, parallax, the Sun's gravitational lens
73** effect, annual aberration and precession-nutation. For star
74** positions in the ICRS, these effects can be applied by means of
75** the eraAtci13 (etc.) functions. Starting from classical "mean
76** place" systems, additional transformations will be needed first.
77**
78** 5) "Observed" Az,El means the position that would be seen by a
79** perfect geodetically aligned theodolite. This is obtained from
80** the CIRS RA,Dec by allowing for Earth orientation and diurnal
81** aberration, rotating from equator to horizon coordinates, and
82** then adjusting for refraction. The HA,Dec is obtained by
83** rotating back into equatorial coordinates, and is the position
84** that would be seen by a perfect equatorial with its polar axis
85** aligned to the Earth's axis of rotation. Finally, the RA is
86** obtained by subtracting the HA from the local ERA.
87**
88** 6) The star-independent CIRS-to-observed-place parameters in ASTROM
89** may be computed with eraApio[13] or eraApco[13]. If nothing has
90** changed significantly except the time, eraAper[13] may be used to
91** perform the requisite adjustment to the astrom structure.
92**
93** Called:
94** eraS2c spherical coordinates to unit vector
95** eraC2s p-vector to spherical
96** eraAnp normalize angle into range 0 to 2pi
97**
98** Copyright (C) 2013-2016, NumFOCUS Foundation.
99** Derived, with permission, from the SOFA library. See notes at end of file.
100*/
101{
102/* Minimum cos(alt) and sin(alt) for refraction purposes */
103 const double CELMIN = 1e-6;
104 const double SELMIN = 0.05;
105
106 double v[3], x, y, z, xhd, yhd, zhd, f, xhdt, yhdt, zhdt,
107 xaet, yaet, zaet, azobs, r, tz, w, del, cosdel,
108 xaeo, yaeo, zaeo, zdobs, hmobs, dcobs, raobs;
109
110
111/* CIRS RA,Dec to Cartesian -HA,Dec. */
112 eraS2c(ri-astrom->eral, di, v);
113 x = v[0];
114 y = v[1];
115 z = v[2];
116
117/* Polar motion. */
118 xhd = x + astrom->xpl*z;
119 yhd = y - astrom->ypl*z;
120 zhd = z - astrom->xpl*x + astrom->ypl*y;
121
122/* Diurnal aberration. */
123 f = ( 1.0 - astrom->diurab*yhd );
124 xhdt = f * xhd;
125 yhdt = f * ( yhd + astrom->diurab );
126 zhdt = f * zhd;
127
128/* Cartesian -HA,Dec to Cartesian Az,El (S=0,E=90). */
129 xaet = astrom->sphi*xhdt - astrom->cphi*zhdt;
130 yaet = yhdt;
131 zaet = astrom->cphi*xhdt + astrom->sphi*zhdt;
132
133/* Azimuth (N=0,E=90). */
134 azobs = ( xaet != 0.0 || yaet != 0.0 ) ? atan2(yaet,-xaet) : 0.0;
135
136/* ---------- */
137/* Refraction */
138/* ---------- */
139
140/* Cosine and sine of altitude, with precautions. */
141 r = sqrt(xaet*xaet + yaet*yaet);
142 r = r > CELMIN ? r : CELMIN;
143 z = zaet > SELMIN ? zaet : SELMIN;
144
145/* A*tan(z)+B*tan^3(z) model, with Newton-Raphson correction. */
146 tz = r/z;
147 w = astrom->refb*tz*tz;
148 del = ( astrom->refa + w ) * tz /
149 ( 1.0 + ( astrom->refa + 3.0*w ) / ( z*z ) );
150
151/* Apply the change, giving observed vector. */
152 cosdel = 1.0 - del*del/2.0;
153 f = cosdel - del*z/r;
154 xaeo = xaet*f;
155 yaeo = yaet*f;
156 zaeo = cosdel*zaet + del*r;
157
158/* Observed ZD. */
159 zdobs = atan2(sqrt(xaeo*xaeo+yaeo*yaeo), zaeo);
160
161/* Az/El vector to HA,Dec vector (both right-handed). */
162 v[0] = astrom->sphi*xaeo + astrom->cphi*zaeo;
163 v[1] = yaeo;
164 v[2] = - astrom->cphi*xaeo + astrom->sphi*zaeo;
165
166/* To spherical -HA,Dec. */
167 eraC2s ( v, &hmobs, &dcobs );
168
169/* Right ascension (with respect to CIO). */
170 raobs = astrom->eral + hmobs;
171
172/* Return the results. */
173 *aob = eraAnp(azobs);
174 *zob = zdobs;
175 *hob = -hmobs;
176 *dob = dcobs;
177 *rob = eraAnp(raobs);
178
179/* Finished. */
180
181}
182/*----------------------------------------------------------------------
183**
184**
185** Copyright (C) 2013-2016, NumFOCUS Foundation.
186** All rights reserved.
187**
188** This library is derived, with permission, from the International
189** Astronomical Union's "Standards of Fundamental Astronomy" library,
190** available from http://www.iausofa.org.
191**
192** The ERFA version is intended to retain identical functionality to
193** the SOFA library, but made distinct through different function and
194** file names, as set out in the SOFA license conditions. The SOFA
195** original has a role as a reference standard for the IAU and IERS,
196** and consequently redistribution is permitted only in its unaltered
197** state. The ERFA version is not subject to this restriction and
198** therefore can be included in distributions which do not support the
199** concept of "read only" software.
200**
201** Although the intent is to replicate the SOFA API (other than
202** replacement of prefix names) and results (with the exception of
203** bugs; any that are discovered will be fixed), SOFA is not
204** responsible for any errors found in this version of the library.
205**
206** If you wish to acknowledge the SOFA heritage, please acknowledge
207** that you are using a library derived from SOFA, rather than SOFA
208** itself.
209**
210**
211** TERMS AND CONDITIONS
212**
213** Redistribution and use in source and binary forms, with or without
214** modification, are permitted provided that the following conditions
215** are met:
216**
217** 1 Redistributions of source code must retain the above copyright
218** notice, this list of conditions and the following disclaimer.
219**
220** 2 Redistributions in binary form must reproduce the above copyright
221** notice, this list of conditions and the following disclaimer in
222** the documentation and/or other materials provided with the
223** distribution.
224**
225** 3 Neither the name of the Standards Of Fundamental Astronomy Board,
226** the International Astronomical Union nor the names of its
227** contributors may be used to endorse or promote products derived
228** from this software without specific prior written permission.
229**
230** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
231** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
232** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
233** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
234** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
235** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
236** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
237** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
238** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
239** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
240** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
241** POSSIBILITY OF SUCH DAMAGE.
242**
243*/
Note: See TracBrowser for help on using the repository browser.