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