OPM-139: Added methods to Schedule to support opm-core in writing wellinfo to restart files

This commit is contained in:
chflo 2014-12-05 12:59:53 +01:00
parent 4283097f13
commit 82243d0ec1
3 changed files with 80 additions and 0 deletions

View File

@ -504,6 +504,12 @@ namespace Opm {
return m_wells.size();
}
size_t Schedule::numWells(size_t timestep) const {
std::vector<WellConstPtr> wells = getWells(timestep);
return wells.size();
}
bool Schedule::hasWell(const std::string& wellName) const {
return m_wells.hasKey( wellName );
}
@ -629,4 +635,19 @@ namespace Opm {
}
else throw std::invalid_argument("String " + eclipseString + " not recognized as a boolean-convertible string.");
}
size_t Schedule::getMaxNumCompletionsForWells(size_t timestep) const {
size_t ncwmax = 0;
const std::vector<WellConstPtr>& wells = getWells();
for (auto wellIter=wells.begin(); wellIter != wells.end(); ++wellIter) {
WellConstPtr wellPtr = *wellIter;
CompletionSetConstPtr completionsSetPtr = wellPtr->getCompletions(timestep);
if (completionsSetPtr->size() > ncwmax )
ncwmax = completionsSetPtr->size();
}
return ncwmax;
}
}

View File

@ -46,6 +46,8 @@ namespace Opm
TimeMapConstPtr getTimeMap() const;
size_t numWells() const;
size_t numWells(size_t timestep) const;
size_t getMaxNumCompletionsForWells(size_t timestep) const;
bool hasWell(const std::string& wellName) const;
WellPtr getWell(const std::string& wellName) const;
std::vector<WellConstPtr> getWells() const;
@ -56,6 +58,7 @@ namespace Opm
size_t numGroups() const;
bool hasGroup(const std::string& groupName) const;
GroupPtr getGroup(const std::string& groupName) const;
private:
TimeMapPtr m_timeMap;

View File

@ -85,6 +85,43 @@ static DeckPtr createDeckWithWellsOrdered() {
return parser.parseString(input);
}
static DeckPtr createDeckWithWellsAndCompletionData() {
Opm::Parser parser;
std::string input =
"START -- 0 \n"
"1 NOV 1979 / \n"
"SCHEDULE\n"
"DATES -- 1\n"
" 1 DES 1979/ \n"
"/\n"
"WELSPECS\n"
" \'OP_1\' \'OP'\ 9 9 1* \'OIL\' 1* 1* 1* 1* 1* 1* 1* / \n"
" \'OP_2\' \'OP'\ 8 8 1* \'OIL\' 1* 1* 1* 1* 1* 1* 1* / \n"
" \'OP_3\' \'OP'\ 7 7 1* \'OIL\' 1* 1* 1* 1* 1* 1* 1* / \n"
"/\n"
"COMPDAT\n"
" \'OP_1\' 9 9 1 1 \'OPEN\' 1* 32.948 0.311 3047.839 1* 1* \'X\' 22.100 / \n"
" \'OP_1\' 9 9 2 2 \'OPEN\' 1* 46.825 0.311 4332.346 1* 1* \'X\' 22.123 / \n"
" \'OP_2\' 8 8 1 3 \'OPEN\' 1* 1.168 0.311 107.872 1* 1* \'Y\' 21.925 / \n"
" \'OP_2\' 8 7 3 3 \'OPEN\' 1* 15.071 0.311 1391.859 1* 1* \'Y\' 21.920 / \n"
" \'OP_2\' 8 7 3 6 \'OPEN\' 1* 6.242 0.311 576.458 1* 1* \'Y\' 21.915 / \n"
" \'OP_3\' 7 7 1 1 \'OPEN\' 1* 27.412 0.311 2445.337 1* 1* \'Y\' 18.521 / \n"
" \'OP_3\' 7 7 2 2 \'OPEN\' 1* 55.195 0.311 4923.842 1* 1* \'Y\' 18.524 / \n"
"/\n"
"DATES -- 2,3\n"
" 10 JUL 2007 / \n"
" 10 AUG 2007 / \n"
"/\n"
"COMPDAT\n"
" \'OP_1\' 9 9 3 9 \'OPEN\' 1* 32.948 0.311 3047.839 1* 1* \'X\' 22.100 / \n"
"/\n";
return parser.parseString(input);
}
BOOST_AUTO_TEST_CASE(CreateScheduleDeckMissingReturnsDefaults) {
DeckPtr deck(new Deck());
DeckKeywordPtr keyword(new DeckKeyword("SCHEDULE"));
@ -215,3 +252,22 @@ BOOST_AUTO_TEST_CASE(WellsIteratorWithRegex_HasWells_WellsReturned) {
BOOST_CHECK_EQUAL(1U, wells.size());
}
BOOST_AUTO_TEST_CASE(ReturnNumWellsTimestep) {
DeckPtr deck = createDeckWithWells();
Schedule schedule(deck);
BOOST_CHECK_EQUAL(schedule.numWells(0), 1);
BOOST_CHECK_EQUAL(schedule.numWells(1), 1);
BOOST_CHECK_EQUAL(schedule.numWells(2), 1);
BOOST_CHECK_EQUAL(schedule.numWells(3), 3);
}
BOOST_AUTO_TEST_CASE(ReturnMaxNumCompletionsForWellsInTimestep) {
DeckPtr deck = createDeckWithWellsAndCompletionData();
Schedule schedule(deck);
BOOST_CHECK_EQUAL(schedule.getMaxNumCompletionsForWells(1), 7);
BOOST_CHECK_EQUAL(schedule.getMaxNumCompletionsForWells(3), 9);
}