source: trunk/MagicSoft/slalib/polmo.c

Last change on this file was 731, checked in by tbretz, 24 years ago
*** empty log message ***
  • Property svn:executable set to *
File size: 4.9 KB
Line 
1#include "slalib.h"
2#include "slamac.h"
3void 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}
Note: See TracBrowser for help on using the repository browser.