Added Well::Producercontrolmode
This commit is contained in:
@@ -163,12 +163,14 @@ namespace Opm {
|
||||
for (size_t recordNr = 0; recordNr < keyword->size(); recordNr++) {
|
||||
DeckRecordConstPtr record = keyword->getRecord(recordNr);
|
||||
const std::string& wellName = record->getItem("WELL")->getString(0);
|
||||
WellPtr well = getWell(wellName);
|
||||
double orat = record->getItem("ORAT")->getSIDouble(0);
|
||||
double wrat = record->getItem("WRAT")->getSIDouble(0);
|
||||
double grat = record->getItem("GRAT")->getSIDouble(0);
|
||||
WellCommon::StatusEnum status = WellCommon::StatusFromString( record->getItem("STATUS")->getString(0));
|
||||
WellPtr well = getWell(wellName);
|
||||
double orat = record->getItem("ORAT")->getSIDouble(0);
|
||||
double wrat = record->getItem("WRAT")->getSIDouble(0);
|
||||
double grat = record->getItem("GRAT")->getSIDouble(0);
|
||||
WellProducer::ControlModeEnum control = WellProducer::ControlModeFromString( record->getItem("CMODE")->getString(0));
|
||||
WellCommon::StatusEnum status = WellCommon::StatusFromString( record->getItem("STATUS")->getString(0));
|
||||
|
||||
well->setProducerControlMode( currentStep , control );
|
||||
well->setStatus( currentStep , status );
|
||||
well->setOilRate(currentStep, orat);
|
||||
well->setWaterRate(currentStep, wrat);
|
||||
@@ -177,13 +179,20 @@ namespace Opm {
|
||||
{
|
||||
double liquidRate = 0;
|
||||
double resVRate = 0;
|
||||
|
||||
double BHPLimit = 0;
|
||||
double THPLimit = 0;
|
||||
|
||||
if (isPredictionMode) {
|
||||
liquidRate = record->getItem("LRAT")->getSIDouble(0);
|
||||
resVRate = record->getItem("RESV")->getSIDouble(0);
|
||||
BHPLimit = record->getItem("BHP")->getSIDouble(0);
|
||||
THPLimit = record->getItem("THP")->getSIDouble(0);
|
||||
}
|
||||
|
||||
well->setLiquidRate( currentStep , liquidRate );
|
||||
well->setResVRate( currentStep , resVRate );
|
||||
well->setBHPLimit(currentStep, BHPLimit);
|
||||
well->setTHPLimit(currentStep, THPLimit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,6 +214,58 @@ namespace Opm {
|
||||
|
||||
/*****************************************************************/
|
||||
|
||||
namespace WellProducer {
|
||||
|
||||
const std::string ControlMode2String( ControlModeEnum enumValue ) {
|
||||
switch( enumValue ) {
|
||||
case ORAT:
|
||||
return "ORAT";
|
||||
case WRAT:
|
||||
return "WRAT";
|
||||
case GRAT:
|
||||
return "GRAT";
|
||||
case LRAT:
|
||||
return "LRAT";
|
||||
case CRAT:
|
||||
return "CRAT";
|
||||
case RESV:
|
||||
return "RESV";
|
||||
case BHP:
|
||||
return "BHP";
|
||||
case THP:
|
||||
return "THP";
|
||||
case GRUP:
|
||||
return "GRUP";
|
||||
default:
|
||||
throw std::invalid_argument("unhandled enum value");
|
||||
}
|
||||
}
|
||||
|
||||
ControlModeEnum ControlModeFromString( const std::string& stringValue ) {
|
||||
if (stringValue == "ORAT")
|
||||
return ORAT;
|
||||
else if (stringValue == "WRAT")
|
||||
return WRAT;
|
||||
else if (stringValue == "GRAT")
|
||||
return GRAT;
|
||||
else if (stringValue == "LRAT")
|
||||
return LRAT;
|
||||
else if (stringValue == "CRAT")
|
||||
return CRAT;
|
||||
else if (stringValue == "RESV")
|
||||
return RESV;
|
||||
else if (stringValue == "BHP")
|
||||
return BHP;
|
||||
else if (stringValue == "THP")
|
||||
return THP;
|
||||
else if (stringValue == "GRUP")
|
||||
return GRUP;
|
||||
else
|
||||
throw std::invalid_argument("Unknown enum state string: " + stringValue );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace WellInjector {
|
||||
|
||||
const std::string Type2String( TypeEnum enumValue ) {
|
||||
|
||||
@@ -83,6 +83,29 @@ namespace Opm {
|
||||
TypeEnum TypeFromString( const std::string& stringValue );
|
||||
};
|
||||
|
||||
|
||||
namespace WellProducer {
|
||||
|
||||
enum ControlModeEnum {
|
||||
ORAT = 1,
|
||||
WRAT = 2 ,
|
||||
GRAT = 3,
|
||||
LRAT = 4,
|
||||
CRAT = 5,
|
||||
RESV = 6,
|
||||
BHP = 7,
|
||||
THP = 8,
|
||||
GRUP = 9
|
||||
};
|
||||
/*
|
||||
The items BHP, THP and GRUP only apply in prediction mode: WCONPROD
|
||||
*/
|
||||
|
||||
|
||||
const std::string ControlMode2String( ControlModeEnum enumValue );
|
||||
ControlModeEnum ControlModeFromString( const std::string& stringValue );
|
||||
};
|
||||
|
||||
|
||||
namespace GroupInjection {
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ namespace Opm {
|
||||
m_THPLimit(new DynamicState<double>(timeMap , 0.0)),
|
||||
m_injectorType(new DynamicState<WellInjector::TypeEnum>(timeMap, WellInjector::WATER)),
|
||||
m_injectorControlMode(new DynamicState<WellInjector::ControlModeEnum>(timeMap, WellInjector::RATE)),
|
||||
m_producerControlMode(new DynamicState<WellProducer::ControlModeEnum>(timeMap, WellProducer::ORAT)),
|
||||
m_status(new DynamicState<WellCommon::StatusEnum>(timeMap, WellCommon::OPEN)),
|
||||
m_inPredictionMode(new DynamicState<bool>(timeMap, true)),
|
||||
m_isProducer(new DynamicState<bool>(timeMap, true)) ,
|
||||
@@ -105,6 +106,14 @@ namespace Opm {
|
||||
m_injectorControlMode->add(timeStep , injectorControlMode);
|
||||
}
|
||||
|
||||
WellProducer::ControlModeEnum Well::getProducerControlMode(size_t timeStep) const {
|
||||
return m_producerControlMode->get(timeStep);
|
||||
}
|
||||
|
||||
void Well::setProducerControlMode(size_t timeStep, WellProducer::ControlModeEnum controlMode) {
|
||||
m_producerControlMode->add(timeStep , controlMode);
|
||||
}
|
||||
|
||||
|
||||
double Well::getOilRate(size_t timeStep) const {
|
||||
return m_oilRate->get(timeStep);
|
||||
|
||||
@@ -59,11 +59,13 @@ namespace Opm {
|
||||
double getTHPLimit(size_t timeStep) const;
|
||||
void setTHPLimit(size_t timeStep, double THPLimit);
|
||||
WellInjector::TypeEnum getInjectorType(size_t timeStep) const;
|
||||
void setInjectorType(size_t timeStep, WellInjector::TypeEnum injectorType);
|
||||
void setInjectorType(size_t timeStep, WellInjector::TypeEnum injectorType);
|
||||
WellInjector::ControlModeEnum getInjectorControlMode(size_t timeStep) const;
|
||||
void setInjectorControlMode(size_t timeStep, WellInjector::ControlModeEnum injectorControlMode);
|
||||
void setInjectorControlMode(size_t timeStep, WellInjector::ControlModeEnum injectorControlMode);
|
||||
WellProducer::ControlModeEnum getProducerControlMode(size_t timeStep) const;
|
||||
void setProducerControlMode(size_t timeStep, WellProducer::ControlModeEnum controlMode);
|
||||
WellCommon::StatusEnum getStatus(size_t timeStep) const;
|
||||
void setStatus(size_t timeStep, WellCommon::StatusEnum Status);
|
||||
void setStatus(size_t timeStep, WellCommon::StatusEnum Status);
|
||||
|
||||
|
||||
int getHeadI() const;
|
||||
@@ -95,6 +97,7 @@ namespace Opm {
|
||||
std::shared_ptr<DynamicState<double> > m_THPLimit;
|
||||
std::shared_ptr<DynamicState<WellInjector::TypeEnum> > m_injectorType;
|
||||
std::shared_ptr<DynamicState<WellInjector::ControlModeEnum> > m_injectorControlMode;
|
||||
std::shared_ptr<DynamicState<WellProducer::ControlModeEnum> > m_producerControlMode;
|
||||
std::shared_ptr<DynamicState<WellCommon::StatusEnum> > m_status;
|
||||
|
||||
std::shared_ptr<DynamicState<bool> > m_inPredictionMode;
|
||||
|
||||
@@ -321,3 +321,56 @@ BOOST_AUTO_TEST_CASE(InjectorStatusEnumLoop) {
|
||||
BOOST_CHECK_EQUAL( "AUTO" , WellCommon::Status2String(WellCommon::StatusFromString( "AUTO" ) ));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*****************************************************************/
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ProducerCOntrolMopdeEnum2String) {
|
||||
BOOST_CHECK_EQUAL( "ORAT" , WellProducer::ControlMode2String(WellProducer::ORAT));
|
||||
BOOST_CHECK_EQUAL( "WRAT" , WellProducer::ControlMode2String(WellProducer::WRAT));
|
||||
BOOST_CHECK_EQUAL( "GRAT" , WellProducer::ControlMode2String(WellProducer::GRAT));
|
||||
BOOST_CHECK_EQUAL( "LRAT" , WellProducer::ControlMode2String(WellProducer::LRAT));
|
||||
BOOST_CHECK_EQUAL( "CRAT" , WellProducer::ControlMode2String(WellProducer::CRAT));
|
||||
BOOST_CHECK_EQUAL( "RESV" , WellProducer::ControlMode2String(WellProducer::RESV));
|
||||
BOOST_CHECK_EQUAL( "BHP" , WellProducer::ControlMode2String(WellProducer::BHP));
|
||||
BOOST_CHECK_EQUAL( "THP" , WellProducer::ControlMode2String(WellProducer::THP));
|
||||
BOOST_CHECK_EQUAL( "GRUP" , WellProducer::ControlMode2String(WellProducer::GRUP));
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ProducerControlModeEnumFromString) {
|
||||
BOOST_CHECK_THROW( WellProducer::ControlModeFromString("XRAT") , std::invalid_argument );
|
||||
BOOST_CHECK_EQUAL( WellProducer::ORAT , WellProducer::ControlModeFromString("ORAT"));
|
||||
BOOST_CHECK_EQUAL( WellProducer::WRAT , WellProducer::ControlModeFromString("WRAT"));
|
||||
BOOST_CHECK_EQUAL( WellProducer::GRAT , WellProducer::ControlModeFromString("GRAT"));
|
||||
BOOST_CHECK_EQUAL( WellProducer::LRAT , WellProducer::ControlModeFromString("LRAT"));
|
||||
BOOST_CHECK_EQUAL( WellProducer::CRAT , WellProducer::ControlModeFromString("CRAT"));
|
||||
BOOST_CHECK_EQUAL( WellProducer::RESV , WellProducer::ControlModeFromString("RESV"));
|
||||
BOOST_CHECK_EQUAL( WellProducer::BHP , WellProducer::ControlModeFromString("BHP" ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::THP , WellProducer::ControlModeFromString("THP" ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::GRUP , WellProducer::ControlModeFromString("GRUP"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ProducerControlModeEnumLoop) {
|
||||
BOOST_CHECK_EQUAL( WellProducer::ORAT , WellProducer::ControlModeFromString( WellProducer::ControlMode2String( WellProducer::ORAT ) ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::WRAT , WellProducer::ControlModeFromString( WellProducer::ControlMode2String( WellProducer::WRAT ) ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::GRAT , WellProducer::ControlModeFromString( WellProducer::ControlMode2String( WellProducer::GRAT ) ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::LRAT , WellProducer::ControlModeFromString( WellProducer::ControlMode2String( WellProducer::LRAT ) ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::CRAT , WellProducer::ControlModeFromString( WellProducer::ControlMode2String( WellProducer::CRAT ) ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::RESV , WellProducer::ControlModeFromString( WellProducer::ControlMode2String( WellProducer::RESV ) ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::BHP , WellProducer::ControlModeFromString( WellProducer::ControlMode2String( WellProducer::BHP ) ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::THP , WellProducer::ControlModeFromString( WellProducer::ControlMode2String( WellProducer::THP ) ));
|
||||
BOOST_CHECK_EQUAL( WellProducer::GRUP , WellProducer::ControlModeFromString( WellProducer::ControlMode2String( WellProducer::GRUP ) ));
|
||||
|
||||
BOOST_CHECK_EQUAL( "ORAT" , WellProducer::ControlMode2String(WellProducer::ControlModeFromString( "ORAT" ) ));
|
||||
BOOST_CHECK_EQUAL( "WRAT" , WellProducer::ControlMode2String(WellProducer::ControlModeFromString( "WRAT" ) ));
|
||||
BOOST_CHECK_EQUAL( "GRAT" , WellProducer::ControlMode2String(WellProducer::ControlModeFromString( "GRAT" ) ));
|
||||
BOOST_CHECK_EQUAL( "LRAT" , WellProducer::ControlMode2String(WellProducer::ControlModeFromString( "LRAT" ) ));
|
||||
BOOST_CHECK_EQUAL( "CRAT" , WellProducer::ControlMode2String(WellProducer::ControlModeFromString( "CRAT" ) ));
|
||||
BOOST_CHECK_EQUAL( "RESV" , WellProducer::ControlMode2String(WellProducer::ControlModeFromString( "RESV" ) ));
|
||||
BOOST_CHECK_EQUAL( "BHP" , WellProducer::ControlMode2String(WellProducer::ControlModeFromString( "BHP" ) ));
|
||||
BOOST_CHECK_EQUAL( "THP" , WellProducer::ControlMode2String(WellProducer::ControlModeFromString( "THP" ) ));
|
||||
BOOST_CHECK_EQUAL( "GRUP" , WellProducer::ControlMode2String(WellProducer::ControlModeFromString( "GRUP" ) ));
|
||||
}
|
||||
|
||||
@@ -276,12 +276,15 @@ BOOST_AUTO_TEST_CASE(InjectorType) {
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(InjectorControlMode) {
|
||||
BOOST_AUTO_TEST_CASE(ControlMode) {
|
||||
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
||||
Opm::Well well("WELL1", 1, 2, 2334.32, timeMap, 0);
|
||||
|
||||
well.setInjectorControlMode( 1 , Opm::WellInjector::RESV );
|
||||
BOOST_CHECK_EQUAL( Opm::WellInjector::RESV , well.getInjectorControlMode( 5 ));
|
||||
|
||||
well.setProducerControlMode( 1 , Opm::WellProducer::GRUP );
|
||||
BOOST_CHECK_EQUAL( Opm::WellProducer::GRUP , well.getProducerControlMode( 5 ));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user