| 1 | #include <stdio.h>
 | 
|---|
| 2 | #include <math.h>
 | 
|---|
| 3 | 
 | 
|---|
| 4 | #include "P_.h"
 | 
|---|
| 5 | #include "astro.h"
 | 
|---|
| 6 | #include "vsop87.h"
 | 
|---|
| 7 | 
 | 
|---|
| 8 | /* given the modified JD, mjd, return the true geocentric ecliptic longitude
 | 
|---|
| 9 |  *   of the sun for the mean equinox of the date, *lsn, in radians, the
 | 
|---|
| 10 |  *   sun-earth distance, *rsn, in AU, and the latitude *bsn, in radians
 | 
|---|
| 11 |  *   (since this is always <= 1.2 arcseconds, in can be neglected by
 | 
|---|
| 12 |  *   calling with bsn = NULL).
 | 
|---|
| 13 |  *
 | 
|---|
| 14 |  * if the APPARENT ecliptic longitude is required, correct the longitude for
 | 
|---|
| 15 |  *   nutation to the true equinox of date and for aberration (light travel time,
 | 
|---|
| 16 |  *   approximately  -9.27e7/186000/(3600*24*365)*2*pi = -9.93e-5 radians).
 | 
|---|
| 17 |  */
 | 
|---|
| 18 | void
 | 
|---|
| 19 | sunpos (mjd, lsn, rsn, bsn)
 | 
|---|
| 20 | double mjd;
 | 
|---|
| 21 | double *lsn, *rsn, *bsn;
 | 
|---|
| 22 | {
 | 
|---|
| 23 |         static double last_mjd = -3691, last_lsn, last_rsn, last_bsn;
 | 
|---|
| 24 |         double ret[6];
 | 
|---|
| 25 | 
 | 
|---|
| 26 |         if (mjd == last_mjd) {
 | 
|---|
| 27 |             *lsn = last_lsn;
 | 
|---|
| 28 |             *rsn = last_rsn;
 | 
|---|
| 29 |             if (bsn) *bsn = last_bsn;
 | 
|---|
| 30 |             return;
 | 
|---|
| 31 |         }
 | 
|---|
| 32 | 
 | 
|---|
| 33 |         vsop87(mjd, SUN, 0.0, ret);     /* full precision earth pos */
 | 
|---|
| 34 | 
 | 
|---|
| 35 |         *lsn = ret[0] - PI;             /* revert to sun pos */
 | 
|---|
| 36 |         range (lsn, 2*PI);              /* normalise */
 | 
|---|
| 37 | 
 | 
|---|
| 38 |         last_lsn = *lsn;                /* memorise */
 | 
|---|
| 39 |         last_rsn = *rsn = ret[2];
 | 
|---|
| 40 |         last_bsn = -ret[1];
 | 
|---|
| 41 |         last_mjd = mjd;
 | 
|---|
| 42 | 
 | 
|---|
| 43 |         if (bsn) *bsn = last_bsn;       /* assign only if non-NULL pointer */
 | 
|---|
| 44 | }
 | 
|---|
| 45 | 
 | 
|---|
| 46 | /* For RCS Only -- Do Not Edit */
 | 
|---|
| 47 | static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sun.c,v $ $Date: 2001-10-22 12:08:28 $ $Revision: 1.2 $ $Name: not supported by cvs2svn $"};
 | 
|---|