Annotation of researchv10no/cmd/sky/mars.c, revision 1.1.1.1

1.1       root        1: #include "sky.h"
                      2: 
                      3: extern struct marst
                      4: {
                      5:        float f[2];
                      6:        char c[3];
                      7: } marst[];
                      8: 
                      9: mars()
                     10: {
                     11:        double pturbl, pturbb, pturbr;
                     12:        double lograd;
                     13:        double dele, enom, vnom, nd, sl;
                     14:        double q0, v0, t0, m0, j0 , s0, u0;
                     15:        double lsun, elong, ci, dlong;
                     16:        double planp[8];
                     17:        struct marst *pp = &marst[0];
                     18:        double olong;
                     19:        double temp;
                     20: 
                     21: /*
                     22:  *     The arguments nnd coefficients are taken from
                     23:  *     Simon Newcomb, Tables of the Heliocentric Motion
                     24:  *     of Mars
                     25:  *     A.P.A.E. VI, part 4 (1895).
                     26:  *
                     27:  *     Here are the mean orbital elements.
                     28:  */
                     29: 
                     30:        object = "Mars        ";
                     31:        ecc = .09331290 + .000092064*capt - 0.077e-6*capt2;
                     32:        incl = 1.850333 - 6.75e-4*capt + 12.61e-6*capt2;
                     33:        node = 48.786442 + .770992*capt - 1.39e-6*capt2
                     34:         - 5.33e-6*capt3;
                     35:        argp = 334.218203 + 1.840758*capt + 1.299e-4*capt2
                     36:         - 1.19e-6*capt3;
                     37:        mrad = 1.52368840;
                     38:        anom = 319.529425 + .5240207666*eday + 1.808e-4*capt2
                     39:         + 1.19e-6*capt3;
                     40:        motion = 0.5240711638;
                     41: 
                     42:        incl *= radian;
                     43:        node *= radian;
                     44:        argp *= radian;
                     45:        anom = fmod(anom, 360.)*radian;
                     46:        motion *= radian;
                     47: 
                     48: /*
                     49:  *     Conventional mean anomalies of perturbing planets.
                     50:  */
                     51: 
                     52:        q0 = 102.28  + 4.092334429*eday;
                     53:        v0 = 212.388 + 1.60211831*eday;
                     54:        t0 = 358.415  + .98559696*eday;
                     55:        m0 = 319.530 + .52402078*eday;
                     56:        j0 = 225.209 + .08307904*eday + 0.332*sin((134.4+38.5*capt)*radian);
                     57:        s0 = 175.533 + .03344747*eday - 0.808*sin((134.4+38.5*capt)*radian);
                     58:        u0 = 74.188 + 0.0117193*eday;
                     59: 
                     60:        q0 *= radian;
                     61:        v0 *= radian;
                     62:        t0 *= radian;
                     63:        m0 *= radian;
                     64:        j0 *= radian;
                     65:        s0 *= radian;
                     66:        u0 *= radian;
                     67: 
                     68:        planp[1] = q0;
                     69:        planp[2] = v0;
                     70:        planp[3] = t0;
                     71:        planp[4] = m0;
                     72:        planp[5] = j0;
                     73:        planp[6] = s0;
                     74:        planp[7] = u0;
                     75: 
                     76: /*
                     77:  *     Computation of long period terms affecting the mean anomaly.
                     78:  *             4*mars - 7*earth + 3*venus
                     79:  *             3*jupiter - 8*mars + 4*earth
                     80:  *             2*jupiter - - 6*mars + 3*earth
                     81:  *             2*saturn - 2*mars + earth
                     82:  *             jupiter - 2*mars + earth
                     83:  *             5*saturn - 2*jupiter
                     84:  */
                     85: 
                     86:        anom = anom
                     87:         - (37.05 + 13.50*capt)*radsec
                     88:         + 0.606*radsec*sin((212.87+119.051*capt)*radian)
                     89:         + 52.490*radsec*sin((47.48+19.771*capt)*radian)
                     90:         + 0.319*radsec*sin((116.88+773.444*capt)*radian)
                     91:         + 0.130*radsec*sin((74.00+163.00*capt)*radian)
                     92:         + 0.009*radsec*sin((325.00+753.67*capt)*radian)
                     93:         + 0.280*radsec*sin((300.00+40.8*capt)*radian);
                     94: 
                     95: /*
                     96:  *     Computation of elliptic orbit.
                     97:  */
                     98: 
                     99:        enom = anom + ecc*sin(anom);
                    100:        do {
                    101:                dele = (anom - enom + ecc * sin(enom)) /
                    102:                        (1. - ecc*cos(enom));
                    103:                enom += dele;
                    104:        } while(fabs(dele) > 1.e-8);
                    105:        vnom = 2.*atan2(sqrt((1.+ecc)/(1.-ecc))*sin(enom/2.),
                    106:                        cos(enom/2.));
                    107:        rad = mrad*(1. - ecc*cos(enom));
                    108: 
                    109: /*
                    110:  *     Perturbations in longitude.
                    111:  */
                    112: 
                    113:        pturbl = 0.043*sin(2.*anom);
                    114:        for(;;){
                    115:                if(pp->f[0]==0.){
                    116:                        pp++;
                    117:                        break;
                    118:                }
                    119:                pturbl += pp->f[0]*cos(pp->f[1] + pp->c[0]*m0 + pp->c[1]*planp[pp->c[2]]);
                    120:                pp++;
                    121:        }
                    122: 
                    123: /*
                    124:  *     Perturbations in latitude.
                    125:  */
                    126: 
                    127:        pturbb = 0.;
                    128:        for(;;){
                    129:                if(pp->f[0]==0.){
                    130:                        pp++;
                    131:                        break;
                    132:                }
                    133:                pturbb += pp->f[0]*cos(pp->f[1] + pp->c[0]*m0 + pp->c[1]*planp[pp->c[2]]);
                    134:                pp++;
                    135:        }
                    136: 
                    137: /*
                    138:  *     Perturbations in log radius vector.
                    139:  */
                    140: 
                    141:        pturbr = 0.;
                    142:        for(;;){
                    143:                if(pp->f[0]==0.){
                    144:                        pp++;
                    145:                        break;
                    146:                }
                    147:                pturbr += pp->f[0]*cos(pp->f[1] + pp->c[0]*m0 + pp->c[1]*planp[pp->c[2]]);
                    148:                pp++;
                    149:        }
                    150:        pturbr *= 1.e-6;
                    151: 
                    152: /*
                    153:  *     reduce to the ecliptic
                    154:  */
                    155: 
                    156:        olong = vnom + argp + pturbl*radsec;
                    157:        nd = olong - node;
                    158:        lambda = node + atan2(sin(nd)*cos(incl), cos(nd));
                    159: 
                    160:        sl = sin(incl)*sin(nd);
                    161:        beta = atan2(sl, sqrt(1.-sl*sl)) + pturbb*radsec;
                    162: 
                    163:        lograd = pturbr*2.30258509;
                    164:        rad *= 1. + lograd;
                    165: 
                    166: /*
                    167:  *     Compute motion for planetary aberration.
                    168:  */
                    169: 
                    170:        temp = motion*mrad*mrad*sqrt(1.-ecc*ecc)/(rad*rad);
                    171:        ldot = temp*sin(2.*(lambda-node))/sin(2.*(olong-node));
                    172:        bdot = temp*sin(incl)*cos(lambda-node);
                    173:        rdot = motion*mrad*ecc*sin(olong-argp)/sqrt(1.-ecc*ecc);
                    174: 
                    175: /*
                    176:  *     Compute magnitude.
                    177:  */
                    178: 
                    179:        lsun = 99.696678 + 0.9856473354*eday;
                    180:        lsun *= radian;
                    181:        elong = lambda - lsun;
                    182:        ci = (rad - cos(elong))/sqrt(1. + rad*rad - 2.*rad*cos(elong));
                    183:        dlong = atan2(sqrt(1.-ci*ci), ci)/radian;
                    184:        mag = -1.30 + .01486*dlong;
                    185: 
                    186:        semi = 4.68;
                    187: 
                    188:        helio();
                    189:        geo();
                    190: 
                    191: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.