| 1 | #include "slalib.h"
 | 
|---|
| 2 | #include "slamac.h"
 | 
|---|
| 3 | void slaMapqkz ( double rm, double dm, double amprms[21],
 | 
|---|
| 4 |                  double *ra, double *da )
 | 
|---|
| 5 | /*
 | 
|---|
| 6 | **  - - - - - - - - - -
 | 
|---|
| 7 | **   s l a M a p q k z
 | 
|---|
| 8 | **  - - - - - - - - - -
 | 
|---|
| 9 | **
 | 
|---|
| 10 | **  Quick mean to apparent place:  transform a star RA,dec from
 | 
|---|
| 11 | **  mean place to geocentric apparent place, given the
 | 
|---|
| 12 | **  star-independent parameters, and assuming zero parallax
 | 
|---|
| 13 | **  and proper motion.
 | 
|---|
| 14 | **
 | 
|---|
| 15 | **  Use of this routine is appropriate when efficiency is important
 | 
|---|
| 16 | **  and where many star positions, all with parallax and proper
 | 
|---|
| 17 | **  motion either zero or already allowed for, and all referred to
 | 
|---|
| 18 | **  the same equator and equinox, are to be transformed for one
 | 
|---|
| 19 | **  epoch.  The star-independent parameters can be obtained by
 | 
|---|
| 20 | **  calling the slaMappa routine.
 | 
|---|
| 21 | **
 | 
|---|
| 22 | **  The corresponding routine for the case of non-zero parallax
 | 
|---|
| 23 | **  and proper motion is slaMapqk.
 | 
|---|
| 24 | **
 | 
|---|
| 25 | **  The reference frames and timescales used are post IAU 1976.
 | 
|---|
| 26 | **
 | 
|---|
| 27 | **  Given:
 | 
|---|
| 28 | **     rm,dm    double      mean RA,dec (rad)
 | 
|---|
| 29 | **     amprms   double[21]  star-independent mean-to-apparent parameters:
 | 
|---|
| 30 | **
 | 
|---|
| 31 | **       (0-3)    not used
 | 
|---|
| 32 | **       (4-6)    heliocentric direction of the Earth (unit vector)
 | 
|---|
| 33 | **       (7)      (grav rad Sun)*2/(Sun-Earth distance)
 | 
|---|
| 34 | **       (8-10)   abv: barycentric Earth velocity in units of c
 | 
|---|
| 35 | **       (11)     sqrt(1-v**2) where v=modulus(abv)
 | 
|---|
| 36 | **       (12-20)  precession/nutation (3,3) matrix
 | 
|---|
| 37 | **
 | 
|---|
| 38 | **  Returned:
 | 
|---|
| 39 | **     *ra,*da  double      apparent RA,dec (rad)
 | 
|---|
| 40 | **
 | 
|---|
| 41 | **  References:
 | 
|---|
| 42 | **     1984 Astronomical Almanac, pp B39-B41.
 | 
|---|
| 43 | **     (also Lederle & Schwan, Astron. Astrophys. 134,
 | 
|---|
| 44 | **      1-6, 1984)
 | 
|---|
| 45 | **
 | 
|---|
| 46 | **  Notes:
 | 
|---|
| 47 | **
 | 
|---|
| 48 | **    1)  The vectors amprms(1-3) and amprms(4-6) are referred to the
 | 
|---|
| 49 | **        mean equinox and equator of epoch eq.
 | 
|---|
| 50 | **
 | 
|---|
| 51 | **    2)  Strictly speaking, the routine is not valid for solar-system
 | 
|---|
| 52 | **        sources, though the error will usually be extremely small.
 | 
|---|
| 53 | **        However, to prevent gross errors in the case where the
 | 
|---|
| 54 | **        position of the Sun is specified, the gravitational
 | 
|---|
| 55 | **        deflection term is restrained within about 920 arcsec of the
 | 
|---|
| 56 | **        centre of the Sun's disc.  The term has a maximum value of
 | 
|---|
| 57 | **        about 1.85 arcsec at this radius, and decreases to zero as
 | 
|---|
| 58 | **        the centre of the disc is approached.
 | 
|---|
| 59 | **
 | 
|---|
| 60 | **  Called:
 | 
|---|
| 61 | **     slaDcs2c       spherical to Cartesian
 | 
|---|
| 62 | **     slaDvdv        dot product
 | 
|---|
| 63 | **     slaDmxv        matrix x vector
 | 
|---|
| 64 | **     slaDcc2s       Cartesian to spherical
 | 
|---|
| 65 | **     slaDranrm      normalize angle 0-2pi
 | 
|---|
| 66 | **
 | 
|---|
| 67 | **  Last revision:   17 August 1999
 | 
|---|
| 68 | **
 | 
|---|
| 69 | **  Copyright P.T.Wallace.  All rights reserved.
 | 
|---|
| 70 | */
 | 
|---|
| 71 | {
 | 
|---|
| 72 |    int i;
 | 
|---|
| 73 |    double gr2e, ab1, ehn[3], abv[3], p[3], pde, pdep1,
 | 
|---|
| 74 |           w, p1[3], p1dv, p1dvp1, p2[3], p3[3];
 | 
|---|
| 75 | 
 | 
|---|
| 76 | 
 | 
|---|
| 77 | /* Unpack scalar and vector parameters */
 | 
|---|
| 78 |    gr2e = amprms[7];
 | 
|---|
| 79 |    ab1 = amprms[11];
 | 
|---|
| 80 |    for ( i = 0; i < 3; i++ ) {
 | 
|---|
| 81 |       ehn[i] = amprms[i+4];
 | 
|---|
| 82 |       abv[i] = amprms[i+8];
 | 
|---|
| 83 |    }
 | 
|---|
| 84 | 
 | 
|---|
| 85 | /* Spherical to x,y,z */
 | 
|---|
| 86 |    slaDcs2c ( rm, dm, p );
 | 
|---|
| 87 | 
 | 
|---|
| 88 | /* Light deflection */
 | 
|---|
| 89 |    pde = slaDvdv ( p, ehn );
 | 
|---|
| 90 |    pdep1 = pde + 1.0;
 | 
|---|
| 91 |    w = gr2e / gmax ( pdep1, 1e-5 );
 | 
|---|
| 92 |    for ( i = 0; i < 3; i++ ) {
 | 
|---|
| 93 |       p1[i] = p[i] + w * ( ehn[i] - pde * p[i] );
 | 
|---|
| 94 |    }
 | 
|---|
| 95 | 
 | 
|---|
| 96 | /* Aberration */
 | 
|---|
| 97 |    p1dv = slaDvdv ( p1, abv );
 | 
|---|
| 98 |    p1dvp1 = p1dv + 1.0;
 | 
|---|
| 99 |    w = 1.0 + p1dv / ( ab1 + 1.0 );
 | 
|---|
| 100 |    for ( i = 0; i < 3; i++ ) {
 | 
|---|
| 101 |       p2[i] = ( ( ab1 * p1[i] ) + ( w * abv[i] ) ) / p1dvp1;
 | 
|---|
| 102 |    }
 | 
|---|
| 103 | 
 | 
|---|
| 104 | /* Precession and nutation */
 | 
|---|
| 105 |    slaDmxv ( (double(*)[3]) &rms[12], p2, p3 );
 | 
|---|
| 106 | 
 | 
|---|
| 107 | /* Geocentric apparent RA,dec */
 | 
|---|
| 108 |    slaDcc2s ( p3, ra, da );
 | 
|---|
| 109 |    *ra = slaDranrm ( *ra );
 | 
|---|
| 110 | }
 | 
|---|