Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#include "astro.h"

void
sat(void)
{
        double pturbl, pturbb, pturbr;
        double lograd;
        double dele, enom, vnom, nd, sl;

        double capj, capn, eye, comg, omg;
        double sb, su, cu, u, b, up;
        double sd, ca, sa;

        ecc = .0558900 - .000347*capt;
        incl = 2.49256 - .0044*capt;
        node = 112.78364 + .87306*capt;
        argp = 91.08897 + 1.95917*capt;
        mrad = 9.538843;
        anom = 175.47630 + .03345972*eday - .56527*capt;
        motion = 120.4550/3600.;

        incl *= radian;
        node *= radian;
        argp *= radian;
        anom = fmod(anom, 360.)*radian;

        enom = anom + ecc*sin(anom);
        do {
                dele = (anom - enom + ecc * sin(enom)) /
                        (1. - ecc*cos(enom));
                enom += dele;
        } while(fabs(dele) > converge);
        vnom = 2.*atan2(sqrt((1.+ecc)/(1.-ecc))*sin(enom/2.),
                cos(enom/2.));
        rad = mrad*(1. - ecc*cos(enom));

        lambda = vnom + argp;
        pturbl = 0.;
        lambda += pturbl*radsec;
        pturbb = 0.;
        pturbr = 0.;

/*
 *      reduce to the ecliptic
 */

        nd = lambda - node;
        lambda = node + atan2(sin(nd)*cos(incl),cos(nd));

        sl = sin(incl)*sin(nd) + pturbb*radsec;
        beta = atan2(sl, pyth(sl));

        lograd = pturbr*2.30258509;
        rad *= 1. + lograd;


        lambda -= 1185.*radsec;
        beta -= 51.*radsec;

        motion *= radian*mrad*mrad/(rad*rad);
        semi = 83.33;

/*
 *      here begins the computation of magnitude
 *      first find the geocentric equatorial coordinates of Saturn
 */

        sd = rad*(cos(beta)*sin(lambda)*sin(obliq) +
                sin(beta)*cos(obliq));
        sa = rad*(cos(beta)*sin(lambda)*cos(obliq) -
                sin(beta)*sin(obliq));
        ca = rad*cos(beta)*cos(lambda);
        sd += zms;
        sa += yms;
        ca += xms;
        alpha = atan2(sa,ca);
        delta = atan2(sd,sqrt(sa*sa+ca*ca));

/*
 *      here are the necessary elements of Saturn's rings
 *      cf. Exp. Supp. p. 363ff.
 */

        capj = 6.9056 - 0.4322*capt;
        capn = 126.3615 + 3.9894*capt + 0.2403*capt2;
        eye = 28.0743 - 0.0128*capt;
        comg = 168.1179 + 1.3936*capt;
        omg = 42.9236 - 2.7390*capt - 0.2344*capt2;

        capj *= radian;
        capn *= radian;
        eye *= radian;
        comg *= radian;
        omg *= radian;

/*
 *      now find saturnicentric ring-plane coords of the earth
 */

        sb = sin(capj)*cos(delta)*sin(alpha-capn) -
                cos(capj)*sin(delta);
        su = cos(capj)*cos(delta)*sin(alpha-capn) +
                sin(capj)*sin(delta);
        cu = cos(delta)*cos(alpha-capn);
        u = atan2(su,cu);
        b = atan2(sb,sqrt(su*su+cu*cu));

/*
 *      and then the saturnicentric ring-plane coords of the sun
 */

        su = sin(eye)*sin(beta) +
                cos(eye)*cos(beta)*sin(lambda-comg);
        cu = cos(beta)*cos(lambda-comg);
        up = atan2(su,cu);

/*
 *      at last, the magnitude
 */


        sb = sin(b);
        mag = -8.68 +2.52*fabs(up+omg-u)-
                2.60*fabs(sb) + 1.25*(sb*sb);

        helio();
        geo();
}