Added createStep flag to Well constructor to be able to track well creation time.

This commit is contained in:
Joakim Hove
2013-11-25 16:25:57 +01:00
parent 26edb7735b
commit ea4f5df5ea
7 changed files with 46 additions and 24 deletions

View File

@@ -133,7 +133,7 @@ namespace Opm {
}
if (!hasWell(wellName)) {
addWell(wellName);
addWell(wellName , currentStep);
}
WellPtr well = getWell(wellName);
@@ -272,8 +272,8 @@ namespace Opm {
return m_rootGroupTree->get(timeStep);
}
void Schedule::addWell(const std::string& wellName) {
WellPtr well(new Well(wellName, m_timeMap));
void Schedule::addWell(const std::string& wellName, size_t timeStep) {
WellPtr well(new Well(wellName, m_timeMap , timeStep));
m_wells[ wellName ] = well;
}

View File

@@ -62,7 +62,7 @@ namespace Opm
void iterateScheduleSection(DeckConstPtr deck);
bool handleGroupFromWELSPECS(const std::string& groupName, GroupTreePtr newTree) const;
void addGroup(const std::string& groupName);
void addWell(const std::string& wellName);
void addWell(const std::string& wellName , size_t timeStep);
void handleWELSPECS(DeckKeywordConstPtr keyword, size_t currentStep);
void handleWCONProducer(DeckKeywordConstPtr keyword, size_t currentStep, bool isPredictionMode);
void handleWCONHIST(DeckKeywordConstPtr keyword , size_t currentStep);

View File

@@ -29,7 +29,7 @@
namespace Opm {
Well::Well(const std::string& name , TimeMapConstPtr timeMap)
Well::Well(const std::string& name , TimeMapConstPtr timeMap , size_t createTimeStep)
: m_oilRate( new DynamicState<double>( timeMap , 0.0)) ,
m_gasRate(new DynamicState<double>(timeMap, 0.0)),
m_waterRate(new DynamicState<double>(timeMap, 0.0)),
@@ -40,6 +40,7 @@ namespace Opm {
m_groupName( new DynamicState<std::string>( timeMap , "" ))
{
m_name = name;
m_createTimeStep = createTimeStep;
}
const std::string& Well::name() const {
@@ -47,6 +48,14 @@ namespace Opm {
}
bool Well::hasBeenDefined(size_t timeStep) const {
if (timeStep < m_createTimeStep)
return false;
else
return true;
}
double Well::getOilRate(size_t timeStep) const {
return m_oilRate->get(timeStep);
}

View File

@@ -33,9 +33,10 @@ namespace Opm {
class Well {
public:
Well(const std::string& name, TimeMapConstPtr timeMap);
Well(const std::string& name, TimeMapConstPtr timeMap , size_t createTimeStep);
const std::string& name() const;
bool hasBeenDefined(size_t timeStep) const;
const std::string getGroupName(size_t timeStep) const;
void setGroupName(size_t timeStep , const std::string& groupName);
@@ -59,6 +60,7 @@ namespace Opm {
void switch2Producer(size_t timeStep );
void switch2Injector(size_t timeStep );
size_t m_createTimeStep;
std::string m_name;
boost::shared_ptr<DynamicState<double> > m_oilRate;
boost::shared_ptr<DynamicState<double> > m_gasRate;

View File

@@ -117,8 +117,8 @@ BOOST_AUTO_TEST_CASE(GroupAddWell) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Group group("G1" , timeMap);
Opm::WellPtr well1(new Opm::Well("WELL1" , timeMap));
Opm::WellPtr well2(new Opm::Well("WELL2" , timeMap));
Opm::WellPtr well1(new Opm::Well("WELL1" , timeMap , 0));
Opm::WellPtr well2(new Opm::Well("WELL2" , timeMap , 0));
BOOST_CHECK_EQUAL(0U , group.numWells(2));
group.addWell( 3 , well1 );
@@ -154,8 +154,8 @@ BOOST_AUTO_TEST_CASE(GroupAddAndDelWell) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Group group("G1" , timeMap);
Opm::WellPtr well1(new Opm::Well("WELL1" , timeMap));
Opm::WellPtr well2(new Opm::Well("WELL2" , timeMap));
Opm::WellPtr well1(new Opm::Well("WELL1" , timeMap , 0));
Opm::WellPtr well2(new Opm::Well("WELL2" , timeMap , 0));
BOOST_CHECK_EQUAL(0U , group.numWells(2));
group.addWell( 3 , well1 );

View File

@@ -53,8 +53,8 @@ BOOST_AUTO_TEST_CASE(AddAndDeleteWell) {
Opm::WellSet wellSet;
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::WellPtr well(new Opm::Well("WELL1" , timeMap));
Opm::WellPtr well2(new Opm::Well("WELL2" , timeMap));
Opm::WellPtr well(new Opm::Well("WELL1" , timeMap , 0));
Opm::WellPtr well2(new Opm::Well("WELL2" , timeMap , 0));
wellSet.addWell( well );
BOOST_CHECK_EQUAL(true , wellSet.hasWell("WELL1"));
@@ -78,8 +78,8 @@ BOOST_AUTO_TEST_CASE(AddWellSameName) {
Opm::WellSet wellSet;
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::WellPtr well1(new Opm::Well("WELL" , timeMap));
Opm::WellPtr well2(new Opm::Well("WELL" , timeMap));
Opm::WellPtr well1(new Opm::Well("WELL" , timeMap, 0));
Opm::WellPtr well2(new Opm::Well("WELL" , timeMap , 0));
wellSet.addWell( well1 );
BOOST_CHECK_EQUAL(true , wellSet.hasWell("WELL"));

View File

@@ -40,14 +40,25 @@ Opm::TimeMapPtr createXDaysTimeMap(size_t numDays) {
BOOST_AUTO_TEST_CASE(CreateWell_CorrectNameAndDefaultValues) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap , 0);
BOOST_CHECK_EQUAL( "WELL1" , well.name() );
BOOST_CHECK_EQUAL(0.0 , well.getOilRate( 5 ));
}
BOOST_AUTO_TEST_CASE(CreateWellCreateTimeStepOK) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap , 5);
BOOST_CHECK_EQUAL( false , well.hasBeenDefined(0) );
BOOST_CHECK_EQUAL( false , well.hasBeenDefined(4) );
BOOST_CHECK_EQUAL( true , well.hasBeenDefined(5) );
BOOST_CHECK_EQUAL( true , well.hasBeenDefined(7) );
}
BOOST_AUTO_TEST_CASE(setOilRate_RateSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap , 0);
BOOST_CHECK_EQUAL(0.0 , well.getOilRate( 5 ));
well.setOilRate( 5 , 99 );
@@ -57,7 +68,7 @@ BOOST_AUTO_TEST_CASE(setOilRate_RateSetCorrect) {
BOOST_AUTO_TEST_CASE(setPredictionMode_ModeSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap , 0);
BOOST_CHECK_EQUAL( true, well.isInPredictionMode( 5 ));
well.setInPredictionMode( 5 , false ); // Go to history mode
@@ -69,7 +80,7 @@ BOOST_AUTO_TEST_CASE(setPredictionMode_ModeSetCorrect) {
BOOST_AUTO_TEST_CASE(NewWellZeroCompletions) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap , 0);
Opm::CompletionSetConstPtr completions = well.getCompletions( 0 );
BOOST_CHECK_EQUAL( 0U , completions->size());
}
@@ -77,7 +88,7 @@ BOOST_AUTO_TEST_CASE(NewWellZeroCompletions) {
BOOST_AUTO_TEST_CASE(UpdateCompletions) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap , 0);
Opm::CompletionSetConstPtr completions = well.getCompletions( 0 );
BOOST_CHECK_EQUAL( 0U , completions->size());
@@ -115,7 +126,7 @@ BOOST_AUTO_TEST_CASE(UpdateCompletions) {
BOOST_AUTO_TEST_CASE(setGasRate_RateSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap , 0);
BOOST_CHECK_EQUAL(0.0 , well.getGasRate( 5 ));
well.setGasRate( 5 , 108 );
@@ -127,7 +138,7 @@ BOOST_AUTO_TEST_CASE(setGasRate_RateSetCorrect) {
BOOST_AUTO_TEST_CASE(setWaterRate_RateSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap , 0);
BOOST_CHECK_EQUAL(0.0 , well.getWaterRate( 5 ));
well.setWaterRate( 5 , 108 );
@@ -138,7 +149,7 @@ BOOST_AUTO_TEST_CASE(setWaterRate_RateSetCorrect) {
BOOST_AUTO_TEST_CASE(setInjectionRate_RateSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap , 0);
BOOST_CHECK_EQUAL(0.0 , well.getInjectionRate( 5 ));
well.setInjectionRate( 5 , 108 );
@@ -149,7 +160,7 @@ BOOST_AUTO_TEST_CASE(setInjectionRate_RateSetCorrect) {
BOOST_AUTO_TEST_CASE(isProducerCorrectlySet) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap ,0);
/* 1: Well is created as producer */
BOOST_CHECK_EQUAL( false , well.isInjector(0));
@@ -186,7 +197,7 @@ BOOST_AUTO_TEST_CASE(isProducerCorrectlySet) {
BOOST_AUTO_TEST_CASE(GroupnameCorretlySet) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , timeMap);
Opm::Well well("WELL1" , timeMap ,0);
BOOST_CHECK_EQUAL("" , well.getGroupName(2));