Fix date for long simulation times

This commit is contained in:
Tor Harald Sandve 2017-11-24 13:59:45 +01:00
parent 14cedcf434
commit e350c04871
3 changed files with 15 additions and 4 deletions

View File

@ -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.

View File

@ -46,4 +46,7 @@ TSTEP
TSTEP
21*5.0 /
TSTEP
5*365000 /
END ==

View File

@ -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) );
}