Added EclipseGrid as argument to Schedule constructor

This commit is contained in:
Joakim Hove
2015-01-25 23:48:48 +01:00
parent 8e4fd2b408
commit 3cfe0291fd
7 changed files with 57 additions and 27 deletions

View File

@@ -15,7 +15,8 @@ int main(int /* argc */, char** argv) {
Opm::ParserPtr parser(new Opm::Parser());
std::string file = argv[1];
Opm::DeckConstPtr deck = parser->parseFile(file);
Opm::Schedule sched( deck );
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>( deck );
Opm::Schedule sched( grid , deck );
std::cout << "Wells: " << sched.numWells() << std::endl;

View File

@@ -285,7 +285,7 @@ namespace Opm {
}
void EclipseState::initSchedule(DeckConstPtr deck, LoggerPtr logger) {
schedule = ScheduleConstPtr( new Schedule(deck, logger) );
schedule = ScheduleConstPtr( new Schedule(getEclipseGrid() , deck, logger) );
}
void EclipseState::initTransMult(LoggerPtr /*logger*/) {

View File

@@ -35,7 +35,9 @@
namespace Opm {
Schedule::Schedule(DeckConstPtr deck, LoggerPtr logger) {
Schedule::Schedule(std::shared_ptr<const EclipseGrid> grid , DeckConstPtr deck, LoggerPtr logger)
: m_grid(grid)
{
initFromDeck(deck, logger);
}

View File

@@ -27,6 +27,7 @@
#include <opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Group.hpp>
#include <opm/parser/eclipse/EclipseState/Util/OrderedMap.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp>
#include <opm/parser/eclipse/Deck/Deck.hpp>
#include <memory>
@@ -41,7 +42,8 @@ namespace Opm
class Schedule {
public:
Schedule(DeckConstPtr deck, LoggerPtr logger=std::make_shared<Logger>());
Schedule(std::shared_ptr<const EclipseGrid> grid , DeckConstPtr deck, LoggerPtr logger=std::make_shared<Logger>());
boost::posix_time::ptime getStartTime() const
{ return m_timeMap->getStartTime(/*timeStepIdx=*/0); }
TimeMapConstPtr getTimeMap() const;
@@ -64,6 +66,7 @@ namespace Opm
private:
TimeMapPtr m_timeMap;
OrderedMap<WellPtr> m_wells;
std::shared_ptr<const EclipseGrid> m_grid;
std::map<std::string , GroupPtr> m_groups;
std::shared_ptr<DynamicState<GroupTreePtr> > m_rootGroupTree;

View File

@@ -126,14 +126,16 @@ BOOST_AUTO_TEST_CASE(CreateScheduleDeckMissingReturnsDefaults) {
DeckPtr deck(new Deck());
DeckKeywordPtr keyword(new DeckKeyword("SCHEDULE"));
deck->addKeyword( keyword );
Schedule schedule(deck);
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
Schedule schedule(grid , deck);
BOOST_CHECK_EQUAL( schedule.getStartTime() , boost::posix_time::ptime(boost::gregorian::date( 1983 , boost::gregorian::Jan , 1)));
}
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWellsOrdered) {
DeckPtr deck = createDeckWithWellsOrdered();
Schedule schedule(deck);
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(100,100,100);
Schedule schedule(grid , deck);
std::vector<WellConstPtr> wells = schedule.getWells();
BOOST_CHECK_EQUAL( "CW_1" , wells[0]->name());
@@ -145,7 +147,8 @@ BOOST_AUTO_TEST_CASE(CreateScheduleDeckWellsOrdered) {
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithStart) {
DeckPtr deck = createDeck();
Schedule schedule(deck);
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
Schedule schedule(grid , deck);
BOOST_CHECK_EQUAL( schedule.getStartTime() , boost::posix_time::ptime(boost::gregorian::date( 1998 , boost::gregorian::Mar , 8)));
}
@@ -153,15 +156,17 @@ BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithStart) {
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithSCHEDULENoThrow) {
DeckPtr deck(new Deck());
DeckKeywordPtr keyword(new DeckKeyword("SCHEDULE"));
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
deck->addKeyword( keyword );
BOOST_CHECK_NO_THROW(Schedule schedule(deck));
BOOST_CHECK_NO_THROW(Schedule schedule(grid , deck));
}
BOOST_AUTO_TEST_CASE(EmptyScheduleHasNoWells) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeck();
Schedule schedule(deck);
Schedule schedule(grid , deck);
BOOST_CHECK_EQUAL( 0U , schedule.numWells() );
BOOST_CHECK_EQUAL( false , schedule.hasWell("WELL1") );
BOOST_CHECK_THROW( schedule.getWell("WELL2") , std::invalid_argument );
@@ -169,13 +174,15 @@ BOOST_AUTO_TEST_CASE(EmptyScheduleHasNoWells) {
BOOST_AUTO_TEST_CASE(CreateSchedule_DeckWithoutGRUPTREE_HasRootGroupTreeNodeForTimeStepZero) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeck();
Schedule schedule(deck);
Schedule schedule(grid , deck);
BOOST_CHECK_EQUAL("FIELD", schedule.getGroupTree(0)->getNode("FIELD")->name());
}
BOOST_AUTO_TEST_CASE(CreateSchedule_DeckWithGRUPTREE_HasRootGroupTreeNodeForTimeStepZero) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeck();
DeckKeywordPtr gruptreeKeyword(new DeckKeyword("GRUPTREE"));
@@ -189,7 +196,7 @@ BOOST_AUTO_TEST_CASE(CreateSchedule_DeckWithGRUPTREE_HasRootGroupTreeNodeForTime
recordChildOfField->addItem(itemParent1);
gruptreeKeyword->addRecord(recordChildOfField);
deck->addKeyword(gruptreeKeyword);
Schedule schedule(deck);
Schedule schedule(grid , deck);
GroupTreeNodePtr fieldNode = schedule.getGroupTree(0)->getNode("FIELD");
BOOST_CHECK_EQUAL("FIELD", fieldNode->name());
GroupTreeNodePtr FAREN = fieldNode->getChildGroup("FAREN");
@@ -200,8 +207,9 @@ BOOST_AUTO_TEST_CASE(CreateSchedule_DeckWithGRUPTREE_HasRootGroupTreeNodeForTime
BOOST_AUTO_TEST_CASE(EmptyScheduleHasFIELDGroup) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeck();
Schedule schedule(deck);
Schedule schedule(grid , deck);
BOOST_CHECK_EQUAL( 1U , schedule.numGroups() );
BOOST_CHECK_EQUAL( true , schedule.hasGroup("FIELD") );
BOOST_CHECK_EQUAL( false , schedule.hasGroup("GROUP") );
@@ -209,8 +217,9 @@ BOOST_AUTO_TEST_CASE(EmptyScheduleHasFIELDGroup) {
}
BOOST_AUTO_TEST_CASE(WellsIterator_Empty_EmptyVectorReturned) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeck();
Schedule schedule(deck);
Schedule schedule(grid , deck);
std::vector<WellConstPtr> wells_alltimesteps = schedule.getWells();
BOOST_CHECK_EQUAL(0U, wells_alltimesteps.size());
@@ -221,8 +230,9 @@ BOOST_AUTO_TEST_CASE(WellsIterator_Empty_EmptyVectorReturned) {
}
BOOST_AUTO_TEST_CASE(WellsIterator_HasWells_WellsReturned) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeckWithWells();
Schedule schedule(deck);
Schedule schedule(grid , deck);
std::vector<WellConstPtr> wells_alltimesteps = schedule.getWells();
BOOST_CHECK_EQUAL(3U, wells_alltimesteps.size());
@@ -234,8 +244,9 @@ BOOST_AUTO_TEST_CASE(WellsIterator_HasWells_WellsReturned) {
BOOST_AUTO_TEST_CASE(WellsIteratorWithRegex_HasWells_WellsReturned) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeckWithWells();
Schedule schedule(deck);
Schedule schedule(grid , deck);
std::string wellNamePattern;
std::vector<WellPtr> wells;
@@ -253,8 +264,9 @@ BOOST_AUTO_TEST_CASE(WellsIteratorWithRegex_HasWells_WellsReturned) {
}
BOOST_AUTO_TEST_CASE(ReturnNumWellsTimestep) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeckWithWells();
Schedule schedule(deck);
Schedule schedule(grid , deck);
BOOST_CHECK_EQUAL(schedule.numWells(0), 1);
BOOST_CHECK_EQUAL(schedule.numWells(1), 1);
@@ -263,8 +275,9 @@ BOOST_AUTO_TEST_CASE(ReturnNumWellsTimestep) {
}
BOOST_AUTO_TEST_CASE(ReturnMaxNumCompletionsForWellsInTimestep) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeckWithWellsAndCompletionData();
Schedule schedule(deck);
Schedule schedule(grid , deck);
BOOST_CHECK_EQUAL(schedule.getMaxNumCompletionsForWells(1), 7);
BOOST_CHECK_EQUAL(schedule.getMaxNumCompletionsForWells(3), 9);
@@ -328,8 +341,9 @@ static DeckPtr createDeckWithWellsAndCompletionDataWithWELOPEN() {
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWellsAndCompletionDataWithWELOPEN) {
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = createDeckWithWellsAndCompletionDataWithWELOPEN();
Schedule schedule(deck);
Schedule schedule(grid , deck);
WellPtr well;
well = schedule.getWell("OP_1");
size_t currentStep = 0;
@@ -437,9 +451,9 @@ BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithWELOPEN_TryToOpenWellWithShutCompleti
" 'OP_1' OPEN / \n "
"/\n";
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
DeckPtr deck = parser.parseString(input);
Schedule schedule(deck);
Schedule schedule(grid , deck);
WellPtr well;
well = schedule.getWell("OP_1");
size_t currentStep = 3;

View File

@@ -39,7 +39,8 @@ BOOST_AUTO_TEST_CASE( parse_WCONPROD_OK ) {
ParserPtr parser(new Parser());
boost::filesystem::path wconprodFile("testdata/integration_tests/WellWithWildcards/WCONPROD1");
DeckPtr deck = parser->parseFile(wconprodFile.string());
ScheduleConstPtr sched(new Schedule(deck));
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 30,30,30);
ScheduleConstPtr sched(new Schedule(grid , deck));
BOOST_CHECK_EQUAL(5U, sched->numWells());
BOOST_CHECK(sched->hasWell("INJE1"));
@@ -72,7 +73,8 @@ BOOST_AUTO_TEST_CASE( parse_WCONINJE_OK ) {
ParserPtr parser(new Parser());
boost::filesystem::path wconprodFile("testdata/integration_tests/WellWithWildcards/WCONINJE1");
DeckPtr deck = parser->parseFile(wconprodFile.string());
ScheduleConstPtr sched(new Schedule(deck));
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 30,30,30 );
ScheduleConstPtr sched(new Schedule(grid , deck));
BOOST_CHECK_EQUAL(5U, sched->numWells());
BOOST_CHECK(sched->hasWell("PROD1"));

View File

@@ -509,7 +509,8 @@ BOOST_AUTO_TEST_CASE(WellTestWELOPENControlsSet) {
ParserPtr parser(new Parser());
boost::filesystem::path scheduleFile("testdata/integration_tests/SCHEDULE/SCHEDULE_WELOPEN");
DeckPtr deck = parser->parseFile(scheduleFile.string());
ScheduleConstPtr sched(new Schedule(deck));
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( deck );
ScheduleConstPtr sched(new Schedule(grid , deck));
WellConstPtr well1 = sched->getWell("W_1");
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::OPEN, sched->getWell("W_1")->getStatus(0));
@@ -524,7 +525,9 @@ BOOST_AUTO_TEST_CASE(WellTestWGRUPCONWellPropertiesSet) {
ParserPtr parser(new Parser());
boost::filesystem::path scheduleFile("testdata/integration_tests/SCHEDULE/SCHEDULE_WGRUPCON");
DeckPtr deck = parser->parseFile(scheduleFile.string());
ScheduleConstPtr sched(new Schedule(deck));
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( deck );
ScheduleConstPtr sched(new Schedule(grid , deck));
WellConstPtr well1 = sched->getWell("W_1");
BOOST_CHECK(well1->isAvailableForGroupControl(0));
BOOST_CHECK_EQUAL(-1, well1->getGuideRate(0));
@@ -561,7 +564,8 @@ COMPDAT \n\
'W1' 2* 1 1 'OPEN' 1* 32.948 0.311 3047.839 2* 'X' 22.100 /\n\
/\n";
DeckPtr deck = parser->parseString(deckString);
ScheduleConstPtr sched(new Schedule(deck));
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( deck );
ScheduleConstPtr sched(new Schedule(grid , deck));
WellConstPtr well = sched->getWell("W1");
CompletionSetConstPtr completions = well->getCompletions(0);
BOOST_CHECK_EQUAL( 10 , completions->get(0)->getI() );
@@ -586,7 +590,9 @@ BOOST_AUTO_TEST_CASE(WELLS_SHUT) {
ParserPtr parser(new Parser());
boost::filesystem::path scheduleFile("testdata/integration_tests/SCHEDULE/SCHEDULE_SHUT_WELL");
DeckPtr deck = parser->parseFile(scheduleFile.string());
ScheduleConstPtr sched(new Schedule(deck));
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( deck );
ScheduleConstPtr sched(new Schedule(grid , deck));
WellConstPtr well1 = sched->getWell("W1");
WellConstPtr well2 = sched->getWell("W2");
@@ -607,7 +613,9 @@ BOOST_AUTO_TEST_CASE(WellTestWPOLYMER) {
ParserPtr parser(new Parser());
boost::filesystem::path scheduleFile("testdata/integration_tests/SCHEDULE/SCHEDULE_POLYMER");
DeckPtr deck = parser->parseFile(scheduleFile.string());
ScheduleConstPtr sched(new Schedule(deck));
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 30,30,30);
ScheduleConstPtr sched(new Schedule(grid , deck));
BOOST_CHECK_EQUAL(4U, sched->numWells());
BOOST_CHECK(sched->hasWell("INJE01"));