diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/SummaryState.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/SummaryState.cpp index 179c9d271..697410b0d 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/SummaryState.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/SummaryState.cpp @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -55,11 +56,22 @@ namespace { SummaryState::SummaryState(std::chrono::system_clock::time_point sim_start_arg): sim_start(sim_start_arg) { + this->update_elapsed(0); } void SummaryState::update_elapsed(double delta) { this->elapsed += delta; + std::time_t sim_time = std::chrono::system_clock::to_time_t( this->sim_start + std::chrono::microseconds(static_cast(1000000*delta))); + struct tm ts; + gmtime_r(&sim_time, &ts); + int year = ts.tm_year + 1900; + int month = ts.tm_mon; + int day = ts.tm_mday; + + this->update("YEAR", year); + this->update("MNTH", month); + this->update("DAY", day); } diff --git a/tests/test_Summary.cpp b/tests/test_Summary.cpp index ac8fb40c4..adc074bd1 100644 --- a/tests/test_Summary.cpp +++ b/tests/test_Summary.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -1550,7 +1551,7 @@ BOOST_AUTO_TEST_CASE(Test_SummaryState) { BOOST_CHECK_EQUAL(std::count(all_wells.begin(), all_wells.end(), "OP2"), 1); BOOST_CHECK_EQUAL(std::count(all_wells.begin(), all_wells.end(), "OP3"), 1); - BOOST_CHECK_EQUAL(st.size(), 8); + BOOST_CHECK_EQUAL(st.size(), 11); // Size = 8 + 3 - where the the three are DAY, MNTH and YEAR // The well 'OP_2' which was indirectly added with the // st.update("WWCT:OP_2", 100) call is *not* counted as a well! @@ -3201,4 +3202,30 @@ BOOST_AUTO_TEST_CASE(serialize_sumary_state) { } + +BOOST_AUTO_TEST_CASE(SummaryState__TIME) { + struct tm ts; + ts.tm_year = 100; + ts.tm_mon = 1; + ts.tm_mday = 1; + ts.tm_hour = 0; + ts.tm_min = 0; + ts.tm_sec = 0; + auto start_time = timegm(&ts); + SummaryState st(std::chrono::system_clock::from_time_t(start_time)); + BOOST_CHECK_EQUAL(st.get("YEAR"), 2000); + BOOST_CHECK_EQUAL(st.get("DAY"), 1); + BOOST_CHECK_EQUAL(st.get("MNTH"), 1); + + // Next day + st.update_elapsed(100000); + BOOST_CHECK_EQUAL(st.get("YEAR"), 2000); + BOOST_CHECK_EQUAL(st.get("DAY"), 2); + BOOST_CHECK_EQUAL(st.get("MNTH"), 1); + + // Well into 2001 + st.update_elapsed(400 * 86400); + BOOST_CHECK_EQUAL(st.get("YEAR"), 2001); +} + BOOST_AUTO_TEST_SUITE_END()