From e350c04871873f2a92ea2cdfec122aa5cf358491 Mon Sep 17 00:00:00 2001 From: Tor Harald Sandve Date: Fri, 24 Nov 2017 13:59:45 +0100 Subject: [PATCH] Fix date for long simulation times --- opm/simulators/timestepping/SimulatorTimer.cpp | 4 +++- tests/TESTTIMER.DATA | 3 +++ tests/test_timer.cpp | 12 +++++++++--- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/opm/simulators/timestepping/SimulatorTimer.cpp b/opm/simulators/timestepping/SimulatorTimer.cpp index e968a8058..422f63b61 100644 --- a/opm/simulators/timestepping/SimulatorTimer.cpp +++ b/opm/simulators/timestepping/SimulatorTimer.cpp @@ -114,7 +114,9 @@ namespace Opm boost::posix_time::ptime SimulatorTimer::currentDateTime() const { - return startDateTime() + boost::posix_time::seconds( (int) simulationTimeElapsed()); + // boost uses only 32 bit long for seconds. But 64 bit for milliseconds + // as a work around for very large timess we just use milliseconds + return startDateTime() + boost::posix_time::milliseconds( simulationTimeElapsed() / Opm::prefix::milli); } /// Total time. diff --git a/tests/TESTTIMER.DATA b/tests/TESTTIMER.DATA index efe90c9e6..32a9ed552 100644 --- a/tests/TESTTIMER.DATA +++ b/tests/TESTTIMER.DATA @@ -46,4 +46,7 @@ TSTEP TSTEP 21*5.0 / +TSTEP + 5*365000 / + END == diff --git a/tests/test_timer.cpp b/tests/test_timer.cpp index 68511f444..6394227b4 100644 --- a/tests/test_timer.cpp +++ b/tests/test_timer.cpp @@ -59,8 +59,9 @@ BOOST_AUTO_TEST_CASE(CreateTimer) BOOST_CHECK_EQUAL( 0, simtimer.currentStepNum() ); BOOST_CHECK_EQUAL( 0., simtimer.simulationTimeElapsed() ); - BOOST_CHECK_EQUAL( 120, simtimer.numSteps() ); - BOOST_CHECK_EQUAL( 1200., Opm::unit::convert::to(simtimer.totalTime(), Opm::unit::day) ); + BOOST_CHECK_EQUAL( 125, simtimer.numSteps() ); + // 1200 + 1000 * 365 * 5 + BOOST_CHECK_EQUAL( 1826200, Opm::unit::convert::to(simtimer.totalTime(), Opm::unit::day) ); BOOST_CHECK_EQUAL( 0., Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::day) ); double testCurrentTime = 0.; @@ -85,9 +86,12 @@ BOOST_AUTO_TEST_CASE(CreateTimer) BOOST_CHECK_EQUAL( false, simtimer.done() ); BOOST_CHECK_EQUAL( 0., Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::day) ); - simtimer.setCurrentStepNum(120); + simtimer.setCurrentStepNum(125); BOOST_CHECK_EQUAL( Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::day), Opm::unit::convert::to(simtimer.totalTime(), Opm::unit::day) ); + + boost::gregorian::date endDate( 7014, 3, 14); + BOOST_CHECK_EQUAL ( simtimer.currentDateTime(), boost::posix_time::ptime(endDate)); int i = 0; double testCurrentTime1 = 0.; @@ -111,5 +115,7 @@ BOOST_AUTO_TEST_CASE(CreateTimer) Opm::unit::convert::to(simtimer.totalTime(), Opm::unit::minute) ); BOOST_CHECK_EQUAL( Opm::unit::convert::to(testCurrentTime2, Opm::unit::minute), Opm::unit::convert::to(simtimer.totalTime(), Opm::unit::minute) ); + + }