Manage events with the ScheduleState machinery

This commit is contained in:
Joakim Hove
2021-01-11 14:17:53 +01:00
parent e185ddf96b
commit e445bf738c
15 changed files with 315 additions and 258 deletions

View File

@@ -25,53 +25,22 @@
#include <boost/test/unit_test.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Events.hpp>
#include <opm/common/utility/TimeService.hpp>
BOOST_AUTO_TEST_CASE(CreateEmpty) {
std::vector<std::time_t> tp = { Opm::asTimeT(Opm::TimeStampUTC(2010,1,1)) };
Opm::Events events;
for (int i = 0; i < 11; i++)
tp.push_back( Opm::asTimeT(Opm::TimeStampUTC(2010,1,i+2)));
BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL));
Opm::TimeMap timeMap(tp);
Opm::Events events( timeMap );
Opm::DynamicVector<double> vector(timeMap , 9.99);
events.addEvent( Opm::ScheduleEvents::NEW_WELL);
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL));
BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 10));
events.addEvent( Opm::ScheduleEvents::NEW_WELL , 0 );
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 0));
events.addEvent( Opm::ScheduleEvents::NEW_WELL , 10 );
BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 9));
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 10));
BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 11));
events.addEvent( Opm::ScheduleEvents::NEW_WELL , 10 );
BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 9));
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 10));
BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 11));
events.addEvent( Opm::ScheduleEvents::WELL_STATUS_CHANGE , 9 );
events.addEvent( Opm::ScheduleEvents::WELL_STATUS_CHANGE , 10 );
BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 9));
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 10));
BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 11));
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::WELL_STATUS_CHANGE , 9));
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::WELL_STATUS_CHANGE , 10));
events.addEvent( Opm::ScheduleEvents::WELL_STATUS_CHANGE);
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL));
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::WELL_STATUS_CHANGE));
BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::WELL_STATUS_CHANGE | Opm::ScheduleEvents::NEW_WELL));
}
BOOST_AUTO_TEST_CASE(TestMultiple) {
const std::time_t startDate = Opm::TimeMap::mkdate(2010, 1, 1);
Opm::TimeMap timeMap( { startDate } );
Opm::DynamicVector<double> vector(timeMap , 9.99);
Opm::Events events( timeMap );
events.addEvent( Opm::ScheduleEvents::NEW_WELL , 0 );
BOOST_CHECK( events.hasEvent( Opm::ScheduleEvents::NEW_WELL | Opm::ScheduleEvents::NEW_GROUP , 0 ));
}