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