diff options
author | Alexander V. Wolf <alex.v.wolf@gmail.com> | 2022-01-14 00:35:00 +0700 |
---|---|---|
committer | Alexander V. Wolf <alex.v.wolf@gmail.com> | 2022-01-14 00:35:00 +0700 |
commit | 93a1b252ae4ec0d5c903d58497a8a887f3569eb5 (patch) | |
tree | 52b9a2cc7bb838104d14de876564aeafed106674 | |
parent | 965210dbd6e34a856eda802305f065222cd2fe75 (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.cpp | 4 | ||||
-rw-r--r-- | src/core/StelCore.hpp | 2 | ||||
-rw-r--r-- | src/core/StelUtils.cpp | 125 | ||||
-rw-r--r-- | src/core/StelUtils.hpp | 11 | ||||
-rw-r--r-- | src/gui/ConfigurationDialog.cpp | 2 | ||||
-rw-r--r-- | src/tests/testDeltaT.cpp | 355 | ||||
-rw-r--r-- | src/tests/testDeltaT.hpp | 1 |
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(); |