55 #define MILLIARCSECx10_TO_RAD (PI / (180.0 * 3600.0 * 10000.0))
91 LOCAL const Fcoeffs coeffs[NUM_TERMS] =
209 LOCAL const PEcoeffs pec[NUM_TERMS] = {
210 {-171996.0, -174.2, 92025.0, 8.9 },
211 {-13187.0, -1.6, 5736.0, -3.1 },
212 {-2274.0, -0.2, 977.0, -0.5 },
213 { 2062.0, 0.2, -895.0, 0.5 },
214 { 1426.0, -3.4, 54.0, -0.1 },
215 { 712.0, 0.1, -7.0, 0.0 },
216 { -517.0, 1.2, 224.0, -0.6 },
217 { -386.0, -0.4, 200.0, 0.0 },
218 { -301.0, 0.0, 129.0, -0.1 },
219 { 217.0, -0.5, -95.0, 0.3 },
220 { -158.0, 0.0, -1.0, 0.0 },
221 { 129.0, 0.1, -70.0, 0.0 },
222 { 123.0, 0.0, -53.0, 0.0 },
223 { 63.0, 0.0, -2.0, 0.0 },
224 { 63.0, 0.1, -33.0, 0.0 },
225 { -59.0, 0.0, 26.0, 0.0 },
226 { -58.0, -0.1, 32.0, 0.0 },
227 { -51.0, 0.0, 27.0, 0.0 },
228 { 48.0, 0.0, 1.0, 0.0 },
229 { 46.0, 0.0, -24.0, 0.0 },
230 { -38.0, 0.0, 16.0, 0.0 },
231 { -31.0, 0.0, 13.0, 0.0 },
232 { 29.0, 0.0, -1.0, 0.0 },
233 { 29.0, 0.0, -12.0, 0.0 },
234 { 26.0, 0.0, -1.0, 0.0 },
235 { -22.0, 0.0, 0.0, 0.0 },
236 { 21.0, 0.0, -10.0, 0.0 },
237 { 17.0, -0.1, 0.0, 0.0 },
238 { 16.0, 0.0, -8.0, 0.0 },
239 { -16.0, 0.1, 7.0, 0.0 },
240 { -15.0, 0.0, 9.0, 0.0 },
241 { -13.0, 0.0, 7.0, 0.0 },
242 { -12.0, 0.0, 6.0, 0.0 },
243 { 11.0, 0.0, 0.0, 0.0 },
244 { -10.0, 0.0, 5.0, 0.0 },
246 { -8.0, 0.0, 3.0, 0.0 },
247 { -7.0, 0.0, 0.0, 0.0 },
248 { 7.0, 0.0, -3.0, 0.0 },
249 { -7.0, 0.0, 3.0, 0.0 },
250 { -7.0, 0.0, 3.0, 0.0 },
252 { -6.0, 0.0, 3.0, 0.0 },
253 { 6.0, 0.0, 0.0, 0.0 },
254 { 6.0, 0.0, -3.0, 0.0 },
255 { -6.0, 0.0, 3.0, 0.0 },
256 { 6.0, 0.0, -3.0, 0.0 },
258 { -5.0, 0.0, 3.0, 0.0 },
259 { -5.0, 0.0, 3.0, 0.0 },
260 { 5.0, 0.0, 0.0, 0.0 },
261 { -5.0, 0.0, 3.0, 0.0 },
263 { 4.0, 0.0, -2.0, 0.0 },
264 { 4.0, 0.0, -2.0, 0.0 },
265 { -4.0, 0.0, 0.0, 0.0 },
266 { -4.0, 0.0, 0.0, 0.0 },
267 { 4.0, 0.0, 0.0, 0.0 },
268 { -4.0, 0.0, 0.0, 0.0 },
270 { -3.0, 0.0, 1.0, 0.0 },
271 { -3.0, 0.0, 0.0, 0.0 },
272 { -3.0, 0.0, 0.0, 0.0 },
273 { 3.0, 0.0, 0.0, 0.0 },
274 { -3.0, 0.0, 1.0, 0.0 },
275 { -3.0, 0.0, 1.0, 0.0 },
276 { -3.0, 0.0, 1.0, 0.0 },
277 { -3.0, 0.0, 1.0, 0.0 },
279 { -2.0, 0.0, 1.0, 0.0 },
280 { -2.0, 0.0, 1.0, 0.0 },
281 { 2.0, 0.0, -1.0, 0.0 },
282 { -2.0, 0.0, 1.0, 0.0 },
283 { 2.0, 0.0, -1.0, 0.0 },
284 { -2.0, 0.0, 1.0, 0.0 },
285 { 2.0, 0.0, 0.0, 0.0 },
286 { 2.0, 0.0, -1.0, 0.0 },
287 { -2.0, 0.0, 1.0, 0.0 },
289 { 1.0, 0.0, 0.0, 0.0 },
290 { 1.0, 0.0, 0.0, 0.0 },
291 { 1.0, 0.0, 0.0, 0.0 },
292 { -1.0, 0.0, 0.0, 0.0 },
293 { 1.0, 0.0, 0.0, 0.0 },
294 { 1.0, 0.0, 0.0, 0.0 },
295 { -1.0, 0.0, 0.0, 0.0 },
297 { 1.0, 0.0, -1.0, 0.0 },
298 { -1.0, 0.0, 0.0, 0.0 },
299 { 1.0, 0.0, -1.0, 0.0 },
300 { -1.0, 0.0, 0.0, 0.0 },
301 { 1.0, 0.0, -1.0, 0.0 },
302 { -1.0, 0.0, 1.0, 0.0 },
303 { -1.0, 0.0, 1.0, 0.0 },
304 { 1.0, 0.0, 0.0, 0.0 },
305 { 1.0, 0.0, 0.0, 0.0 },
306 { 1.0, 0.0, -1.0, 0.0 },
307 { -1.0, 0.0, 0.0, 0.0 },
308 { -1.0, 0.0, 0.0, 0.0 },
309 { 1.0, 0.0, 0.0, 0.0 },
310 { 1.0, 0.0, 0.0, 0.0 },
311 { -1.0, 0.0, 0.0, 0.0 },
312 { 1.0, 0.0, 0.0, 0.0 },
313 { 1.0, 0.0, 0.0, 0.0 },
314 { -1.0, 0.0, 0.0, 0.0 },
315 { -1.0, 0.0, 0.0, 0.0 },
316 { -1.0, 0.0, 0.0, 0.0 },
317 { -1.0, 0.0, 0.0, 0.0 },
318 { -1.0, 0.0, 0.0, 0.0 },
319 { -1.0, 0.0, 0.0, 0.0 },
320 { -1.0, 0.0, 0.0, 0.0 },
321 { 1.0, 0.0, 0.0, 0.0 },
322 { -1.0, 0.0, 0.0, 0.0 },
323 { 1.0, 0.0, 0.0, 0.0 }
326 LOCAL const int nTerms[] = { NUM_TERMS, 72, 63, 49, 35 };
355 const double eta0_as = -19.9 / 1000.0;
356 const double xi0_as = 9.1 / 1000.0;
357 const double dAlpha0_as = -22.9 / 1000.0;
419 t0Sq = t0_cy * t0_cy;
422 temp_as = (2306.2181 + 1.39656 * t0_cy - 0.000139 * t0Sq) * t
423 + (0.30188 - 0.000344 * t0_cy) * tSq + 0.017998 * tCu;
426 temp_as = (2306.2181 + 1.39656 * t0_cy - 0.000139 * t0Sq) * t
427 + (1.09468 + 0.000066 * t0_cy) * tSq + 0.018203 * tCu;
430 temp_as = (2004.3109 - 0.85330 * t0_cy - 0.000217 * t0Sq) * t
431 - (0.42665 + 0.000217 * t0_cy) * tSq - 0.041833 * tCu;
544 const double Revs2Arcsec = 1296000.0;
556 double psiSum_masx10;
557 double epsSum_masx10;
563 if (precision < 0) { precision = 0; }
569 d =
arcsecToRad(1072261.307 + (1236.0 * Revs2Arcsec + 1105601.328
570 + (-6.891 + 0.019 * t_cy) * t_cy) * t_cy);
577 lp =
arcsecToRad(1287099.804 + (99.0 * Revs2Arcsec + 1292581.224
578 + (-0.577 - 0.012 * t_cy) * t_cy) * t_cy);
585 l =
arcsecToRad(485866.733 + (1325.0 * Revs2Arcsec + 715922.633
586 + (31.31 + 0.064 * t_cy) * t_cy) * t_cy);
593 f =
arcsecToRad(335778.877 + (1342.0 * Revs2Arcsec + 295263.137
594 + (-13.257 + 0.011 * t_cy) * t_cy) * t_cy);
602 om =
arcsecToRad(450160.28 + (-5.0 * Revs2Arcsec - 482890.539
603 + (7.455 + 0.008 * t_cy) * t_cy) * t_cy);
613 for (i = nTerms[precision] - 1; i >= 0; i--) {
614 a_rad = d * coeffs[i].cd + lp * coeffs[i].clp + l * coeffs[i].cl
615 + f * coeffs[i].cf + om * coeffs[i].com;
616 psiSum_masx10 += sin(a_rad) * (pec[i].ps1 + t_cy * pec[i].ps2);
619 if (pec[i].ep1 != 0.0) {
620 epsSum_masx10 += cos(a_rad) * (pec[i].ep1 + t_cy * pec[i].ep2);
625 nut->
dPsi_rad = psiSum_masx10 * MILLIARCSECx10_TO_RAD;
626 nut->
dEps_rad = epsSum_masx10 * MILLIARCSECx10_TO_RAD;
666 + (-46.8150 + (-0.00059 + 0.001813 * t_cy) * t_cy) * t_cy;
792 const double B1 =
secToRad(8640184.812866);
793 const double B2 =
secToRad(0.093104);
794 const double B3 =
secToRad(-6.2e-6);
801 dayfrac = du - floor(du);
803 gmst_rad = B0 + (tu * (B1 + (tu * (B2 + (tu * B3))))) + dayfrac *
TWOPI;