| 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 | } | 
|---|