| 1 | #include "slalib.h"
|
|---|
| 2 | #include "slamac.h"
|
|---|
| 3 | void slaPlanel ( double date, int jform, double epoch, double orbinc,
|
|---|
| 4 | double anode, double perih, double aorq, double e,
|
|---|
| 5 | double aorl, double dm, double pv[6], int* jstat )
|
|---|
| 6 | /*
|
|---|
| 7 | ** - - - - - - - - - -
|
|---|
| 8 | ** s l a P l a n e l
|
|---|
| 9 | ** - - - - - - - - - -
|
|---|
| 10 | **
|
|---|
| 11 | ** Heliocentric position and velocity of a planet, asteroid or comet,
|
|---|
| 12 | ** starting from orbital elements.
|
|---|
| 13 | **
|
|---|
| 14 | ** Given:
|
|---|
| 15 | ** date double date, Modified Julian Date (JD - 2400000.5)
|
|---|
| 16 | ** jform int choice of element set (1-3; Note 3)
|
|---|
| 17 | ** epoch double epoch of elements (TT MJD)
|
|---|
| 18 | ** orbinc double inclination (radians)
|
|---|
| 19 | ** anode double longitude of the ascending node (radians)
|
|---|
| 20 | ** perih double longitude or argument of perihelion (radians)
|
|---|
| 21 | ** aorq double mean distance or perihelion distance (AU)
|
|---|
| 22 | ** e double eccentricity
|
|---|
| 23 | ** aorl double mean anomaly or longitude (radians, jform=1,2 only)
|
|---|
| 24 | ** dm double daily motion (radians, jform=1 only)
|
|---|
| 25 | **
|
|---|
| 26 | ** Returned:
|
|---|
| 27 | ** pv double[6] heliocentric x,y,z,xdot,ydot,zdot of date,
|
|---|
| 28 | ** J2000 equatorial triad (AU,AU/s)
|
|---|
| 29 | ** jstat int* status: 0 = OK
|
|---|
| 30 | ** -1 = illegal jform
|
|---|
| 31 | ** -2 = illegal e
|
|---|
| 32 | ** -3 = illegal aorq
|
|---|
| 33 | ** -4 = illegal dm
|
|---|
| 34 | ** -5 = numerical error
|
|---|
| 35 | **
|
|---|
| 36 | ** Called: slaEl2ue, slaUe2pv
|
|---|
| 37 | **
|
|---|
| 38 | ** Notes
|
|---|
| 39 | **
|
|---|
| 40 | ** 1 DATE is the instant for which the prediction is required. It is
|
|---|
| 41 | ** in the TT timescale (formerly Ephemeris Time, ET) and is a
|
|---|
| 42 | ** Modified Julian Date (JD-2400000.5).
|
|---|
| 43 | **
|
|---|
| 44 | ** 2 The elements are with respect to the J2000 ecliptic and equinox.
|
|---|
| 45 | **
|
|---|
| 46 | ** 3 Three different element-format options are available:
|
|---|
| 47 | **
|
|---|
| 48 | ** Option jform=1, suitable for the major planets:
|
|---|
| 49 | **
|
|---|
| 50 | ** epoch = epoch of elements (TT MJD)
|
|---|
| 51 | ** orbinc = inclination i (radians)
|
|---|
| 52 | ** anode = longitude of the ascending node, big omega (radians)
|
|---|
| 53 | ** perih = longitude of perihelion, curly pi (radians)
|
|---|
| 54 | ** aorq = mean distance, a (AU)
|
|---|
| 55 | ** e = eccentricity, e (range 0 to <1)
|
|---|
| 56 | ** aorl = mean longitude L (radians)
|
|---|
| 57 | ** dm = daily motion (radians)
|
|---|
| 58 | **
|
|---|
| 59 | ** Option jform=2, suitable for minor planets:
|
|---|
| 60 | **
|
|---|
| 61 | ** epoch = epoch of elements (TT MJD)
|
|---|
| 62 | ** orbinc = inclination i (radians)
|
|---|
| 63 | ** anode = longitude of the ascending node, big omega (radians)
|
|---|
| 64 | ** perih = argument of perihelion, little omega (radians)
|
|---|
| 65 | ** aorq = mean distance, a (AU)
|
|---|
| 66 | ** e = eccentricity, e (range 0 to <1)
|
|---|
| 67 | ** aorl = mean anomaly M (radians)
|
|---|
| 68 | **
|
|---|
| 69 | ** Option jform=3, suitable for comets:
|
|---|
| 70 | **
|
|---|
| 71 | ** epoch = epoch of perihelion (TT MJD)
|
|---|
| 72 | ** orbinc = inclination i (radians)
|
|---|
| 73 | ** anode = longitude of the ascending node, big omega (radians)
|
|---|
| 74 | ** perih = argument of perihelion, little omega (radians)
|
|---|
| 75 | ** aorq = perihelion distance, q (AU)
|
|---|
| 76 | ** e = eccentricity, e (range 0 to 10)
|
|---|
| 77 | **
|
|---|
| 78 | ** 4 Unused elements (DM for jform=2, aorl and dm for jform=3) are
|
|---|
| 79 | ** not accessed.
|
|---|
| 80 | **
|
|---|
| 81 | ** 5 The reference frame for the result is with respect to the mean
|
|---|
| 82 | ** equator and equinox of epoch J2000.
|
|---|
| 83 | **
|
|---|
| 84 | ** 6 The algorithm was originally adapted from the EPHSLA program
|
|---|
| 85 | ** of D.H.P.Jones (private communication, 1996). The method is
|
|---|
| 86 | ** based on Stumpff's Universal Variables.
|
|---|
| 87 | **
|
|---|
| 88 | ** Reference: Everhart, E. & Pitkin, E.T., Am.J.Phys. 51, 712, 1983.
|
|---|
| 89 | **
|
|---|
| 90 | ** Last revision: 18 March 1999
|
|---|
| 91 | **
|
|---|
| 92 | ** Copyright P.T.Wallace. All rights reserved.
|
|---|
| 93 | */
|
|---|
| 94 | {
|
|---|
| 95 | double u[13];
|
|---|
| 96 | int j;
|
|---|
| 97 |
|
|---|
| 98 |
|
|---|
| 99 |
|
|---|
| 100 | /* Validate elements and convert to "universal variables" parameters. */
|
|---|
| 101 | slaEl2ue ( date, jform,
|
|---|
| 102 | epoch, orbinc, anode, perih, aorq, e, aorl, dm, u, &j );
|
|---|
| 103 |
|
|---|
| 104 | /* Determine the position and velocity. */
|
|---|
| 105 | if ( !j ) {
|
|---|
| 106 | slaUe2pv ( date, u, pv, &j );
|
|---|
| 107 | if ( j ) j = -5;
|
|---|
| 108 | }
|
|---|
| 109 |
|
|---|
| 110 | /* Wrap up. */
|
|---|
| 111 | *jstat = j;
|
|---|
| 112 |
|
|---|
| 113 | }
|
|---|