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

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

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

/***** description
 *
 *	$Log: ouranus.c,v $
 * Revision 1.3  1993/04/21  21:40:02  craig
 * Changed the path for the satellite.h include.
 * Changed ecnsts to pcnsts.
 *
 * Revision 1.2  1993/04/21  15:29:13  craig
 * First working version.  Ran through indent and converted to ansi.
 * Added hooks for working with the satellite programs.
 *
 *
 */

/***** modification history
 *
 *	$Log: ouranus.c,v $
 * Revision 1.3  1993/04/21  21:40:02  craig
 * Changed the path for the satellite.h include.
 * Changed ecnsts to pcnsts.
 *
 * Revision 1.2  1993/04/21  15:29:13  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 ojupiter.c */

extern double f;
extern double P;
extern double Q;
extern double S;
extern double nu;
extern double ze;
extern double sinW;

/* from oneptune.c */

extern double G;
extern double H;
extern double th;
extern double eta;

extern double cos1H;
extern double cos2H;

extern double sin1H;
extern double sin2H;

extern double costh;
extern double cos2th;

extern double sinth;
extern double sin2th;

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

static double M7;

static double sineta = 0.0;
static double coseta = 0.0;
static double sinS = 0.0;
static double cosS = 0.0;
static double sin2S = 0.0;
static double cos2S = 0.0;

/***********/
/* ouranus */
/***********/

int    ouranus (struct orbit * e, double J)
{
    double p, q;

    e->epoch = J;
    manoms (J);
    pjup ();

    f = (0.000079 * T + 428.37911) * T + 72.64878;
    f = mod360 (f);
    e->M = f;
    M7 = f;
    e->a = 19.21814;
    e->ecc = (0.000000077 * T - 0.00002658) * T + 0.0463444;

    e->equinox = pcnsts.J2000;
    e->i = ((1.23e-7 * T - 2.7e-7) * T - 0.0017660) * T + 0.774950;
    f = ((1.3904e-5 * T - 0.00049812) * T + 0.0337219) * T + 99.021587;
    e->w = mod360 (f);
    f = ((-1.4536e-5 * T + 0.00042674) * T + 0.0545828) * T + 73.923501;
    e->W = mod360 (f);
    f = e->M + e->w + e->W;
    e->L = mod360 (f);

    G = 83.76922 + 218.4901 * T;
    G = mod360 (G) * mcnsts.de2ra;
    H = modtp (2.0 * G - S);
    ze = modtp (S - P);
    eta = modtp (S - Q);
    th = modtp (G - S);

    sin1H = sin (H);
    cos1H = cos (H);
    sin2H = 2.0 * sin1H * cos1H;
    cos2H = cos1H * cos1H - sin1H * sin1H;
    sinth = sin (th);
    costh = cos (th);
    sin2th = 2.0 * sinth * costh;
    cos2th = costh * costh - sinth * sinth;
    sineta = sin (eta);
    coseta = cos (eta);
    sinS = sin (S);
    cosS = cos (S);
    sin2S = 2.0 * sinS * cosS;
    cos2S = cosS * cosS - sinS * sinS;

    /* perturbations in mean longitude */

    p = (0.864319 - 0.001583 * nu) * sin1H;
    p += (0.082222 - 0.006833 * nu) * cos1H;
    p += 0.036017 * sin2H
	- 0.003019 * cos2H
	+ 0.008122 * sinW;
    e->L += p;

    /* perturbations in the perihelion */

    q = 0.120303 * sin1H + 0.006197 * sin2H;
    q = q + (0.019472 - 0.000947 * nu) * cos1H;
    e->w += q;
    e->M = M7 + p - q / (e->ecc);

    /* correction to the orbital eccentricity */

    q = (-0.0003349 + 0.0000163 * nu) * sin1H;
    q = q + 0.0020981 * cos1H
	+ 0.0001311 * cos2H;
    e->ecc += q;

    /* perturbation in the semimajor axis */

    e->a -= 0.003825 * cos1H;
    return (0);
}

/************************************************/
/* curanus					*/
/*						*/
/* Applied after solving Kepler's equation	*/
/************************************************/

int    curanus (struct orbit * e)
{
    double q;

    /* correction to the true longitude */

    q = (0.010122 - 0.000988 * nu) * sin (S + eta);

    q += ((-0.001910 * nu + 0.002031) * nu - 0.038581) * cos (S + eta);
    f = (0.000868 * nu - 0.001038) * nu + 0.034964;
    q += f * cos (2.0 * S + eta);
    q += 0.005594 * sin (S + 3.0 * th);

    q = q
	- 0.014808 * sin (ze)
	- 0.005794 * sineta
	+ 0.002347 * coseta
	+ 0.009872 * sinth
	+ 0.008803 * sin2th;

    q -= 0.004308 * sin (3 * th);
    e->L += q * mcnsts.de2ra;

    /* correction to the heliocentric latitude */

    f = 0.000458 * sineta - 0.000642 * coseta - 0.000517 * cos (4.0 * th);
    q = f * sin (S);
    f = -(0.000347 * sineta + 0.000853 * coseta + 0.000517 * sin (4.0 * eta));
    q += f * cosS;
    q += 0.000403 * (cos2th * sin2S + sin2th * cos2S);
    e->plat = q * mcnsts.de2ra;

    /* correction to the radius vector */

    q = -0.025948
	+ 0.004985 * cos (ze)
	- 0.001230 * cosS
	+ 0.003354 * coseta;

    f = 0.005795 * cosS - 0.001165 * sinS + 0.001388 * cos2S;
    q += f * sineta;
    f = 0.001351 * cosS + 0.005702 * sinS + 0.001388 * sin2S;
    q += f * coseta;
    q += 0.000904 * cos2th;
    q += 0.000894 * (costh - cos (3.0 * th));
    e->r += q;

    return (0);
}

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