ftp.nice.ch/pub/next/science/astronomy/usat-NeXT.N.bs.tar.gz#/usat/almanacAA/ojupiter.c

This is ojupiter.c in view mode; [Download] [Up]

/********************************************************/
/* ojupiter.c						*/
/*							*/
/* Orbital elements and perturbations for the planet 	*/
/* Jupiter using formulas given by Meeus 		*/
/********************************************************/

/***** description
 *
 *	$Id: ojupiter.c,v 1.3 1993/04/21 21:29:45 craig Exp $
 *
 */

/***** modification history
 *
 *	$Log: ojupiter.c,v $
 * Revision 1.3  1993/04/21  21:29:45  craig
 * Changed the path of the satellite.h include.
 * Changed ecnsts to pcnsts.
 *
 * Revision 1.2  1993/04/21  15:24:27  craig
 * First working version.  Ran through indent and converted to ansi.
 * Added hooks for working with the satellite programs.
 *
 *
 */

/***** include files *****/

#include <math.h>
#include "aaproto.h"
#include "satellite.h"

/***** global variables *****/

extern struct MCONSTANTS mcnsts;
extern struct PCONSTANTS pcnsts;

/* from oearth.c */

extern double T;

/* from manoms.c */

extern double M5;

double f;
double P;
double Q;
double S;
double V;
double W;

double nu;
double ze;

double psi;

double cosQ;
double cos2Q;
double cos3Q;

double sinQ;
double sin2Q;
double sin3Q;

double cosV;
double cos2V;

double sinV;
double sin2V;

double cosze;
double cos2ze;
double cos3ze;
double cos4ze;
double cos5ze;

double sinze;
double sin2ze;
double sin3ze;
double sin4ze;
double sin5ze;

double sinW;

/***** local function prototypes *****/

static int djup (struct orbit * e);

/***************************************************/
/* pjup						   */
/* Calculations needed for Jupiter through Neptune */
/***************************************************/

int    pjup (void)
{

    nu = T / 5.0 + 0.1;
    P = 237.47555 + 3034.9061 * T;
    Q = 265.91650 + 1222.1139 * T;
    S = 243.51721 + 428.4677 * T;
    f = 5.0 * Q - 2.0 * P;
    V = mod360 (f) * mcnsts.de2ra;
    f = 2.0 * P - 6.0 * Q + 3.0 * S;
    W = mod360 (f) * mcnsts.de2ra;
    f = Q - P;
    ze = mod360 (f) * mcnsts.de2ra;
    f = S - Q;
    psi = mod360 (f) * mcnsts.de2ra;
    P = mod360 (P) * mcnsts.de2ra;
    Q = mod360 (Q) * mcnsts.de2ra;
    S = mod360 (S) * mcnsts.de2ra;

    sinV = sin (V);
    cosV = cos (V);

    /* Use trigonometry to speed up sin, cos of multiple angles. This
       reduces the relative accuracy, but we only need absolute accuracy
       to about 8 places. */

    sin2V = 2.0 * sinV * cosV;
    cos2V = cosV * cosV - sinV * sinV;
    sinW = sin (W);
    cosze = cos (ze);
    sinze = sin (ze);

    sin2ze = 2.0 * sinze * cosze;
    cos2ze = cosze * cosze - sinze * sinze;

    sin3ze = sinze * cos2ze + cosze * sin2ze;
    cos3ze = cosze * cos2ze - sinze * sin2ze;

    sin4ze = sinze * cos3ze + cosze * sin3ze;
    cos4ze = cosze * cos3ze - sinze * sin3ze;

    sin5ze = sinze * cos4ze + cosze * sin4ze;
    cos5ze = cosze * cos4ze - sinze * sin4ze;

    sinQ = sin (Q);
    cosQ = cos (Q);

    sin2Q = 2.0 * sinQ * cosQ;
    cos2Q = cosQ * cosQ - sinQ * sinQ;

    sin3Q = sinQ * cos2Q + cosQ * sin2Q;
    cos3Q = cosQ * cos2Q - sinQ * sin2Q;
    return (0);
}

/******************************************/
/* ojupiter				  */
/*					  */
/* Elements and perturbations for Jupiter */
/******************************************/

int    ojupiter (struct orbit * e, double J)
{

    e->epoch = J;
    manoms (J);
    pjup ();
    e->M = M5;
    e->a = 5.202561;
    e->ecc = ((-0.0000000017 * T - 0.0000004676) * T
	+ 0.000164180) * T + 0.04833475;

    e->equinox = pcnsts.J2000;
    e->i = ((1.27e-7 * T + 2.942e-5) * T - 0.0022374) * T + 1.305288;
    f = ((8.999e-6 * T - 0.00021857) * T + 0.0478404) * T + 273.829584;
    e->w = mod360 (f);
    f = ((-1.2460e-5 * T + 0.00096672) * T + 0.1659357) * T + 100.287838;
    e->W = mod360 (f);
    f = e->M + e->w + e->W;
    e->L = mod360 (f);

    djup (e);

    return (0);
}


/********/
/* djup */
/********/

static int djup (struct orbit * e)
{
    double p, q;

    /* perturbations in mean longitude */

    p = ((-0.004692 * nu - 0.010281) * nu + 0.331364) * sinV
	+ ((0.002075 * nu - 0.064436) * nu + 0.003228) * cosV
	- ((-0.000489 * nu + 0.000275) * nu + 0.003083) * sin2V
	+ 0.002472 * sinW
	+ 0.013619 * sinze
	+ 0.018472 * sin2ze
	+ 0.006717 * sin3ze
	+ 0.002775 * sin4ze;

    f = (0.007275 - 0.001253 * nu) * sinze
	+ 0.006417 * sin2ze
	+ 0.002439 * sin3ze
	- (0.033839 + 0.001125 * nu) * cosze
	- 0.003767 * cos2ze;

    p += f * sinQ;

    f = -(0.035681 + 0.001208 * nu) * sinze
	- 0.004261 * sin2ze
	+ 0.002178
	+ (-0.006333 + 0.001161 * nu) * cosze
	- 0.006675 * cos2ze
	- 0.002664 * cos3ze;

    p += f * cosQ;

    f = -0.002572 * sinze - 0.003567 * sin2ze;

    p += f * sin2Q;

    f = 0.002094 * cosze + 0.003342 * cos2ze;

    p += f * cos2Q;

    /* perturbations in the perihelion */

    q = (0.007192 - 0.003147 * nu) * sinV
	+ ((0.000197 * nu - 0.000675) * nu - 0.020428) * cosV;

    f = (0.007269 + 0.000672 * nu) * sinze
	- 0.004344
	+ 0.034036 * cosze
	+ 0.005614 * cos2ze
	+ 0.002964 * cos3ze;

    q += f * sinQ;

    f = 0.037761 * sinze
	+ 0.006158 * sin2ze
	- 0.006603 * cosze;

    q += f * cosQ;

    f = -0.005356 * sinze
	+ 0.002722 * sin2ze
	+ 0.004483 * cosze
	- 0.002642 * cos2ze;

    q += f * sin2Q;

    f = 0.004403 * sinze
	- 0.002536 * sin2ze
	+ 0.005547 * cosze
	- 0.002689 * cos2ze;

    q += f * cos2Q;

    e->w += q;

    f = p - (q / (e->ecc));

    e->M += f;

    e->L += p;

    /* perturbations in the eccentricity */

    q = ((-.0000043 * nu + .0000130) * nu + .0003606) * sinV;

    q += (.0001289 - .0000580 * nu) * cosV;

    f = -0.0006764 * sinze
	- 0.0001110 * sin2ze
	- 0.0000224 * sin3ze
	- 0.0000204
	+ (0.0001284 + 0.0000116 * nu) * cosze
	+ 0.0000188 * cos2ze;

    q += f * sinQ;

    f = (0.0001460 + 0.0000130 * nu) * sinze
	+ 0.0000224 * sin2ze
	- 0.0000817
	+ 0.0006074 * cosze
	+ 0.0000992 * cos2ze
	+ 0.0000508 * cos3ze
	+ 0.0000230 * cos4ze
	+ 0.0000108 * cos5ze;

    q += f * cosQ;

    f = -(0.0000956 + 0.0000073 * nu) * sinze
	+ 0.0000448 * sin2ze
	+ 0.0000137 * sin3ze
	+ (-0.0000997 + 0.0000108 * nu) * cosze
	+ 0.0000480 * cos2ze
	+ 0.0000148 * cos3ze;

    q += f * sin2Q;

    f = (-0.0000956 + 0.0000099 * nu) * sinze
	+ 0.0000490 * sin2ze
	+ 0.0000158 * sin3ze
	+ 0.0000179
	+ (0.0001024 + 0.0000075 * nu) * cosze
	- 0.0000437 * cos2ze
	- 0.0000132 * cos3ze;

    q += f * cos2Q;

    e->ecc += q;

    /* perturbations in the semimajor axis */

    q = -0.000263 * cosV
	+ 0.000205 * cosze
	+ 0.000693 * cos2ze
	+ 0.000312 * cos3ze
	+ 0.000147 * cos4ze;

    f = 0.000299 * sinze
	+ 0.000181 * cos2ze;

    q += f * sinQ;

    f = 0.000204 * sin2ze
	+ 0.000111 * sin3ze
	- 0.000337 * cosze
	- 0.000111 * cos2ze;

    q += f * cosQ;

    e->a += q;

    return (0);
}

/************/
/* cjupiter */
/************/

int    cjupiter (struct orbit * e)
{
    e->plat = 0.0;

    return (0);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.