| 1 | #include "slalib.h" | 
|---|
| 2 | #include "slamac.h" | 
|---|
| 3 | void slaAmpqk ( double ra, double da, double amprms[21], | 
|---|
| 4 | double *rm, double *dm ) | 
|---|
| 5 | /* | 
|---|
| 6 | **  - - - - - - - - - | 
|---|
| 7 | **   s l a A m p q k | 
|---|
| 8 | **  - - - - - - - - - | 
|---|
| 9 | ** | 
|---|
| 10 | **  Convert star RA,Dec from geocentric apparent to mean place. | 
|---|
| 11 | ** | 
|---|
| 12 | **  The mean coordinate system is the post IAU 1976 system, | 
|---|
| 13 | **  loosely called FK5. | 
|---|
| 14 | ** | 
|---|
| 15 | **  Use of this routine is appropriate when efficiency is important | 
|---|
| 16 | **  and where many star positions are all to be transformed for | 
|---|
| 17 | **  one epoch and equinox.  The star-independent parameters can be | 
|---|
| 18 | **  obtained by calling the slaMappa routine. | 
|---|
| 19 | ** | 
|---|
| 20 | **  Given: | 
|---|
| 21 | **     ra       double      apparent RA (radians) | 
|---|
| 22 | **     da       double      apparent Dec (radians) | 
|---|
| 23 | ** | 
|---|
| 24 | **     amprms   double[21]  star-independent mean-to-apparent parameters: | 
|---|
| 25 | ** | 
|---|
| 26 | **       (0)      time interval for proper motion (Julian years) | 
|---|
| 27 | **       (1-3)    barycentric position of the Earth (AU) | 
|---|
| 28 | **       (4-6)    heliocentric direction of the Earth (unit vector) | 
|---|
| 29 | **       (7)      (grav rad Sun)*2/(Sun-Earth distance) | 
|---|
| 30 | **       (8-10)   abv: barycentric Earth velocity in units of c | 
|---|
| 31 | **       (11)     sqrt(1-v*v) where v=modulus(abv) | 
|---|
| 32 | **       (12-20)  precession/nutation (3,3) matrix | 
|---|
| 33 | ** | 
|---|
| 34 | **  Returned: | 
|---|
| 35 | **     *rm      double      mean RA (radians) | 
|---|
| 36 | **     *dm      double      mean Dec (radians) | 
|---|
| 37 | ** | 
|---|
| 38 | **  References: | 
|---|
| 39 | **     1984 Astronomical Almanac, pp B39-B41. | 
|---|
| 40 | **     (also Lederle & Schwan, Astron. Astrophys. 134, 1-6, 1984) | 
|---|
| 41 | ** | 
|---|
| 42 | **  Notes: | 
|---|
| 43 | ** | 
|---|
| 44 | **  1)  The accuracy is limited by the routine slaEvp, called | 
|---|
| 45 | **      by slaMappa, which computes the Earth position and | 
|---|
| 46 | **      velocity using the methods of Stumpff.  The maximum | 
|---|
| 47 | **      error is about 0.3 milliarcsecond. | 
|---|
| 48 | ** | 
|---|
| 49 | **  2)  Iterative techniques are used for the aberration and | 
|---|
| 50 | **      light deflection corrections so that the routines | 
|---|
| 51 | **      slaAmp (or slaAmpqk) and slaMap (or slaMapqk) are | 
|---|
| 52 | **      accurate inverses;  even at the edge of the Sun's disc | 
|---|
| 53 | **      the discrepancy is only about 1 nanoarcsecond. | 
|---|
| 54 | ** | 
|---|
| 55 | **  Called:  slaDcs2c, slaDimxv, slaDvdv, slaDvn, slaDcc2s, | 
|---|
| 56 | **           slaDranrm | 
|---|
| 57 | ** | 
|---|
| 58 | **  Last revision:   31 October 1993 | 
|---|
| 59 | ** | 
|---|
| 60 | **  Copyright P.T.Wallace.  All rights reserved. | 
|---|
| 61 | */ | 
|---|
| 62 | { | 
|---|
| 63 | double gr2e;    /* (grav rad Sun)*2/(Sun-Earth distance) */ | 
|---|
| 64 | double ab1;     /* sqrt(1-v*v) where v=modulus of Earth vel */ | 
|---|
| 65 | double ehn[3];  /* Earth position wrt Sun (unit vector, FK5) */ | 
|---|
| 66 | double abv[3];  /* Earth velocity wrt SSB (c, FK5) */ | 
|---|
| 67 | double p[3], p1[3], p2[3], p3[3];  /* work vectors */ | 
|---|
| 68 | double ab1p1, p1dv, p1dvp1, w, pde, pdep1; | 
|---|
| 69 | int i, j; | 
|---|
| 70 |  | 
|---|
| 71 | /* Unpack some of the parameters */ | 
|---|
| 72 | gr2e = amprms[7]; | 
|---|
| 73 | ab1  = amprms[11]; | 
|---|
| 74 | for ( i = 0; i < 3; i++ ) { | 
|---|
| 75 | ehn[i] = amprms[i + 4]; | 
|---|
| 76 | abv[i] = amprms[i + 8]; | 
|---|
| 77 | } | 
|---|
| 78 |  | 
|---|
| 79 | /* Apparent RA,Dec to Cartesian */ | 
|---|
| 80 | slaDcs2c ( ra, da, p3 ); | 
|---|
| 81 |  | 
|---|
| 82 | /* Precession and nutation */ | 
|---|
| 83 | slaDimxv ( (double(*)[3]) &rms[12], p3, p2 ); | 
|---|
| 84 |  | 
|---|
| 85 | /* Aberration */ | 
|---|
| 86 | ab1p1 = ab1 + 1.0; | 
|---|
| 87 | for ( i = 0; i < 3; i++ ) { | 
|---|
| 88 | p1[i] = p2[i]; | 
|---|
| 89 | } | 
|---|
| 90 | for ( j = 0; j < 2; j++ ) { | 
|---|
| 91 | p1dv = slaDvdv ( p1, abv ); | 
|---|
| 92 | p1dvp1 = 1.0 + p1dv; | 
|---|
| 93 | w = 1.0 + p1dv / ab1p1; | 
|---|
| 94 | for ( i = 0; i < 3; i++ ) { | 
|---|
| 95 | p1[i] = ( p1dvp1 * p2[i] - w * abv[i] ) / ab1; | 
|---|
| 96 | } | 
|---|
| 97 | slaDvn ( p1, p3, &w ); | 
|---|
| 98 | for ( i = 0; i < 3; i++ ) { | 
|---|
| 99 | p1[i] = p3[i]; | 
|---|
| 100 | } | 
|---|
| 101 | } | 
|---|
| 102 |  | 
|---|
| 103 | /* Light deflection */ | 
|---|
| 104 | for ( i = 0; i < 3; i++ ) { | 
|---|
| 105 | p[i] = p1[i]; | 
|---|
| 106 | } | 
|---|
| 107 | for ( j = 0; j < 5; j++ ) { | 
|---|
| 108 | pde = slaDvdv ( p, ehn ); | 
|---|
| 109 | pdep1 = 1.0 + pde; | 
|---|
| 110 | w = pdep1 - gr2e * pde; | 
|---|
| 111 | for ( i = 0; i < 3; i++ ) { | 
|---|
| 112 | p[i] = ( pdep1 * p1[i] - gr2e * ehn[i] ) / w; | 
|---|
| 113 | } | 
|---|
| 114 | slaDvn ( p, p2, &w ); | 
|---|
| 115 | for ( i = 0; i < 3; i++ ) { | 
|---|
| 116 | p[i] = p2[i]; | 
|---|
| 117 | } | 
|---|
| 118 | } | 
|---|
| 119 |  | 
|---|
| 120 | /* Mean RA,Dec */ | 
|---|
| 121 | slaDcc2s ( p, rm, dm ); | 
|---|
| 122 | *rm = slaDranrm ( *rm ); | 
|---|
| 123 | } | 
|---|