[1457] | 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 */
|
---|
[1719] | 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 $"};
|
---|