summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander V. Wolf <alex.v.wolf@gmail.com>2022-01-14 00:35:00 +0700
committerAlexander V. Wolf <alex.v.wolf@gmail.com>2022-01-14 00:35:00 +0700
commit93a1b252ae4ec0d5c903d58497a8a887f3569eb5 (patch)
tree52b9a2cc7bb838104d14de876564aeafed106674
parent965210dbd6e34a856eda802305f065222cd2fe75 (diff)
Fixed Stephenson, Morrison & Hohenkerk solution for DeltaT
- This solution by F. R. Stephenson, L. V. Morrison and C. Y. Hohenkerk (2016) was published in "Measurement of the Earth’s rotation: 720 BC to AD 2015" (2016) and updated in "Addendum 2020 to 'Measurement of the Earth's Rotation: 720 BC to AD 2015'" (Morrison, L. V., Stephenson, F.R., Hohenkerk, C.Y. and Zawilski, M.; 2021). Outside of the named range (modelled with a spline fit) it provides values from an approximate parabola. - The updated test data was obtained from http://astro.ukho.gov.uk/nao/lvm/ - Updated related unit tests
-rw-r--r--src/core/StelCore.cpp4
-rw-r--r--src/core/StelCore.hpp2
-rw-r--r--src/core/StelUtils.cpp125
-rw-r--r--src/core/StelUtils.hpp11
-rw-r--r--src/gui/ConfigurationDialog.cpp2
-rw-r--r--src/tests/testDeltaT.cpp355
-rw-r--r--src/tests/testDeltaT.hpp1
7 files changed, 288 insertions, 212 deletions
diff --git a/src/core/StelCore.cpp b/src/core/StelCore.cpp
index 382c8eb654..c240da6864 100644
--- a/src/core/StelCore.cpp
+++ b/src/core/StelCore.cpp
@@ -2226,7 +2226,7 @@ void StelCore::setCurrentDeltaTAlgorithm(DeltaTAlgorithm algorithm)
deltaTnDot = -25.82; // n.dot = -25.82 "/cy/cy
deltaTfunc=StelUtils::getDeltaTByStephensonMorrisonHohenkerk2016;
deltaTstart = -720;
- deltaTfinish = 2015;
+ deltaTfinish = 2019;
break;
case Henriksson2017:
// Henriksson solution (2017) for Schoch formula for DeltaT (1931)
@@ -2378,7 +2378,7 @@ QString StelCore::getCurrentDeltaTAlgorithmDescription(void) const
description = q_("This polynomial approximation with 0.6 seconds of accuracy by M. Khalid, Mariam Sultana and Faheem Zaidi was published in <em>Delta T: Polynomial Approximation of Time Period 1620-2013</em> (%1).").arg("<a href='https://doi.org/10.1155/2014/480964'>2014</a>").append(getCurrentDeltaTAlgorithmValidRangeDescription(jd, &marker));
break;
case StephensonMorrisonHohenkerk2016: // PRIMARY SOURCE, SEEMS VERY IMPORTANT
- description = q_("This solution by F. R. Stephenson, L. V. Morrison and C. Y. Hohenkerk (2016) was published in <em>Measurement of the Earth’s rotation: 720 BC to AD 2015</em> (%1). Outside of the named range (modelled with a spline fit) it provides values from an approximate parabola.").arg("<a href='https://doi.org/10.1098/rspa.2016.0404'>2016</a>").append(getCurrentDeltaTAlgorithmValidRangeDescription(jd, &marker));
+ description = q_("This solution by F. R. Stephenson, L. V. Morrison and C. Y. Hohenkerk (2016) was published in <em>Measurement of the Earth’s rotation: 720 BC to AD 2015</em> (%1) and updated in <em>Addendum 2020 to 'Measurement of the Earth's Rotation: 720 BC to AD 2015'</em> (Morrison, L. V., Stephenson, F.R., Hohenkerk, C.Y. and Zawilski, M.; %2). Outside of the named range (modelled with a spline fit) it provides values from an approximate parabola.").arg("<a href='https://doi.org/10.1098/rspa.2016.0404'>2016</a>", "<a href='https://doi.org/10.1098/rspa.2020.0776'>2021</a>").append(getCurrentDeltaTAlgorithmValidRangeDescription(jd, &marker));
break;
case Henriksson2017:
description = q_("This solution by G. Henriksson was published in the article <em>The Acceleration of the Moon and the Universe - the Mass of the Graviton</em> (%1) and based on C. Schoch's formula (1931).").arg("<a href='https://doi.org/10.22606/adap.2017.23004'>2017</a>").append(getCurrentDeltaTAlgorithmValidRangeDescription(jd, &marker));
diff --git a/src/core/StelCore.hpp b/src/core/StelCore.hpp
index 4d782e38de..71ce035392 100644
--- a/src/core/StelCore.hpp
+++ b/src/core/StelCore.hpp
@@ -145,7 +145,7 @@ public:
Banjevic, //!< Banjevic (2006) algorithm for DeltaT
IslamSadiqQureshi, //!< Islam, Sadiq & Qureshi (2008 + revisited 2013) algorithm for DeltaT (6 polynomials)
KhalidSultanaZaidi, //!< M. Khalid, Mariam Sultana and Faheem Zaidi polynomial approximation of time period 1620-2013 (2014)
- StephensonMorrisonHohenkerk2016, //!< Stephenson, Morrison, Hohenkerk (2016) RSPA paper provides spline fit to observations for -720..2016 and else parabolic fit.
+ StephensonMorrisonHohenkerk2016, //!< Stephenson, Morrison, Hohenkerk (2016) RSPA paper provides spline fit to observations for -720..2019 and else parabolic fit.
Henriksson2017, //!< Henriksson (2017) algorithm for DeltaT (The solution for Schoch formula for DeltaT (1931), but with ndot=-30.128"/cy^2)
Custom //!< User defined coefficients for quadratic equation for DeltaT
};
diff --git a/src/core/StelUtils.cpp b/src/core/StelUtils.cpp
index ce60c57bb4..d2e8d04e51 100644
--- a/src/core/StelUtils.cpp
+++ b/src/core/StelUtils.cpp
@@ -1881,78 +1881,85 @@ double getDeltaTByKhalidSultanaZaidi(const double jDay)
return (((a4[i]*u + a3[i])*u + a2[i])*u + a1[i])*u + a0[i];
}
-static const double StephensonMorrisonHohenkerk2016DeltaTtableS15[54][6]={
+static const double StephensonMorrisonHohenkerk2016DeltaTtableS15[58][6]={
+// Table S15: The Polynomial Coefficients for DT -720.0 to 2019.0 v. 2020
+// Source: http://astro.ukho.gov.uk/nao/lvm/Table-S15.2020.txt
// Row Years Polynomial Coefficients
-// i K_i K_{i+1} a_0 a_1 a_2 a_3
+// i K_i K_{i+1} a_0 a_1 a_2 a_3
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-/* 1 */ {-720.0, 400.0, 20550.593, -21268.478, 11863.418, -4541.129},
-/* 2 */ { 400.0, 1000.0, 6604.404, -5981.266, -505.093, 1349.609},
-/* 3 */ {1000.0, 1500.0, 1467.654, -2452.187, 2460.927, -1183.759},
-/* 4 */ {1500.0, 1600.0, 292.635, -216.322, -43.614, 56.681},
-/* 5 */ {1600.0, 1650.0, 89.380, -66.754, 31.607, -10.497},
-/* 6 */ {1650.0, 1720.0, 43.736, -49.043, 0.227, 15.811},
-/* 7 */ {1720.0, 1800.0, 10.730, -1.321, 62.250, -52.946},
-/* 8 */ {1800.0, 1810.0, 18.714, -4.457, -1.509, 2.507},
-/* 9 */ {1810.0, 1820.0, 15.255, 0.046, 6.012, -4.634},
-/* 10 */ {1820.0, 1830.0, 16.679, -1.831, -7.889, 3.799},
-/* 11 */ {1830.0, 1840.0, 10.758, -6.211, 3.509, -0.388},
-/* 12 */ {1840.0, 1850.0, 7.668, -0.357, 2.345, -0.338},
-/* 13 */ {1850.0, 1855.0, 9.317, 1.659, 0.332, -0.932},
-/* 14 */ {1855.0, 1860.0, 10.376, -0.472, -2.463, 1.596},
-/* 15 */ {1860.0, 1865.0, 9.038, -0.610, 2.325, -2.497},
-/* 16 */ {1865.0, 1870.0, 8.256, -3.450, -5.166, 2.729},
-/* 17 */ {1870.0, 1875.0, 2.369, -5.596, 3.020, -0.919},
-/* 18 */ {1875.0, 1880.0, -1.126, -2.312, 0.264, -0.037},
-/* 19 */ {1880.0, 1885.0, -3.211, -1.894, 0.154, 0.562},
-/* 20 */ {1885.0, 1890.0, -4.388, 0.101, 1.841, -1.438},
-/* 21 */ {1890.0, 1895.0, -3.884, -0.531, -2.473, 1.870},
-/* 22 */ {1895.0, 1900.0, -5.017, 0.134, 3.138, -0.232},
-/* 23 */ {1900.0, 1905.0, -1.977, 5.715, 2.443, -1.257},
-/* 24 */ {1905.0, 1910.0, 4.923, 6.828, -1.329, 0.720},
-/* 25 */ {1910.0, 1915.0, 11.142, 6.330, 0.831, -0.825},
-/* 26 */ {1915.0, 1920.0, 17.479, 5.518, -1.643, 0.262},
-/* 27 */ {1920.0, 1925.0, 21.617, 3.020, -0.856, 0.008},
-/* 28 */ {1925.0, 1930.0, 23.789, 1.333, -0.831, 0.127},
-/* 29 */ {1930.0, 1935.0, 24.418, 0.052, -0.449, 0.142},
-/* 30 */ {1935.0, 1940.0, 24.164, -0.419, -0.022, 0.702},
-/* 31 */ {1940.0, 1945.0, 24.426, 1.645, 2.086, -1.106},
-/* 32 */ {1945.0, 1950.0, 27.050, 2.499, -1.232, 0.614},
-/* 33 */ {1950.0, 1953.0, 28.932, 1.127, 0.220, -0.277},
-/* 34 */ {1953.0, 1956.0, 30.002, 0.737, -0.610, 0.631},
-/* 35 */ {1956.0, 1959.0, 30.760, 1.409, 1.282, -0.799},
-/* 36 */ {1959.0, 1962.0, 32.652, 1.577, -1.115, 0.507},
-/* 37 */ {1962.0, 1965.0, 33.621, 0.868, 0.406, 0.199},
-/* 38 */ {1965.0, 1968.0, 35.093, 2.275, 1.002, -0.414},
-/* 39 */ {1968.0, 1971.0, 37.956, 3.035, -0.242, 0.202},
-/* 40 */ {1971.0, 1974.0, 40.951, 3.157, 0.364, -0.229},
-/* 41 */ {1974.0, 1977.0, 44.244, 3.198, -0.323, 0.172},
-/* 42 */ {1977.0, 1980.0, 47.291, 3.069, 0.193, -0.192},
-/* 43 */ {1980.0, 1983.0, 50.361, 2.878, -0.384, 0.081},
-/* 44 */ {1983.0, 1986.0, 52.936, 2.354, -0.140, -0.166},
-/* 45 */ {1986.0, 1989.0, 54.984, 1.577, -0.637, 0.448},
-/* 46 */ {1989.0, 1992.0, 56.373, 1.649, 0.709, -0.277},
-/* 47 */ {1992.0, 1995.0, 58.453, 2.235, -0.122, 0.111},
-/* 48 */ {1995.0, 1998.0, 60.677, 2.324, 0.212, -0.315},
-/* 49 */ {1998.0, 2001.0, 62.899, 1.804, -0.732, 0.112},
-/* 50 */ {2001.0, 2004.0, 64.082, 0.675, -0.396, 0.193},
-/* 51 */ {2004.0, 2007.0, 64.555, 0.463, 0.184, -0.008},
-/* 52 */ {2007.0, 2010.0, 65.194, 0.809, 0.161, -0.101},
-/* 53 */ {2010.0, 2013.0, 66.063, 0.828, -0.142, 0.168},
-/* 54 */ {2013.0, 2016.0, 66.917, 1.046, 0.360, -0.282}
+/* 1 */ { -720.0, -100.0, 20371.848, -9999.586, 776.247, 409.160 },
+/* 2 */ { -100.0, 400.0, 11557.668, -5822.270, 1303.151, -503.433 },
+/* 3 */ { 400.0, 1000.0, 6535.116, -5671.519, -298.291, 1085.087 },
+/* 4 */ { 1000.0, 1150.0, 1650.393, -753.210, 184.811, -25.346 },
+/* 5 */ { 1150.0, 1300.0, 1056.647, -459.628, 108.771, -24.641 },
+/* 6 */ { 1300.0, 1500.0, 681.149, -421.345, 61.953, -29.414 },
+/* 7 */ { 1500.0, 1600.0, 292.343, -192.841, -6.572, 16.197 },
+/* 8 */ { 1600.0, 1650.0, 109.127, -78.697, 10.505, 3.018 },
+/* 9 */ { 1650.0, 1720.0, 43.952, -68.089, 38.333, -2.127 },
+/* 10 */ { 1720.0, 1800.0, 12.068, 2.507, 41.731, -37.939 },
+/* 11 */ { 1800.0, 1810.0, 18.367, -3.481, -1.126, 1.918 },
+/* 12 */ { 1810.0, 1820.0, 15.678, 0.021, 4.629, -3.812 },
+/* 13 */ { 1820.0, 1830.0, 16.516, -2.157, -6.806, 3.250 },
+/* 14 */ { 1830.0, 1840.0, 10.804, -6.018, 2.944, -0.096 },
+/* 15 */ { 1840.0, 1850.0, 7.634, -0.416, 2.658, -0.539 },
+/* 16 */ { 1850.0, 1855.0, 9.338, 1.642, 0.261, -0.883 },
+/* 17 */ { 1855.0, 1860.0, 10.357, -0.486, -2.389, 1.558 },
+/* 18 */ { 1860.0, 1865.0, 9.040, -0.591, 2.284, -2.477 },
+/* 19 */ { 1865.0, 1870.0, 8.255, -3.456, -5.148, 2.720 },
+/* 20 */ { 1870.0, 1875.0, 2.371, -5.593, 3.011, -0.914 },
+/* 21 */ { 1875.0, 1880.0, -1.126, -2.314, 0.269, -0.039 },
+/* 22 */ { 1880.0, 1885.0, -3.210, -1.893, 0.152, 0.563 },
+/* 23 */ { 1885.0, 1890.0, -4.388, 0.101, 1.842, -1.438 },
+/* 24 */ { 1890.0, 1895.0, -3.884, -0.531, -2.474, 1.871 },
+/* 25 */ { 1895.0, 1900.0, -5.017, 0.134, 3.138, -0.232 },
+/* 26 */ { 1900.0, 1905.0, -1.977, 5.715, 2.443, -1.257 },
+/* 27 */ { 1905.0, 1910.0, 4.923, 6.828, -1.329, 0.720 },
+/* 28 */ { 1910.0, 1915.0, 11.142, 6.330, 0.831, -0.825 },
+/* 29 */ { 1915.0, 1920.0, 17.479, 5.518, -1.643, 0.262 },
+/* 30 */ { 1920.0, 1925.0, 21.617, 3.020, -0.856, 0.008 },
+/* 31 */ { 1925.0, 1930.0, 23.789, 1.333, -0.831, 0.127 },
+/* 32 */ { 1930.0, 1935.0, 24.418, 0.052, -0.449, 0.142 },
+/* 33 */ { 1935.0, 1940.0, 24.164, -0.419, -0.022, 0.702 },
+/* 34 */ { 1940.0, 1945.0, 24.426, 1.645, 2.086, -1.106 },
+/* 35 */ { 1945.0, 1950.0, 27.050, 2.499, -1.232, 0.614 },
+/* 36 */ { 1950.0, 1953.0, 28.932, 1.127, 0.220, -0.277 },
+/* 37 */ { 1953.0, 1956.0, 30.002, 0.737, -0.610, 0.631 },
+/* 38 */ { 1956.0, 1959.0, 30.760, 1.409, 1.282, -0.799 },
+/* 39 */ { 1959.0, 1962.0, 32.652, 1.577, -1.115, 0.507 },
+/* 40 */ { 1962.0, 1965.0, 33.621, 0.868, 0.406, 0.199 },
+/* 41 */ { 1965.0, 1968.0, 35.093, 2.275, 1.002, -0.414 },
+/* 42 */ { 1968.0, 1971.0, 37.956, 3.035, -0.242, 0.202 },
+/* 43 */ { 1971.0, 1974.0, 40.951, 3.157, 0.364, -0.229 },
+/* 44 */ { 1974.0, 1977.0, 44.244, 3.199, -0.323, 0.172 },
+/* 45 */ { 1977.0, 1980.0, 47.291, 3.069, 0.193, -0.192 },
+/* 46 */ { 1980.0, 1983.0, 50.361, 2.878, -0.384, 0.081 },
+/* 47 */ { 1983.0, 1986.0, 52.936, 2.354, -0.140, -0.165 },
+/* 48 */ { 1986.0, 1989.0, 54.984, 1.577, -0.637, 0.448 },
+/* 49 */ { 1989.0, 1992.0, 56.373, 1.648, 0.708, -0.276 },
+/* 50 */ { 1992.0, 1995.0, 58.453, 2.235, -0.121, 0.110 },
+/* 51 */ { 1995.0, 1998.0, 60.678, 2.324, 0.210, -0.313 },
+/* 52 */ { 1998.0, 2001.0, 62.898, 1.804, -0.729, 0.109 },
+/* 53 */ { 2001.0, 2004.0, 64.083, 0.674, -0.402, 0.199 },
+/* 54 */ { 2004.0, 2007.0, 64.553, 0.466, 0.194, -0.017 },
+/* 55 */ { 2007.0, 2010.0, 65.197, 0.804, 0.144, -0.084 },
+/* 56 */ { 2010.0, 2013.0, 66.061, 0.839, -0.109, 0.128 },
+/* 57 */ { 2013.0, 2016.0, 66.920, 1.007, 0.277, -0.095 },
+/* 58 */ { 2016.0, 2019.0, 68.109, 1.277, -0.007, -0.139 }
};
double getDeltaTByStephensonMorrisonHohenkerk2016(const double jDay)
{
int year, month, day;
getDateFromJulianDay(jDay, &year, &month, &day);
double y=yearFraction(year, month, day);
- if ((y<-720.) || (y>2016.))
+ if ((y<-720.) || (y>2019.))
{
double fact=(y-1825.0)/100.;
- return -320.0+32.5*fact*fact;
+ //return -320.0+32.5*fact*fact;
+ return -10+31.4*fact*fact;
}
int i=0;
while (StephensonMorrisonHohenkerk2016DeltaTtableS15[i][1]<y) i++;
- Q_ASSERT(i<54);
+ Q_ASSERT(i<58);
double t=(y-StephensonMorrisonHohenkerk2016DeltaTtableS15[i][0]) / (StephensonMorrisonHohenkerk2016DeltaTtableS15[i][1]-StephensonMorrisonHohenkerk2016DeltaTtableS15[i][0]);
return ((StephensonMorrisonHohenkerk2016DeltaTtableS15[i][5]*t + StephensonMorrisonHohenkerk2016DeltaTtableS15[i][4])*t
+ StephensonMorrisonHohenkerk2016DeltaTtableS15[i][3])*t + StephensonMorrisonHohenkerk2016DeltaTtableS15[i][2];
diff --git a/src/core/StelUtils.hpp b/src/core/StelUtils.hpp
index c32035cbbb..fe215b67d2 100644
--- a/src/core/StelUtils.hpp
+++ b/src/core/StelUtils.hpp
@@ -795,10 +795,15 @@ namespace StelUtils
double getDeltaTByKhalidSultanaZaidi(const double jDay);
//! Get Delta-T estimation for a given date.
- //! Implementation of a spline approximation for time period -720-2016.0 for DeltaT by Stephenson, Morrison and Hohenkerk (2016).
- //! Source: Measurement of the Earth’s rotation: 720 BC to AD 2015
- //! Proc. R. Soc. A 472: 20160404.
+ //! Implementation of a spline approximation for time period -720-2019.0 for DeltaT by Stephenson, Morrison and Hohenkerk (2016).
+ //! Source: Measurement of the Earth's rotation: 720 BC to AD 2015, published in 2016 in the Royal Society's
+ //! Proceedings A 472, and made freely available via Open Access, by Stephenson, F.R., Morrison, L.V. and
+ //! Hohenkerk, C.Y..
//! https://doi.org/10.1098/rspa.2016.0404
+ //! Addendum 2020 to "Measurement of the Earth's Rotation: 720 BC to AD 2015", published in 2021 February
+ //! in the Royal Society's Proceedings A 478, by Morrison, L. V., Stephenson, F.R., Hohenkerk, C.Y. and
+ //! M. Zawilski, M..
+ //! https://doi.org/10.1098/rspa.2020.0776
//! @param jDay the date and time expressed as a Julian day
//! @return Delta-T in seconds. For times outside the limits, return result from the fitting parabola.
double getDeltaTByStephensonMorrisonHohenkerk2016(const double jDay);
diff --git a/src/gui/ConfigurationDialog.cpp b/src/gui/ConfigurationDialog.cpp
index 9762e7b54c..0ae75418bc 100644
--- a/src/gui/ConfigurationDialog.cpp
+++ b/src/gui/ConfigurationDialog.cpp
@@ -1822,7 +1822,7 @@ void ConfigurationDialog::populateDeltaTAlgorithmsList()
algorithms->addItem(q_("JPL Horizons"), "JPLHorizons");
algorithms->addItem(q_("Meeus & Simons (2000)"), "MeeusSimons");
algorithms->addItem(q_("Morrison & Stephenson (2004, 2005)"), "MorrisonStephenson2004");
- algorithms->addItem(q_("Stephenson, Morrison & Hohenkerk (2016)"), "StephensonMorrisonHohenkerk2016");
+ algorithms->addItem(q_("Stephenson, Morrison & Hohenkerk (2016, 2021)"), "StephensonMorrisonHohenkerk2016");
// Espenak & Meeus (2006) used by default
algorithms->addItem(q_("Espenak & Meeus (2006)").append(" *"), "EspenakMeeus");
// GZ: I want to try out some things. Something is still wrong with eclipses, see lp:1275092.
diff --git a/src/tests/testDeltaT.cpp b/src/tests/testDeltaT.cpp
index 3c2ccd13ea..c19da5a8dc 100644
--- a/src/tests/testDeltaT.cpp
+++ b/src/tests/testDeltaT.cpp
@@ -32,152 +32,185 @@ QTEST_GUILESS_MAIN(TestDeltaT)
void TestDeltaT::initTestCase()
{
// source: http://astro.ukho.gov.uk/nao/lvm/
+ // the data obtainded 13 Jan. 2021
- // Year ΔT ε (seconds)
+ // Year ΔT ε (seconds)
// ΔT (s) : −2000 to −800 (convert from hours)
- genericData << -2000.0 << 1123200 << 25920;
- genericData << -1900.0 << 1062720 << 25920;
- genericData << -1800.0 << 1010880 << 25920;
- genericData << -1700.0 << 950400 << 25920;
- genericData << -1600.0 << 907200 << 17280;
- genericData << -1500.0 << 855360 << 17280;
- genericData << -1400.0 << 803520 << 17280;
- genericData << -1300.0 << 760320 << 17280;
- genericData << -1200.0 << 708480 << 17280;
- genericData << -1100.0 << 665280 << 17280;
- genericData << -1000.0 << 622080 << 17280;
- genericData << -900.0 << 570240 << 8640;
- genericData << -800.0 << 527040 << 8640;
+ genericData << -2000.0 << 46080.00 << 1080.00;
+ genericData << -1900.0 << 43560.00 << 1080.00;
+ genericData << -1800.0 << 41040.00 << 1080.00;
+ genericData << -1700.0 << 38880.00 << 1080.00;
+ genericData << -1600.0 << 36720.00 << 720.00;
+ genericData << -1500.0 << 34920.00 << 720.00;
+ genericData << -1400.0 << 32760.00 << 720.00;
+ genericData << -1300.0 << 30960.00 << 720.00;
+ genericData << -1200.0 << 29160.00 << 720.00;
+ genericData << -1100.0 << 27360.00 << 720.00;
+ genericData << -1000.0 << 25560.00 << 720.00;
+ genericData << -900.0 << 23760.00 << 360.00;
+ genericData << -800.0 << 21960.00 << 360.00;
// ΔT (s) : −720 to +1600
- genericData << -720.0 << 20480.00 << 180.00;
- genericData << -700.0 << 20120.00 << 170.00;
- genericData << -600.0 << 18400.00 << 160.00;
- genericData << -500.0 << 16820.00 << 150.00;
- genericData << -400.0 << 15370.00 << 130.00;
- genericData << -300.0 << 14030.00 << 120.00;
- genericData << -200.0 << 12800.00 << 110.00;
- genericData << -100.0 << 11640.00 << 100.00;
- genericData << 0.0 << 10550.00 << 90.00;
- genericData << 100.0 << 9510.00 << 80.00;
- genericData << 200.0 << 8500.00 << 70.00;
- genericData << 300.0 << 7510.00 << 60.00;
- genericData << 400.0 << 6520.00 << 50.00;
- genericData << 500.0 << 5520.00 << 40.00;
- genericData << 600.0 << 4550.00 << 40.00;
- genericData << 700.0 << 3630.00 << 30.00;
- genericData << 800.0 << 2800.00 << 25.00;
- genericData << 900.0 << 2090.00 << 20.00;
- genericData << 1000.0 << 1540.00 << 15.00;
- genericData << 1100.0 << 1170.00 << 15.00;
- genericData << 1200.0 << 900.00 << 15.00;
- genericData << 1300.0 << 660.00 << 15.00;
- genericData << 1400.0 << 400.00 << 15.00;
- genericData << 1500.0 << 200.00 << 15.00;
- genericData << 1600.0 << 110.00 << 15.00;
+ genericData << -720.0 << 20370.00 << 180.00;
+ genericData << -700.0 << 20050.00 << 170.00;
+ genericData << -600.0 << 18470.00 << 160.00;
+ genericData << -500.0 << 16940.00 << 150.00;
+ genericData << -400.0 << 15470.00 << 130.00;
+ genericData << -300.0 << 14080.00 << 120.00;
+ genericData << -200.0 << 12770.00 << 110.00;
+ genericData << -100.0 << 11560.00 << 100.00;
+ genericData << 0.0 << 10440.00 << 90.00;
+ genericData << 100.0 << 9410.00 << 80.00;
+ genericData << 200.0 << 8420.00 << 70.00;
+ genericData << 300.0 << 7480.00 << 60.00;
+ genericData << 400.0 << 6540.00 << 50.00;
+ genericData << 500.0 << 5590.00 << 40.00;
+ genericData << 600.0 << 4650.00 << 40.00;
+ genericData << 700.0 << 3760.00 << 30.00;
+ genericData << 800.0 << 2940.00 << 25.00;
+ genericData << 900.0 << 2230.00 << 20.00;
+ genericData << 1000.0 << 1650.00 << 15.00;
+ genericData << 1100.0 << 1220.00 << 15.00;
+ genericData << 1200.0 << 910.00 << 15.00;
+ genericData << 1300.0 << 680.00 << 15.00;
+ genericData << 1400.0 << 480.00 << 15.00;
+ genericData << 1500.0 << 290.00 << 15.00;
+ genericData << 1600.0 << 110.00 << 15.00;
// ΔT (s) : +1600 to +1800
- genericData << 1600.0 << 113.00 << 15.00;
- genericData << 1610.0 << 100.00 << 15.00;
- genericData << 1620.0 << 86.00 << 20.00;
- genericData << 1630.0 << 72.00 << 20.00;
- genericData << 1640.0 << 58.00 << 20.00;
- genericData << 1650.0 << 45.00 << 20.00;
- genericData << 1660.0 << 35.00 << 15.00;
- genericData << 1670.0 << 26.00 << 10.00;
- genericData << 1680.0 << 21.00 << 5.00;
- genericData << 1690.0 << 17.00 << 5.00;
- genericData << 1700.0 << 14.00 << 5.00;
- genericData << 1710.0 << 12.00 << 5.00;
- genericData << 1720.0 << 12.00 << 5.00;
- genericData << 1730.0 << 13.00 << 2.00;
- genericData << 1740.0 << 15.00 << 2.00;
- genericData << 1750.0 << 17.00 << 2.00;
- genericData << 1760.0 << 19.00 << 2.00;
- genericData << 1770.0 << 21.00 << 1.00;
- genericData << 1780.0 << 21.00 << 1.00;
- genericData << 1790.0 << 21.00 << 1.00;
- genericData << 1800.0 << 18.00 << 0.50;
- genericData << 1810.0 << 16.00 << 0.50;
- // ΔT (s) : +1950 to +2016
- genericData << 1950.0 << 28.93 << 0.05;
- genericData << 1951.0 << 29.32 << 0.05;
- genericData << 1952.0 << 29.70 << 0.05;
- genericData << 1953.0 << 30.00 << 0.05;
- genericData << 1954.0 << 30.20 << 0.05;
- genericData << 1955.0 << 30.41 << 0.05;
- genericData << 1956.0 << 30.76 << 0.05;
- genericData << 1957.0 << 31.34 << 0.05;
- genericData << 1958.0 << 32.03 << 0.05;
- genericData << 1959.0 << 32.65 << 0.05;
- genericData << 1960.0 << 33.07 << 0.05;
- genericData << 1961.0 << 33.36 << 0.05;
- genericData << 1962.0 << 33.62 << 0.05;
- genericData << 1963.0 << 33.96 << 0.05;
- genericData << 1964.0 << 34.44 << 0.05;
- genericData << 1965.0 << 35.09 << 0.05;
- genericData << 1966.0 << 35.95 << 0.05;
- genericData << 1967.0 << 36.93 << 0.05;
- genericData << 1968.0 << 37.96 << 0.05;
- genericData << 1969.0 << 38.95 << 0.05;
- genericData << 1970.0 << 39.93 << 0.05;
- genericData << 1971.0 << 40.95 << 0.05;
- genericData << 1972.0 << 42.04 << 0.05;
- genericData << 1973.0 << 43.15 << 0.05;
- genericData << 1974.0 << 44.24 << 0.05;
- genericData << 1975.0 << 45.28 << 0.05;
- genericData << 1976.0 << 46.28 << 0.05;
- genericData << 1977.0 << 47.29 << 0.05;
- genericData << 1978.0 << 48.33 << 0.05;
- genericData << 1979.0 << 49.37 << 0.05;
- genericData << 1980.0 << 50.36 << 0.05;
- genericData << 1981.0 << 51.28 << 0.05;
- genericData << 1982.0 << 52.13 << 0.05;
- genericData << 1983.0 << 52.94 << 0.05;
- genericData << 1984.0 << 53.70 << 0.05;
- genericData << 1985.0 << 54.39 << 0.05;
- genericData << 1986.0 << 54.98 << 0.05;
- genericData << 1987.0 << 55.46 << 0.05;
- genericData << 1988.0 << 55.89 << 0.05;
- genericData << 1989.0 << 56.37 << 0.05;
- genericData << 1990.0 << 56.99 << 0.05;
- genericData << 1991.0 << 57.70 << 0.05;
- genericData << 1992.0 << 58.45 << 0.05;
- genericData << 1993.0 << 59.19 << 0.05;
- genericData << 1994.0 << 59.92 << 0.05;
- genericData << 1995.0 << 60.68 << 0.05;
- genericData << 1996.0 << 61.46 << 0.05;
- genericData << 1997.0 << 62.23 << 0.05;
- genericData << 1998.0 << 62.90 << 0.05;
- genericData << 1999.0 << 63.42 << 0.05;
- genericData << 2000.0 << 63.81 << 0.05;
- genericData << 2001.0 << 64.08 << 0.05;
- genericData << 2002.0 << 64.27 << 0.05;
- genericData << 2003.0 << 64.41 << 0.05;
- genericData << 2004.0 << 64.55 << 0.05;
- genericData << 2005.0 << 64.73 << 0.05;
- genericData << 2006.0 << 64.94 << 0.05;
- genericData << 2007.0 << 65.19 << 0.05;
- genericData << 2008.0 << 65.48 << 0.05;
- genericData << 2009.0 << 65.78 << 0.05;
- genericData << 2010.0 << 66.06 << 0.05;
- genericData << 2011.0 << 66.33 << 0.05;
- genericData << 2012.0 << 66.60 << 0.05;
- genericData << 2013.0 << 66.92 << 0.05;
- genericData << 2014.0 << 67.30 << 0.05;
- genericData << 2015.0 << 67.69 << 0.05;
- genericData << 2016.0 << 68.04 << 0.05;
- // ΔT (seconds) : +2017 to +2500
- genericData << 2017.0 << 68.60 << 0.10;
- genericData << 2018.0 << 69.00 << 0.10;
- genericData << 2019.0 << 69.20 << 0.10;
- genericData << 2020.0 << 69.50 << 0.10;
- genericData << 2030.0 << 70.00 << 2.00;
- genericData << 2040.0 << 72.00 << 4.00;
- genericData << 2050.0 << 75.00 << 6.00;
- genericData << 2100.0 << 93.00 << 10.00;
- genericData << 2200.0 << 163.00 << 20.00;
- genericData << 2300.0 << 297.00 << 30.00;
- genericData << 2400.0 << 521.00 << 50.00;
- genericData << 2500.0 << 855.00 << 100.00;
+ genericData << 1600.0 << 109.00 << 15.00;
+ genericData << 1610.0 << 94.00 << 15.00;
+ genericData << 1620.0 << 80.00 << 20.00;
+ genericData << 1630.0 << 66.00 << 20.00;
+ genericData << 1640.0 << 54.00 << 20.00;
+ genericData << 1650.0 << 44.00 << 20.00;
+ genericData << 1660.0 << 35.00 << 15.00;
+ genericData << 1670.0 << 28.00 << 10.00;
+ genericData << 1680.0 << 22.00 << 5.00;
+ genericData << 1690.0 << 17.00 << 5.00;
+ genericData << 1700.0 << 14.00 << 5.00;
+ genericData << 1710.0 << 12.00 << 5.00;
+ genericData << 1720.0 << 12.00 << 5.00;
+ genericData << 1730.0 << 13.00 << 2.00;
+ genericData << 1740.0 << 15.00 << 2.00;
+ genericData << 1750.0 << 17.00 << 2.00;
+ genericData << 1760.0 << 19.00 << 2.00;
+ genericData << 1770.0 << 21.00 << 1.00;
+ genericData << 1780.0 << 21.00 << 1.00;
+ genericData << 1790.0 << 21.00 << 1.00;
+ genericData << 1800.0 << 18.00 << 0.50;
+ genericData << 1810.0 << 16.00 << 0.50;
+ // ΔT (s) : +1800 to +1950
+ genericData << 1800.0 << 18.40 << 0.50;
+ genericData << 1805.0 << 16.60 << 0.30;
+ genericData << 1810.0 << 15.70 << 0.20;
+ genericData << 1815.0 << 16.40 << 0.20;
+ genericData << 1820.0 << 16.50 << 0.20;
+ genericData << 1825.0 << 14.10 << 0.20;
+ genericData << 1830.0 << 10.80 << 0.20;
+ genericData << 1835.0 << 8.50 << 0.10;
+ genericData << 1840.0 << 7.60 << 0.10;
+ genericData << 1845.0 << 8.00 << 0.10;
+ genericData << 1850.0 << 9.30 << 0.10;
+ genericData << 1855.0 << 10.36 << 0.10;
+ genericData << 1860.0 << 9.04 << 0.10;
+ genericData << 1865.0 << 8.25 << 0.10;
+ genericData << 1870.0 << 2.37 << 0.05;
+ genericData << 1875.0 << -1.13 << 0.05;
+ genericData << 1880.0 << -3.21 << 0.05;
+ genericData << 1885.0 << -4.39 << 0.05;
+ genericData << 1890.0 << -3.88 << 0.05;
+ genericData << 1895.0 << -5.02 << 0.05;
+ genericData << 1900.0 << -1.98 << 0.05;
+ genericData << 1905.0 << 4.92 << 0.05;
+ genericData << 1910.0 << 11.14 << 0.05;
+ genericData << 1915.0 << 17.48 << 0.05;
+ genericData << 1920.0 << 21.62 << 0.05;
+ genericData << 1925.0 << 23.79 << 0.05;
+ genericData << 1930.0 << 24.42 << 0.05;
+ genericData << 1935.0 << 24.16 << 0.05;
+ genericData << 1940.0 << 24.43 << 0.05;
+ genericData << 1945.0 << 27.05 << 0.05;
+ genericData << 1950.0 << 28.93 << 0.05;
+ // ΔT (s) : +1950 to +2019
+ genericData << 1950.0 << 28.93 << 0.05;
+ genericData << 1951.0 << 29.32 << 0.05;
+ genericData << 1952.0 << 29.70 << 0.05;
+ genericData << 1953.0 << 30.00 << 0.05;
+ genericData << 1954.0 << 30.20 << 0.05;
+ genericData << 1955.0 << 30.41 << 0.05;
+ genericData << 1956.0 << 30.76 << 0.05;
+ genericData << 1957.0 << 31.34 << 0.05;
+ genericData << 1958.0 << 32.03 << 0.05;
+ genericData << 1959.0 << 32.65 << 0.05;
+ genericData << 1960.0 << 33.07 << 0.05;
+ genericData << 1961.0 << 33.36 << 0.05;
+ genericData << 1962.0 << 33.62 << 0.05;
+ genericData << 1963.0 << 33.96 << 0.05;
+ genericData << 1964.0 << 34.44 << 0.05;
+ genericData << 1965.0 << 35.09 << 0.05;
+ genericData << 1966.0 << 35.95 << 0.05;
+ genericData << 1967.0 << 36.93 << 0.05;
+ genericData << 1968.0 << 37.96 << 0.05;
+ genericData << 1969.0 << 38.95 << 0.05;
+ genericData << 1970.0 << 39.93 << 0.05;
+ genericData << 1971.0 << 40.95 << 0.05;
+ genericData << 1972.0 << 42.04 << 0.05;
+ genericData << 1973.0 << 43.15 << 0.05;
+ genericData << 1974.0 << 44.24 << 0.05;
+ genericData << 1975.0 << 45.28 << 0.05;
+ genericData << 1976.0 << 46.28 << 0.05;
+ genericData << 1977.0 << 47.29 << 0.05;
+ genericData << 1978.0 << 48.33 << 0.05;
+ genericData << 1979.0 << 49.37 << 0.05;
+ genericData << 1980.0 << 50.36 << 0.05;
+ genericData << 1981.0 << 51.28 << 0.05;
+ genericData << 1982.0 << 52.13 << 0.05;
+ genericData << 1983.0 << 52.94 << 0.05;
+ genericData << 1984.0 << 53.70 << 0.05;
+ genericData << 1985.0 << 54.39 << 0.05;
+ genericData << 1986.0 << 54.98 << 0.05;
+ genericData << 1987.0 << 55.46 << 0.05;
+ genericData << 1988.0 << 55.89 << 0.05;
+ genericData << 1989.0 << 56.37 << 0.05;
+ genericData << 1990.0 << 56.99 << 0.05;
+ genericData << 1991.0 << 57.70 << 0.05;
+ genericData << 1992.0 << 58.45 << 0.05;
+ genericData << 1993.0 << 59.19 << 0.05;
+ genericData << 1994.0 << 59.92 << 0.05;
+ genericData << 1995.0 << 60.68 << 0.05;
+ genericData << 1996.0 << 61.46 << 0.05;
+ genericData << 1997.0 << 62.23 << 0.05;
+ genericData << 1998.0 << 62.90 << 0.05;
+ genericData << 1999.0 << 63.42 << 0.05;
+ genericData << 2000.0 << 63.81 << 0.05;
+ genericData << 2001.0 << 64.08 << 0.05;
+ genericData << 2002.0 << 64.27 << 0.05;
+ genericData << 2003.0 << 64.41 << 0.05;
+ genericData << 2004.0 << 64.55 << 0.05;
+ genericData << 2005.0 << 64.73 << 0.05;
+ genericData << 2006.0 << 64.95 << 0.05;
+ genericData << 2007.0 << 65.20 << 0.05;
+ genericData << 2008.0 << 65.48 << 0.05;
+ genericData << 2009.0 << 65.77 << 0.05;
+ genericData << 2010.0 << 66.06 << 0.05;
+ genericData << 2011.0 << 66.33 << 0.05;
+ genericData << 2012.0 << 66.61 << 0.05;
+ genericData << 2013.0 << 66.92 << 0.05;
+ genericData << 2014.0 << 67.28 << 0.05;
+ genericData << 2015.0 << 67.69 << 0.05;
+ genericData << 2016.0 << 68.11 << 0.05;
+ genericData << 2017.0 << 68.53 << 0.05;
+ genericData << 2018.0 << 68.92 << 0.05;
+ genericData << 2019.0 << 69.24 << 0.05;
+ // ΔT (seconds) : +2020 to +2500
+ //genericData << 2020.0 << 69.50 << 0.10;
+ genericData << 2030.0 << 67.00 << 2.00;
+ genericData << 2040.0 << 68.00 << 4.00;
+ genericData << 2050.0 << 70.00 << 6.00;
+ genericData << 2100.0 << 80.00 << 10.00;
+ genericData << 2200.0 << 160.00 << 20.00;
+ genericData << 2300.0 << 330.00 << 30.00;
+ genericData << 2400.0 << 610.00 << 50.00;
+ genericData << 2500.0 << 1000.00 << 100.00;
}
void TestDeltaT::testDeltaTByEspenakMeeus()
@@ -737,7 +770,7 @@ void TestDeltaT::testDeltaTByStephensonMorrison2004WideDates()
void TestDeltaT::testDeltaTByStephensonMorrisonHohenkerk2016GenericDates()
{
- // Valid range: 720 BC to AD 2015
+ // Valid range: 720 BC to AD 2019
double year, expectedResult, acceptableError, JD;
int yout, mout, dout;
@@ -751,9 +784,7 @@ void TestDeltaT::testDeltaTByStephensonMorrisonHohenkerk2016GenericDates()
if (year<0) // https://github.com/Stellarium/stellarium/wiki/FAQ#There_is_no_year_0_or_BC_dates_are_a_year_out
year += 1;
- // Unit tests failures ranges: 300-600, 900-1610, 1780, 1800-1810
- // TODO: Check algorithm
- if ((year>=-720. && year<300.) || (year>600. && year<900.) || (year>=1620. && year<=1770.) || (year>=1820. && year<=2015.))
+ if (year>=-720. && year<2019.)
{
StelUtils::getJDFromDate(&JD, static_cast<int>(year), 1, 1, 0, 0, 0);
double result = StelUtils::getDeltaTByStephensonMorrisonHohenkerk2016(JD);
@@ -832,6 +863,38 @@ void TestDeltaT::testDeltaTByStephensonMorrisonHohenkerk2016GenericDates()
*/
}
+void TestDeltaT::testDeltaTByStephensonMorrisonHohenkerk2016SpecialDates()
+{
+ QVariantList data;
+ // From United States Naval Observatory table
+ // see details: https://github.com/Stellarium/stellarium-web-engine/blob/53906077226a735473023d4c5beb4adce6855903/src/algos/deltat.c#L108
+ data << 1980 << 50.5387;
+ data << 2000 << 63.8285;
+ data << 2010 << 66.0699;
+
+ while(data.count() >= 2)
+ {
+ int year = data.takeFirst().toInt();
+ int yout, mout, dout;
+ double JD;
+ double expectedResult = data.takeFirst().toDouble();
+ double acceptableError = 0.2; // TODO: Increase accuracy to 0.1 seconds
+ StelUtils::getJDFromDate(&JD, year, 1, 1, 0, 0, 0);
+ double result = StelUtils::getDeltaTByStephensonMorrisonHohenkerk2016(JD);
+ double actualError = qAbs(qAbs(expectedResult) - qAbs(result));
+ StelUtils::getDateFromJulianDay(JD, &yout, &mout, &dout);
+ QVERIFY2(actualError <= acceptableError, QString("date=%2 year=%3 result=%4 expected=%5 error=%6 acceptable=%7")
+ .arg(QString("%1-%2-%3 00:00:00").arg(yout).arg(mout).arg(dout))
+ .arg(year)
+ .arg(result)
+ .arg(expectedResult)
+ .arg(actualError)
+ .arg(acceptableError)
+ .toUtf8());
+ }
+}
+
+
void TestDeltaT::testDeltaTByMeeusSimons()
{
// test data from Meeus, Jean, "The Effect of Delta T on Astronomical Calculations",
diff --git a/src/tests/testDeltaT.hpp b/src/tests/testDeltaT.hpp
index 772beea4b1..f078d79440 100644
--- a/src/tests/testDeltaT.hpp
+++ b/src/tests/testDeltaT.hpp
@@ -39,6 +39,7 @@ private slots:
void testDeltaTByStephensonMorrison1995WideDates();
void testDeltaTByStephensonMorrison2004WideDates();
void testDeltaTByStephensonMorrisonHohenkerk2016GenericDates();
+ void testDeltaTByStephensonMorrisonHohenkerk2016SpecialDates();
void testDeltaTByStephenson1997WideDates();
void testDeltaTByMeeusSimons();
void testDeltaTByKhalidSultanaZaidiWideDates();