Using OrderedMap to hold wells in Schedule object - thereby preserving
well insert order.
This commit is contained in:
parent
4c477b6f70
commit
142255268d
@ -506,7 +506,7 @@ namespace Opm {
|
||||
double refDepth = record->getItem("REF_DEPTH")->getSIDouble(0);
|
||||
Phase::PhaseEnum preferredPhase = Phase::PhaseEnumFromString(record->getItem("PHASE")->getTrimmedString(0));
|
||||
WellPtr well(new Well(wellName, headI, headJ, refDepth, preferredPhase, m_timeMap , timeStep));
|
||||
m_wells[ wellName ] = well;
|
||||
m_wells.insert( wellName , well);
|
||||
}
|
||||
|
||||
size_t Schedule::numWells() const {
|
||||
@ -514,14 +514,11 @@ namespace Opm {
|
||||
}
|
||||
|
||||
bool Schedule::hasWell(const std::string& wellName) const {
|
||||
return m_wells.find(wellName) != m_wells.end();
|
||||
return m_wells.hasKey( wellName );
|
||||
}
|
||||
|
||||
WellPtr Schedule::getWell(const std::string& wellName) const {
|
||||
if (hasWell(wellName)) {
|
||||
return m_wells.at(wellName);
|
||||
} else
|
||||
throw std::invalid_argument("Well: " + wellName + " does not exist");
|
||||
return m_wells.get( wellName );
|
||||
}
|
||||
|
||||
std::vector<WellConstPtr> Schedule::getWells() const {
|
||||
@ -535,7 +532,7 @@ namespace Opm {
|
||||
|
||||
std::vector<WellConstPtr> wells;
|
||||
for (auto iter = m_wells.begin(); iter != m_wells.end(); ++iter) {
|
||||
WellConstPtr well = (*iter).second;
|
||||
WellConstPtr well = *iter;
|
||||
if (well->hasBeenDefined(timeStep)) {
|
||||
wells.push_back(well);
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/GroupTree.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Group.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/OrderedMap.hpp>
|
||||
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
||||
|
||||
#include <memory>
|
||||
@ -56,7 +57,7 @@ namespace Opm
|
||||
|
||||
private:
|
||||
TimeMapPtr m_timeMap;
|
||||
std::map<std::string , WellPtr> m_wells;
|
||||
OrderedMap<WellPtr> m_wells;
|
||||
std::map<std::string , GroupPtr> m_groups;
|
||||
std::shared_ptr<DynamicState<GroupTreePtr> > m_rootGroupTree;
|
||||
|
||||
|
@ -70,6 +70,22 @@ DeckPtr createDeckWithWells() {
|
||||
}
|
||||
|
||||
|
||||
DeckPtr createDeckWithWellsOrdered() {
|
||||
Opm::Parser parser;
|
||||
std::string input =
|
||||
"START -- 0 \n"
|
||||
"10 MAI 2007 / \n"
|
||||
"SCHEDULE\n"
|
||||
"WELSPECS\n"
|
||||
" \'CW_1\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n"
|
||||
" \'BW_2\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n"
|
||||
" \'AW_3\' \'OP\' 20 51 3.92 \'OIL\' 7* / \n"
|
||||
"/\n";
|
||||
|
||||
return parser.parseString(input);
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CreateScheduleDeckMissingSCHEDULE_Throws) {
|
||||
DeckPtr deck(new Deck());
|
||||
@ -86,6 +102,18 @@ BOOST_AUTO_TEST_CASE(CreateScheduleDeckMissingReturnsDefaults) {
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWellsOrdered) {
|
||||
DeckPtr deck = createDeckWithWellsOrdered();
|
||||
Schedule schedule(deck);
|
||||
std::vector<WellConstPtr> wells = schedule.getWells();
|
||||
|
||||
BOOST_CHECK_EQUAL( "CW_1" , wells[0]->name());
|
||||
BOOST_CHECK_EQUAL( "BW_2" , wells[1]->name());
|
||||
BOOST_CHECK_EQUAL( "AW_3" , wells[2]->name());
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithStart) {
|
||||
DeckPtr deck = createDeck();
|
||||
Schedule schedule(deck);
|
||||
|
Loading…
Reference in New Issue
Block a user