Annotation of researchv10no/cmd/sky/mars.c, revision 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.