1 | #include "slalib.h"
|
---|
2 | #include "slamac.h"
|
---|
3 | void slaPolmo ( double elongm, double phim, double xp, double yp,
|
---|
4 | double *elong, double *phi, double *daz )
|
---|
5 | /*
|
---|
6 | ** - - - - - - - - -
|
---|
7 | ** s l a P o l m o
|
---|
8 | ** - - - - - - - - -
|
---|
9 | **
|
---|
10 | ** Polar motion: correct site longitude and latitude for polar
|
---|
11 | ** motion and calculate azimuth difference between celestial and
|
---|
12 | ** terrestrial poles.
|
---|
13 | **
|
---|
14 | ** Given:
|
---|
15 | ** elongm double mean longitude of the observer (radians, east +ve)
|
---|
16 | ** phim double mean geodetic latitude of the observer (radians)
|
---|
17 | ** xp double polar motion x-coordinate (radians)
|
---|
18 | ** yp double polar motion y-coordinate (radians)
|
---|
19 | **
|
---|
20 | ** Returned:
|
---|
21 | ** elong double* true longitude of the observer (radians, east +ve)
|
---|
22 | ** phi double* true geodetic latitude of the observer (radians)
|
---|
23 | ** daz double* azimuth correction (terrestrial-celestial, radians)
|
---|
24 | **
|
---|
25 | ** Notes:
|
---|
26 | **
|
---|
27 | ** 1) "Mean" longitude and latitude are the (fixed) values for the
|
---|
28 | ** site's location with respect to the IERS terrestrial reference
|
---|
29 | ** frame; the latitude is geodetic. TAKE CARE WITH THE LONGITUDE
|
---|
30 | ** SIGN CONVENTION. The longitudes used by the present routine
|
---|
31 | ** are east-positive, in accordance with geographical convention
|
---|
32 | ** (and right-handed). In particular, note that the longitudes
|
---|
33 | ** Returned by the slaObs routine are west-positive, following
|
---|
34 | ** astronomical usage, and must be reversed in sign before use in
|
---|
35 | ** the present routine.
|
---|
36 | **
|
---|
37 | ** 2) xp and yp are the (changing) coordinates of the Celestial
|
---|
38 | ** Ephemeris Pole with respect to the IERS Reference Pole.
|
---|
39 | ** xp is positive along the meridian at longitude 0 degrees,
|
---|
40 | ** and yp is positive along the meridian at longitude
|
---|
41 | ** 270 degrees (i.e. 90 degrees west). Values for xp,yp can
|
---|
42 | ** be obtained from IERS circulars and equivalent publications;
|
---|
43 | ** the maximum amplitude observed so far is about 0.3 arcseconds.
|
---|
44 | **
|
---|
45 | ** 3) "True" longitude and latitude are the (moving) values for
|
---|
46 | ** the site's location with respect to the celestial ephemeris
|
---|
47 | ** pole and the meridian which corresponds to the Greenwich
|
---|
48 | ** apparent sidereal time. The true longitude and latitude
|
---|
49 | ** link the terrestrial coordinates with the standard celestial
|
---|
50 | ** models (for precession, nutation, sidereal time etc).
|
---|
51 | **
|
---|
52 | ** 4) The azimuths produced by slaAop and slaAopqk are with
|
---|
53 | ** respect to due north as defined by the Celestial Ephemeris
|
---|
54 | ** Pole, and can therefore be called "celestial azimuths".
|
---|
55 | ** However, a telescope fixed to the Earth measures azimuth
|
---|
56 | ** essentially with respect to due north as defined by the
|
---|
57 | ** IERS Reference Pole, and can therefore be called "terrestrial
|
---|
58 | ** azimuth". Uncorrected, this would manifest itself as a
|
---|
59 | ** changing "azimuth zero-point error". The value daz is the
|
---|
60 | ** correction to be added to a celestial azimuth to produce
|
---|
61 | ** a terrestrial azimuth.
|
---|
62 | **
|
---|
63 | ** 5) The present routine is rigorous. For most practical
|
---|
64 | ** purposes, the following simplified formulae provide an
|
---|
65 | ** adequate approximation:
|
---|
66 | **
|
---|
67 | ** elong = elongm+xp*cos(elongm)-yp*sin(elongm);
|
---|
68 | ** phi = phim+(xp*sin(elongm)+yp*cos(elongm))*tan(phim);
|
---|
69 | ** daz = -sqrt(xp*xp+yp*yp)*cos(elongm-atan2(xp,yp))/cos(phim);
|
---|
70 | **
|
---|
71 | ** An alternative formulation for daz is:
|
---|
72 | **
|
---|
73 | ** x = cos(elongm)*cos(phim);
|
---|
74 | ** y = sin(elongm)*cos(phim);
|
---|
75 | ** daz = atan2(-x*yp-y*xp,x*x+y*y);
|
---|
76 | **
|
---|
77 | ** Reference: Seidelmann, P.K. (ed), 1992. "Explanatory Supplement
|
---|
78 | ** to the Astronomical Almanac", ISBN 0-935702-68-7,
|
---|
79 | ** sections 3.27, 4.25, 4.52.
|
---|
80 | **
|
---|
81 | ** Last revision: 22 February 1996
|
---|
82 | **
|
---|
83 | ** Copyright P.T.Wallace. All rights reserved.
|
---|
84 | */
|
---|
85 | {
|
---|
86 | double sel, cel, sph, cph, xm, ym, zm, xnm, ynm, znm,
|
---|
87 | sxp, cxp, syp, cyp, zw, xt, yt, zt, xnt, ynt;
|
---|
88 |
|
---|
89 |
|
---|
90 |
|
---|
91 | /* Site mean longitude and mean geodetic latitude as a Cartesian vector. */
|
---|
92 | sel = sin ( elongm );
|
---|
93 | cel = cos ( elongm );
|
---|
94 | sph = sin ( phim );
|
---|
95 | cph = cos ( phim );
|
---|
96 |
|
---|
97 | xm = cel * cph;
|
---|
98 | ym = sel * cph;
|
---|
99 | zm = sph;
|
---|
100 |
|
---|
101 | /* Rotate site vector by polar motion, Y-component then X-component. */
|
---|
102 | sxp = sin ( xp );
|
---|
103 | cxp = cos ( xp );
|
---|
104 | syp = sin ( yp );
|
---|
105 | cyp = cos ( yp );
|
---|
106 |
|
---|
107 | zw = ( - ym * syp + zm * cyp );
|
---|
108 |
|
---|
109 | xt = xm * cxp - zw * sxp;
|
---|
110 | yt = ym * cyp + zm * syp;
|
---|
111 | zt = xm * sxp + zw * cxp;
|
---|
112 |
|
---|
113 | /* Rotate also the geocentric direction of the terrestrial pole (0,0,1). */
|
---|
114 | xnm = - sxp * cyp;
|
---|
115 | ynm = syp;
|
---|
116 | znm = cxp * cyp;
|
---|
117 |
|
---|
118 | cph = sqrt ( xt * xt + yt * yt );
|
---|
119 | if ( cph == 0.0 ) xt = 1.0;
|
---|
120 | sel = yt / cph;
|
---|
121 | cel = xt / cph;
|
---|
122 |
|
---|
123 | /* Return true longitude and true geodetic latitude of site. */
|
---|
124 | *elong = atan2 ( yt, xt );
|
---|
125 | *phi = atan2 ( zt, cph );
|
---|
126 |
|
---|
127 | /* Return current azimuth of terrestrial pole seen from site position. */
|
---|
128 | xnt = ( xnm * cel + ynm * sel ) * zt - znm * cph;
|
---|
129 | ynt = - xnm * sel + ynm * cel;
|
---|
130 | *daz = atan2 ( - ynt, - xnt );
|
---|
131 |
|
---|
132 | return;
|
---|
133 | }
|
---|