|
|
1.1 root 1: #include "sky.h"
2:
3: extern struct juptab
4: {
5: float f[6];
6: char c[3];
7: } juptab[];
8:
9: jup()
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, n0;
15: double lsun, elong, ci, dlong;
16: double planp[9];
17: struct juptab *pp = &juptab[0];
18: double olong;
19: double grin;
20: double temp;
21:
22: /*
23: * The arguments nnd coefficients are taken from
24: *
25: * Here are the mean orbital elements.
26: */
27:
28: object = "Jupiter ";
29: ecc = 0.04833748 + 1.63903e-4*capt - 0.4642e-6*capt2 - 1.593e-9*capt3;
30: incl = 1.3086429 - 0.005696*capt + 3.89e-6*capt2;
31: node = 99.4431901 + 1.0105300*capt + 3.522e-4*capt2 - 8.51e-6*capt3;
32: argp = 13.4119487 + 0.21344495*capt + 7.466e-4*capt2 - 3.7946e-6*capt3;
33: anom = 225.3350378 + 0.0830853474*eday - 8.332e-4*capt2 + 3.9876e-6*capt3;
34: motion = .083091212;
35: mrad = 5.202803;
36:
37: incl *= radian;
38: node *= radian;
39: argp *= radian;
40: anom = fmod(anom, 360.)*radian;
41: motion *= radian;
42:
43: /*
44: * Longitudes of perturbing planets,
45: * They are of epoch Jan 0.5, 1900, and are
46: * referred to the fixed qquinox of that date.
47: */
48:
49: q0 = 178.179 + 4.092338817*eday;
50: v0 = 342.767 + 1.602130491*eday;
51: t0 = 99.697 + 0.985609114*eday;
52: m0 = 293.748 + 0.524032950*eday;
53: j0 = 238.050 + 0.083091230*eday;
54: s0 = 266.280 + 0.033459743*eday;
55: u0 = 243.370 + 0.011731421*eday;
56: n0 = 85.183 + 0.005987356*eday;
57:
58: q0 *= radian;
59: v0 *= radian;
60: t0 *= radian;
61: m0 *= radian;
62: j0 *= radian;
63: s0 *= radian;
64: u0 *= radian;
65: n0 *= radian;
66:
67: grin = 5.*s0 - 2.*j0 - 8079.0*radsec*capt;
68:
69: planp[1] = q0;
70: planp[2] = v0;
71: planp[3] = t0;
72: planp[4] = m0;
73: planp[5] = j0;
74: planp[6] = s0;
75: planp[7] = u0;
76: planp[8] = n0;
77:
78: /*
79: * Computation of long period terms affecting the mean anomaly.
80: */
81:
82: anom += 0.
83: +(1192.85-6.076*capt-0.0400*capt2+0.00075*capt3)*radsec*sin(grin)
84: +(-23.80-0.192*capt+0.0226*capt2-0.00080*capt3)*radsec*cos(grin)
85: +(-11.04-0.060*capt-0.0072*capt2+0.00021*capt3)*radsec*sin(2.*grin)
86: +(1.44-0.086*capt+0.0004*capt2+0.00006*capt3)*radsec*cos(2.*grin)
87:
88: + (8.22-0.120*capt-0.002*capt2)*radsec*sin(2.*j0-6.*s0+3.*u0)
89: + (0.55 + 0.420*capt - 0.0079*capt2)*radsec*cos(2.*j0-6.*s0+3.*u0)
90: ;
91:
92: /*
93: * Computation of elliptic orbit.
94: */
95:
96: enom = anom + ecc*sin(anom);
97: do {
98: dele = (anom - enom + ecc * sin(enom)) /
99: (1. - ecc*cos(enom));
100: enom += dele;
101: } while(fabs(dele) > 1.e-8);
102: vnom = 2.*atan2(sqrt((1.+ecc)/(1.-ecc))*sin(enom/2.),
103: cos(enom/2.));
104: rad = mrad*(1. - ecc*cos(enom));
105:
106: /*
107: * Perturbations in longitude.
108: */
109:
110: pturbl = 0.
111: +(-83.79-1.222*capt+0.0097*capt2)*sin(grin-j0)
112: +(137.08-1.508*capt-0.0069*capt2)*cos(grin-j0)
113: ;
114:
115: for(;;){
116: if(pp->c[2]==0){
117: pp++;
118: break;
119: }
120: temp = planp[pp->c[2]]*pp->c[0] + j0*pp->c[1];
121: pturbl += (pp->f[0]+pp->f[1]*capt+pp->f[2]*capt2)*sin(temp)
122: + (pp->f[3]+pp->f[4]*capt+pp->f[5]*capt2)*cos(temp);
123: pp++;
124: }
125:
126: /*
127: * Perturbations in latitude.
128: */
129:
130: pturbb = 0.;
131: /*
132: for(;;){
133: if(pp->f[0]==0.){
134: pp++;
135: break;
136: }
137: pturbb += pp->f[0]*cos(pp->f[1] + pp->c[0]*j0 + pp->c[1]*planp[pp->c[2]]);
138: pp++;
139: }
140: */
141:
142: /*
143: * Perturbations in log radius vector.
144: */
145:
146: pturbr = 0.;
147: /*
148: for(;;){
149: if(pp->f[0]==0.){
150: pp++;
151: break;
152: }
153: pturbr += pp->f[0]*cos(pp->f[1] + pp->c[0]*j0 + pp->c[1]*planp[pp->c[2]]);
154: pp++;
155: }
156: */
157: pturbr *= 1.e-6;
158:
159: /*
160: * reduce to the ecliptic
161: */
162:
163: olong = vnom + argp + pturbl*radsec;
164: nd = olong - node;
165: lambda = node + atan2(sin(nd)*cos(incl), cos(nd));
166:
167: sl = sin(incl)*sin(nd);
168: beta = atan2(sl, sqrt(1.-sl*sl)) + pturbb*radsec;
169:
170: lograd = pturbr*2.30258509;
171: rad *= 1. + lograd;
172:
173: /*
174: * Compute motion for planetary aberration.
175: */
176:
177: temp = motion*mrad*mrad*sqrt(1.-ecc*ecc)/(rad*rad);
178: ldot = temp*sin(2.*(lambda-node))/sin(2.*(olong-node));
179: bdot = temp*sin(incl)*cos(lambda-node);
180: rdot = motion*mrad*ecc*sin(olong-argp)/sqrt(1.-ecc*ecc);
181:
182: /*
183: * Compute magnitude.
184: */
185:
186: mag = -8.93;
187:
188: semi = 98.57;
189:
190: helio();
191: geo();
192:
193: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.