/*  
 *  - - - - - - - - - - -  
 *   g a l _ s t a r p v  
 *  - - - - - - - - - - -  
 *  
 *  This routine is part of the General Astrodynamics Library  
 *  
 *  Description: 
 *  
 *  Convert star catalog coordinates to position+velocity vector.  
 *  
 *  This routine is an independent translation of a FORTRAN routine  
 *  that is part of IAU's SOFA software collection.  
 *  
 *  Status:
 *  
 *     support routine.  
 *  
 *  Given (Note 1):  
 *     ra                  d        right ascension (radians)  
 *     dec                 d        declination (radians)  
 *     pmr                 d        RA proper motion (radians/year)  
 *     pmd                 d        Dec proper motion (radians/year)  
 *     px                  d        parallax (arcseconds)  
 *     rv                  d        radial velocity (km/s, positive = receding)  
 *  
 *  Returned (Note 2):  
 *     pv               d[2][3]     pv-vector (AU, AU/day)  
 *     gal_starpv          i        status:  
 *                                   0    =    no warnings  
 *                                   1    =    distance overridden (Note 6)  
 *                                   2    =    excessive velocity (Note 7)  
 *                                   4    =    solution didn't converge (Note 8)  
 *                                   else =    binary logical OR of the above  
 *  
 *  Notes:  
 *  
 *  1) The star data accepted by this routine are "observables" for an  
 *     imaginary observer at the solar-system barycenter.  Proper motion  
 *     and radial velocity are, strictly, in terms of barycentric  
 *     coordinate time, TCB.  For most practical applications, it is  
 *     permissible to neglect the distinction between TCB and ordinary  
 *     "proper" time on Earth (TT/TAI).  The result will, as a rule, be  
 *     limited by the intrinsic accuracy of the proper-motion and radial-  
 *     velocity data;  moreover, the pv-vector is likely to be merely an  
 *     intermediate result, so that a change of time unit would cancel  
 *     out overall.  
 *  
 *     In accordance with normal star-catalog conventions, the object's  
 *     right ascension and declination are freed from the effects of  
 *     secular aberration.  The frame, which is aligned to the catalog  
 *     equator and equinox, is Lorentzian and centered on the SSB.  
 *  
 *  2) The resulting position and velocity pv-vector is with respect to  
 *     the same frame and, like the catalog coordinates, is freed from  
 *     the effects of secular aberration.  Should the "coordinate  
 *     direction", where the object was located at the catalog epoch, be  
 *     required, it may be obtained by calculating the magnitude of the  
 *     position vector pv[0][0-2] dividing by the speed of light in AU/day  
 *     to give the light-time, and then multiplying the space velocity  
 *     pv[1][0-2] by this light-time and adding the result to pv[0][0-2].  
 *  
 *     Summarizing, the pv-vector returned is for most stars almost  
 *     identical to the result of applying the standard geometrical  
 *     "space motion" transformation.  The differences, which are the  
 *     subject of the Stumpff paper referenced below, are:  
 *  
 *     (i) In stars with significant radial velocity and proper motion,  
 *     the constantly changing light-time distorts the apparent proper  
 *     motion.  Note that this is a classical, not a relativistic,  
 *     effect.  
 *  
 *     (ii) The transformation complies with special relativity.  
 *  
 *  3) Care is needed with units.  The star coordinates are in radians  
 *     and the proper motions in radians per Julian year, but the  
 *     parallax is in arcseconds; the radial velocity is in km/s, but  
 *     the pv-vector result is in AU and AU/day.  
 *  
 *  4) The ra proper motion is in terms of coordinate angle, not true  
 *     angle.  If the catalog uses arcseconds for both ra and dec proper  
 *     motions, the ra proper motion will need to be divided by cos(dec)  
 *     before use.  
 *  
 *  5) Straight-line motion at constant speed, in the inertial frame,  
 *     is assumed.  
 *  
 *  6) An extremely small (or zero or negative) parallax is interpreted  
 *     to mean that the object is on the "celestial sphere", the radius  
 *     of which is an arbitrary (large) value (see the constant PXMIN).  
 *     When the distance is overridden in this way, the status, initially  
 *     zero, has 1 added to it.  
 *  
 *  7) If the space velocity is a significant fraction of c (see the  
 *     constant VMAX), it is arbitrarily set to zero.  When this action  
 *     occurs, 2 is added to the status.  
 *  
 *  8) The relativistic adjustment involves an iterative calculation.  
 *     If the process fails to converge within a set number (IMAX) of  
 *     iterations, 4 is added to the status.  
 *  
 *  9) The inverse transformation is performed by the routine gal_PVSTAR.  
 *  
 *  Called:
 *  
 *     gal_s2pv           spherical coordinates to pv-vector  
 *     gal_pm             modulus of p-vector  
 *     gal_zp             zero p-vector  
 *     gal_pn             decompose p-vector into modulus and direction  
 *     gal_pdp            scalar product of two p-vectors  
 *     gal_sxp            multiply p-vector by scalar  
 *     gal_pmp            p-vector minus p-vector  
 *     gal_ppp            p-vector plus p-vector  
 *  
 *     References:  
 *  
 *     Stumpff,           P., Astron.Astrophys. 144, 232-240 (1985).  
 *  
 *  This revision:
 *  
 *     2006 November 13 ( c version 2008 June 8 )  
 *  
 *  
 *  Copyright (C) 2008 Paul C. L. Willmott. See notes at end.  
 *  
 *-----------------------------------------------------------------------  
 */  
  
#ifndef _GAL_STARPV_H_  
#define _GAL_STARPV_H_ 1  

#undef __BEGIN_DECLS  
#undef __END_DECLS  
#ifdef __cplusplus  
#define __BEGIN_DECLS extern "C" {  
#define __END_DECLS }  
#else  
#define __BEGIN_DECLS /* empty */  
#define __END_DECLS   /* empty */  
#endif
  
__BEGIN_DECLS  
  
int  
gal_starpv  
 (  
    double ra,  
    double dec,  
    double pmr,  
    double pmd,  
    double px,  
    double rv,  
    double pv[2][3] ) ;  
  
__END_DECLS  
  
#endif /* !_GAL_STARPV_H_ */  

/*  
 *  gal - General Astrodynamics Library  
 *  Copyright (C) 2008 Paul C. L. Willmott  
 *  
 *  This program is free software; you can redistribute it and/or modify  
 *  it under the terms of the GNU General Public License as published by  
 *  the Free Software Foundation; either version 2 of the License, or  
 *  (at your option) any later version.  
 *  
 *  This program is distributed in the hope that it will be useful,  
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of  
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
 *  GNU General Public License for more details.  
 *  
 *  You should have received a copy of the GNU General Public License along  
 *  with this program; if not, write to the Free Software Foundation, Inc.,  
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.  
 *  
 *  Contact:  
 *  
 *  Paul Willmott  
 *  vp9mu@amsat.org  
 */  
