From ed5a9db25b288ffffab4366db060df0ca347e184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Skaflestad?= Date: Tue, 6 Jul 2021 17:42:24 +0200 Subject: [PATCH] Use Previous Output Time to Decide Next Output Time This commit switches the criterion for BASIC=4 and BASIC=5 to using the difference between the previous and the next output time instead of "just" the next output time. The original criteria year % freq == 0 month % freq == 0 don't do what we want. BASIC=4 and BASIC=5 should output every 'freq' year (=4) or 'freq' month (=5) of simulated time. --- .../EclipseState/Schedule/Schedule.hpp | 7 +- .../EclipseState/Schedule/ScheduleState.hpp | 3 +- .../EclipseState/Schedule/Schedule.cpp | 33 ++- .../EclipseState/Schedule/ScheduleState.cpp | 24 +- tests/parser/RestartConfigTests.cpp | 209 +++++++++++++++--- .../integration/IOConfigIntegrationTest.cpp | 46 ++-- 6 files changed, 257 insertions(+), 65 deletions(-) diff --git a/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp b/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp index 52937cd01..e3a68eeb6 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -254,7 +255,7 @@ namespace Opm void filterConnections(const ActiveGridCells& grid); std::size_t size() const; - bool write_rst_file(std::size_t report_step, bool log=true) const; + bool write_rst_file(std::size_t report_step) const; const std::map< std::string, int >& rst_keywords( size_t timestep ) const; std::unordered_set applyAction(std::size_t reportStep, const time_point& sim_time, const Action::ActionX& action, const Action::Result& result, const std::unordered_map& wellpi); @@ -290,6 +291,7 @@ namespace Opm m_sched_deck.serializeOp(serializer); serializer.vector(snapshots); m_static.serializeOp(serializer); + restart_output.serializeOp(serializer); pack_unpack(serializer); pack_unpack(serializer); @@ -453,6 +455,7 @@ namespace Opm ScheduleDeck m_sched_deck; std::optional exit_status; std::vector snapshots; + WriteRestartFileEvents restart_output; void load_rst(const RestartIO::RstState& rst, const EclipseGrid& grid, @@ -508,6 +511,8 @@ namespace Opm static std::string formatDate(std::time_t t); std::string simulationDays(std::size_t currentStep) const; + bool must_write_rst_file(std::size_t report_step) const; + void applyEXIT(const DeckKeyword&, std::size_t currentStep); void applyWELOPEN(const DeckKeyword&, std::size_t currentStep, bool runtime, const ParseContext&, ErrorGuard&, const std::vector& matching_wells = {}, std::unordered_set * affected_wells = nullptr); diff --git a/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.hpp b/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.hpp index f3c893577..44a8fb402 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.hpp @@ -21,6 +21,7 @@ #define SCHEDULE_TSTEP_HPP #include +#include #include #include #include @@ -318,7 +319,7 @@ namespace Opm { Well::ProducerCMode whistctl() const; void update_whistctl(Well::ProducerCMode whistctl); - bool rst_file(const RSTConfig& rst_config) const; + bool rst_file(const RSTConfig& rst_config, const time_point& previous_restart_output_time) const; void update_date(const time_point& prev_time); void handleSAVE(); diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp index 725000e96..d78174b1d 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp @@ -132,10 +132,15 @@ namespace { m_static( python, restart_info(rst), deck, runspec, output_interval, parseContext, errors ), m_sched_deck(deck, m_static.m_restart_info) { + this->restart_output.resize(this->m_sched_deck.size()); + this->restart_output.clearRemainingEvents(0); + if (rst) { auto restart_step = this->m_static.m_restart_info.second; this->iterateScheduleSection( 0, restart_step, parseContext, errors, false, nullptr, &grid, &fp, ""); this->load_rst(*rst, grid, fp); + if (! this->restart_output.writeRestartFile(restart_step)) + this->restart_output.addRestartOutput(restart_step); this->iterateScheduleSection( restart_step, this->m_sched_deck.size(), parseContext, errors, false, nullptr, &grid, &fp, ""); } else this->iterateScheduleSection( 0, this->m_sched_deck.size(), parseContext, errors, false, nullptr, &grid, &fp, ""); @@ -232,6 +237,7 @@ Schedule::Schedule(const Deck& deck, const EclipseState& es, const std::optional result.m_static = ScheduleStatic::serializeObject(); result.snapshots = { ScheduleState::serializeObject() }; result.m_sched_deck = ScheduleDeck::serializeObject(); + result.restart_output = WriteRestartFileEvents::serializeObject(); return result; } @@ -463,6 +469,10 @@ void Schedule::iterateScheduleSection(std::size_t load_start, std::size_t load_e } checkIfAllConnectionsIsShut(report_step); + + if (this->must_write_rst_file(report_step)) { + this->restart_output.addRestartOutput(report_step); + } } } @@ -1241,16 +1251,30 @@ void Schedule::iterateScheduleSection(std::size_t load_start, std::size_t load_e } } - bool Schedule::write_rst_file(std::size_t report_step, bool ) const { + bool Schedule::write_rst_file(const std::size_t report_step) const + { + return this->restart_output.writeRestartFile(report_step); + } + + bool Schedule::must_write_rst_file(const std::size_t report_step) const + { if (this->m_static.output_interval.has_value()) return this->m_static.output_interval.value() % report_step; if (report_step == 0) return this->m_static.rst_config.write_rst_file.value(); + const auto previous_restart_output_step = + this->restart_output.lastRestartEventBefore(report_step); + + // Previous output event time or start of simulation if no previous + // event recorded + const auto previous_output = previous_restart_output_step.has_value() + ? this->snapshots[previous_restart_output_step.value()].start_time() + : this->snapshots[0].start_time(); + const auto& rst_config = this->snapshots[report_step - 1].rst_config(); - const auto& state = this->snapshots[report_step]; - return state.rst_file(rst_config); + return this->snapshots[report_step].rst_file(rst_config, previous_output); } @@ -1265,7 +1289,8 @@ void Schedule::iterateScheduleSection(std::size_t load_start, std::size_t load_e bool Schedule::operator==(const Schedule& data) const { return this->m_static == data.m_static && this->m_sched_deck == data.m_sched_deck && - this->snapshots == data.snapshots; + this->snapshots == data.snapshots && + this->restart_output == data.restart_output; } diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.cpp index a309298dd..ecda5fd3d 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.cpp @@ -25,6 +25,7 @@ #include #include +#include namespace Opm { @@ -317,31 +318,32 @@ const WellGroupEvents& ScheduleState::wellgroup_events() const { */ -bool ScheduleState::rst_file(const RSTConfig& rst) const { +bool ScheduleState::rst_file(const RSTConfig& rst, + const time_point& previous_restart_output_time) const +{ if (rst.save) return true; if (rst.write_rst_file.has_value()) return rst.write_rst_file.value(); - auto freq = rst.freq.value_or(1); - auto basic = rst.basic.value(); + const auto freq = rst.freq.value_or(1); + const auto basic = rst.basic.value(); if (basic == 3) return (this->sim_step() % freq) == 0; - if (basic == 4) { - if (!this->first_in_year()) - return false; + const auto [year_diff, month_diff] = + date_diff(this->m_start_time, previous_restart_output_time); - return (this->m_year_num % freq) == 0; + if (basic == 4) { + return this->first_in_year() + && (year_diff >= static_cast(freq)); } if (basic == 5) { - if (!this->first_in_month()) - return false; - - return (this->m_month_num % freq) == 0; + return this->first_in_month() + && (month_diff >= static_cast(freq)); } throw std::logic_error(fmt::format("Unsupported BASIC={} value", basic)); diff --git a/tests/parser/RestartConfigTests.cpp b/tests/parser/RestartConfigTests.cpp index 36d31119d..43a786961 100644 --- a/tests/parser/RestartConfigTests.cpp +++ b/tests/parser/RestartConfigTests.cpp @@ -248,8 +248,8 @@ DATES 5 'SEP' 2020 / ( 7) 1 'OCT' 2020 / ( 8) 1 'NOV' 2020 / ( 9) - 1 'DEC' 2020 / (10) - 5 'JAN' 2021 / -- WRITE (11) + 1 'DEC' 2020 / -- WRITE (10) + 5 'JAN' 2021 / (11) 1 'FEB' 2021 / (12) 17 'MAY' 2021 / (13) 6 'JLY' 2021 / -- WRITE (14) @@ -263,12 +263,12 @@ END auto sched = make_schedule(input, false); - for (const std::size_t stepID : { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 18 }) { + for (const std::size_t stepID : { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18 }) { BOOST_CHECK_MESSAGE(! sched.write_rst_file(stepID), "Must not write restart information for excluded step " << stepID); } - for (const std::size_t stepID : { 0, 1, 11, 14, 17 }) { + for (const std::size_t stepID : { 0, 10, 14, 17 }) { BOOST_CHECK_MESSAGE(sched.write_rst_file(stepID), "Must write restart information for included step " << stepID); } @@ -1108,17 +1108,17 @@ RPTRST BASIC=4 FREQ=2 / DATES - 22 MAY 1981 / - 23 MAY 1981 / - 24 MAY 1981 / - 23 MAY 1982 / - 24 MAY 1982 / - 24 MAY 1983 / -- write - 25 MAY 1984 / - 26 MAY 1984 / - 26 MAY 1985 / -- write - 27 MAY 1985 / - 1 JAN 1986 / + 22 MAY 1981 / -- 1 + 23 MAY 1981 / -- 2 + 24 MAY 1981 / -- 3 + 23 MAY 1982 / -- 4 + 24 MAY 1982 / -- 5 + 24 MAY 1983 / -- 6 write + 25 MAY 1984 / -- 7 + 26 MAY 1984 / -- 8 + 26 MAY 1985 / -- 9 write + 27 MAY 1985 / -- 10 + 1 JAN 1986 / -- 11 / )"; auto sched = make_schedule(data); @@ -1129,15 +1129,19 @@ DATES * * FREQ=2 */ - for( size_t ts : { 1, 2, 3, 4, 5, 7, 8, 10, 11 } ) - BOOST_CHECK( !sched.write_rst_file( ts ) ); + for (const std::size_t ts : { 1, 2, 3, 4, 5, 7, 8, 10, 11 } ) + BOOST_CHECK_MESSAGE( !sched.write_rst_file( ts ), + "Must NOT write restart file for excluded step " << ts); - for( size_t ts : { 6, 9 } ) - BOOST_CHECK( sched.write_rst_file( ts ) ); + for (const std::size_t ts : { 6, 9 } ) + BOOST_CHECK_MESSAGE( sched.write_rst_file( ts ), + "Must write restart file for included step " << ts); } BOOST_AUTO_TEST_CASE(BASIC_EQ_5) { const std::string data = R"( +START +1 MAY 1981 / SCHEDULE RPTRST BASIC=5 FREQ=2 @@ -1152,19 +1156,174 @@ DATES 2 JAN 1982 / -- 7 1 FEB 1982 / -- 8 1 MAR 1982 / -- 9 Write - 1 APR 1983 / --10 - 2 JUN 1983 / --11 + 1 APR 1983 / --10 Write + 16 APR 1983 / --11 + 30 APR 1983 / --12 + 1 MAY 1983 / --13 + 17 MAY 1983 / --14 + 31 MAY 1983 / --15 + 2 JUN 1983 / --16 Write + 10 JUN 1983 / --17 + 23 JUN 1983 / --18 + 30 JUN 1983 / --19 + 21 JUL 1983 / --20 + 31 JUL 1983 / --21 + 5 AUG 1983 / --22 Write + 22 AUG 1983 / --23 / )"; auto sched = make_schedule(data); /* BASIC=5, restart file is written at the first report step of each month. */ - for( size_t ts : { 1, 2, 3, 4, 7, 8, 10, 11 } ) - BOOST_CHECK( !sched.write_rst_file( ts ) ); + for (std::size_t ts : { 0, 1, 2, 3, 4, 7, 8, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 23 }) { + BOOST_CHECK_MESSAGE( !sched.write_rst_file(ts), + "Must not write restart file for excluded step " << ts ); + } - for( size_t ts : { 5, 6, 9} ) - BOOST_CHECK_MESSAGE( sched.write_rst_file( ts ) , "Restart file expected for step: " << ts); + for (std::size_t ts : { 5, 6, 9, 10, 16, 22 }) { + BOOST_CHECK_MESSAGE( sched.write_rst_file(ts), + "Restart file expected for step: " << ts ); + } +} + +BOOST_AUTO_TEST_CASE(BASIC_EQ_5_FREQ_EQ_6) +{ + const auto deckStr = std::string { R"(RUNSPEC +DIMENS +1 1 1/ + +START + 1 JAN 2000 / + +GRID +DX +1 / +DY +1 / +DZ +1 / +TOPS +0 / + +SOLUTION + +RPTRST +BASIC=5 FREQ=6 / + +SCHEDULE +DATES + 2 JAN 2000 / -- 1 + 3 JAN 2000 / -- 2 + 9 JAN 2000 / -- 3 + 6 FEB 2000 / -- 4 + 11 AUG 2000 / -- 5 Write + 3 SEP 2000 / -- 6 + 24 SEP 2000 / -- 7 + 22 DEC 2000 / -- 8 + 31 DEC 2000 / -- 9 + 1 JAN 2001 / -- 10 + 2 JAN 2001 / -- 11 + 30 JAN 2001 / -- 12 + 31 JAN 2001 / -- 13 + 1 FEB 2001 / -- 14 Write + 2 FEB 2001 / -- 15 + 28 FEB 2001 / -- 16 + 1 MAR 2001 / -- 17 + 2 MAR 2001 / -- 18 + 3 MAR 2001 / -- 19 + 31 MAR 2001 / -- 20 + 1 APR 2001 / -- 21 + 30 APR 2001 / -- 22 + 1 MAY 2001 / -- 23 + 31 MAY 2001 / -- 24 + 1 JUN 2001 / -- 25 + 30 JUN 2001 / -- 26 + 1 JLY 2001 / -- 27 + 2 JLY 2001 / -- 28 + 30 JLY 2001 / -- 29 + 31 JLY 2001 / -- 30 + 1 AUG 2001 / -- 31 Write + 31 AUG 2001 / -- 32 + 10 SEP 2001 / -- 33 + 17 OCT 2001 / -- 34 + 7 NOV 2001 / -- 35 + 8 NOV 2001 / -- 36 + 27 NOV 2001 / -- 37 + 29 NOV 2001 / -- 38 + 30 NOV 2001 / -- 39 + 6 DEC 2001 / -- 40 + 7 DEC 2001 / -- 41 + 30 DEC 2001 / -- 42 + 31 DEC 2001 / -- 43 + 1 JAN 2002 / -- 44 + 2 JAN 2002 / -- 45 + 31 JAN 2002 / -- 46 + 1 FEB 2002 / -- 47 Write + 2 FEB 2002 / -- 48 + 19 JUN 2002 / -- 49 + 19 JLY 2002 / -- 50 + 31 JLY 2002 / -- 51 + 1 AUG 2002 / -- 52 Write +/ +END +)" }; + + auto sched = make_schedule(deckStr, false); + + BOOST_CHECK_MESSAGE( sched.write_rst_file( 0), "Must write restart file at report step 0"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file( 1), "Must NOT write restart file at report step 1"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file( 2), "Must NOT write restart file at report step 2"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file( 3), "Must NOT write restart file at report step 3"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file( 4), "Must NOT write restart file at report step 4"); + BOOST_CHECK_MESSAGE( sched.write_rst_file( 5), "Must write restart file at report step 5"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file( 6), "Must NOT write restart file at report step 6"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file( 7), "Must NOT write restart file at report step 7"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file( 8), "Must NOT write restart file at report step 8"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file( 9), "Must NOT write restart file at report step 9"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(10), "Must NOT write restart file at report step 10"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(11), "Must NOT write restart file at report step 11"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(12), "Must NOT write restart file at report step 12"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(13), "Must NOT write restart file at report step 13"); + BOOST_CHECK_MESSAGE( sched.write_rst_file(14), "Must write restart file at report step 14"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(15), "Must NOT write restart file at report step 15"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(16), "Must NOT write restart file at report step 16"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(17), "Must NOT write restart file at report step 17"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(18), "Must NOT write restart file at report step 18"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(19), "Must NOT write restart file at report step 19"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(20), "Must NOT write restart file at report step 20"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(21), "Must NOT write restart file at report step 21"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(22), "Must NOT write restart file at report step 22"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(23), "Must NOT write restart file at report step 23"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(24), "Must NOT write restart file at report step 24"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(25), "Must NOT write restart file at report step 25"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(26), "Must NOT write restart file at report step 26"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(27), "Must NOT write restart file at report step 27"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(28), "Must NOT write restart file at report step 28"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(29), "Must NOT write restart file at report step 29"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(30), "Must NOT write restart file at report step 30"); + BOOST_CHECK_MESSAGE( sched.write_rst_file(31), "Must write restart file at report step 31"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(32), "Must NOT write restart file at report step 32"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(33), "Must NOT write restart file at report step 33"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(34), "Must NOT write restart file at report step 34"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(35), "Must NOT write restart file at report step 35"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(36), "Must NOT write restart file at report step 36"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(37), "Must NOT write restart file at report step 37"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(38), "Must NOT write restart file at report step 38"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(39), "Must NOT write restart file at report step 39"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(40), "Must NOT write restart file at report step 40"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(41), "Must NOT write restart file at report step 41"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(42), "Must NOT write restart file at report step 42"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(43), "Must NOT write restart file at report step 43"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(44), "Must NOT write restart file at report step 44"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(45), "Must NOT write restart file at report step 45"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(46), "Must NOT write restart file at report step 46"); + BOOST_CHECK_MESSAGE( sched.write_rst_file(47), "Must write restart file at report step 47"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(48), "Must NOT write restart file at report step 48"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(49), "Must NOT write restart file at report step 49"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(50), "Must NOT write restart file at report step 50"); + BOOST_CHECK_MESSAGE(!sched.write_rst_file(51), "Must NOT write restart file at report step 51"); + BOOST_CHECK_MESSAGE( sched.write_rst_file(52), "Must write restart file at report step 52"); } BOOST_AUTO_TEST_CASE(BASIC_EQ_0) { diff --git a/tests/parser/integration/IOConfigIntegrationTest.cpp b/tests/parser/integration/IOConfigIntegrationTest.cpp index 20d8e6d04..ea7caa3fa 100644 --- a/tests/parser/integration/IOConfigIntegrationTest.cpp +++ b/tests/parser/integration/IOConfigIntegrationTest.cpp @@ -151,29 +151,29 @@ BOOST_AUTO_TEST_CASE( RestartConfig2 ) { rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 27), std::forward_as_tuple(2001,1, 1)); rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 45), std::forward_as_tuple(2001,7, 1)); rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 50), std::forward_as_tuple(2001,8,24)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 61), std::forward_as_tuple(2002,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 79), std::forward_as_tuple(2002,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 89), std::forward_as_tuple(2003,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 99), std::forward_as_tuple(2003,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(109), std::forward_as_tuple(2004,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(128), std::forward_as_tuple(2004,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(136), std::forward_as_tuple(2005,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(146), std::forward_as_tuple(2005,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(158), std::forward_as_tuple(2006,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(164), std::forward_as_tuple(2006,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(170), std::forward_as_tuple(2007,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(178), std::forward_as_tuple(2007,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(184), std::forward_as_tuple(2008,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(192), std::forward_as_tuple(2008,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(198), std::forward_as_tuple(2009,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(204), std::forward_as_tuple(2009,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(210), std::forward_as_tuple(2010,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(216), std::forward_as_tuple(2010,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(222), std::forward_as_tuple(2011,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(228), std::forward_as_tuple(2011,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(234), std::forward_as_tuple(2012,1, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(240), std::forward_as_tuple(2012,7, 1)); - rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(246), std::forward_as_tuple(2013,1, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 63), std::forward_as_tuple(2002,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 83), std::forward_as_tuple(2002,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple( 92), std::forward_as_tuple(2003,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(101), std::forward_as_tuple(2003,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(111), std::forward_as_tuple(2004,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(129), std::forward_as_tuple(2004,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(137), std::forward_as_tuple(2005,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(149), std::forward_as_tuple(2005,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(159), std::forward_as_tuple(2006,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(165), std::forward_as_tuple(2006,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(173), std::forward_as_tuple(2007,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(179), std::forward_as_tuple(2007,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(185), std::forward_as_tuple(2008,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(193), std::forward_as_tuple(2008,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(199), std::forward_as_tuple(2009,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(205), std::forward_as_tuple(2009,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(211), std::forward_as_tuple(2010,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(217), std::forward_as_tuple(2010,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(223), std::forward_as_tuple(2011,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(229), std::forward_as_tuple(2011,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(235), std::forward_as_tuple(2012,2, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(241), std::forward_as_tuple(2012,8, 1)); + rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(247), std::forward_as_tuple(2013,2, 1)); rptConfig.emplace(std::piecewise_construct, std::forward_as_tuple(251), std::forward_as_tuple(2013,5, 2));