1 | // tsid.cc
|
---|
2 | // Eric Aubourg CEA/DAPNIA/SPP aout 1999
|
---|
3 | // adapted from TSid.java, E. Aubourg 1998.
|
---|
4 |
|
---|
5 | #include "tsid.h"
|
---|
6 |
|
---|
7 | const double TSid::SIDRATE = 0.9972695677;
|
---|
8 | const double TSid::MJDRef = 1545; // 1/1/2000, 12h UT1
|
---|
9 |
|
---|
10 | TSid::TSid(double lg)
|
---|
11 | : longitude(lg)
|
---|
12 | {
|
---|
13 | InitDUT();
|
---|
14 | }
|
---|
15 |
|
---|
16 | void TSid::InitDUT() {
|
---|
17 | dut1[1270.5] = 0.60846; // 1999,3,2 (april, 2 1999)
|
---|
18 | dut1[1299.5] = 0.57975; // 1999,4,1
|
---|
19 | dut1[1330.5] = 0.55305; // 1999,5,1
|
---|
20 | dut1[1360.5] = 0.54229; // 1999,6,1
|
---|
21 | dut1[1391.5] = 0.53916; // 1999,7,1
|
---|
22 | dut1[1422.5] = 0.52822; // 1999,8,1
|
---|
23 | dut1[1452.5] = 0.50279; // 1999,9,1
|
---|
24 | dut1[1483.5] = 0.46517; // 1999,10,1
|
---|
25 | dut1[1513.5] = 0.42700; // 1999,11,1
|
---|
26 | dut1[1544.5] = 0.39116; // 2000,0,1
|
---|
27 | dut1[1575.5] = 0.35876; // 2000,1,1
|
---|
28 | dut1[1604.5] = 0.30979; // 2000,2,1
|
---|
29 | dut1[1635.5] = 0.25614; // 2000,3,1
|
---|
30 | }
|
---|
31 |
|
---|
32 | double TSid::getDUT1(double mjd) {
|
---|
33 | map<double, double>::iterator i = dut1.upper_bound(mjd);
|
---|
34 | if (i==dut1.end() || i==dut1.begin()) return -1;
|
---|
35 | map<double, double>::iterator j = i; j--;
|
---|
36 | double x = (mjd - (*j).first) / ((*i).first - (*j).first);
|
---|
37 | return (1-x)*(*j).second + x * (*i).second;
|
---|
38 | }
|
---|
39 |
|
---|
40 | void TSid::setLongitude(double lg) {
|
---|
41 | longitude = lg;
|
---|
42 | }
|
---|
43 |
|
---|
44 | double TSid::getLST(double mjd) {
|
---|
45 | double dut1 = getDUT1(mjd);
|
---|
46 | double T = ((mjd-MJDRef) + dut1/86400.)/36525.;
|
---|
47 | // T = siecles julien depuis 1/1/2000, 12h UT1
|
---|
48 | double GMST = 24110.54841 + 8640184.812866 * T +
|
---|
49 | 0.093104 * T * T - 0.0000062 * T * T * T; // a 0h UT1
|
---|
50 | GMST += ((mjd-.5 - (int)(mjd-.5))*86400. + dut1);
|
---|
51 | double LST = GMST + (longitude/15. * 3600.);
|
---|
52 | LST -= 86400 * int(LST/86400);
|
---|
53 | if (LST<0) LST += 86400.;
|
---|
54 | return LST;
|
---|
55 | } |
---|