Using pointers for WellProductionProperties

This commit is contained in:
Atle Haugan
2014-03-10 13:18:56 +01:00
parent cd549467b9
commit 9650fce19a
5 changed files with 218 additions and 186 deletions

View File

@@ -185,9 +185,6 @@ namespace Opm {
well->setProducerControlMode( currentStep , control );
}
well->setStatus( currentStep , status );
well->setOilRate(currentStep, orat);
well->setWaterRate(currentStep, wrat);
well->setGasRate(currentStep, grat);
well->setInPredictionMode(currentStep, isPredictionMode);
{
double liquidRate = 0;
@@ -202,8 +199,20 @@ namespace Opm {
resVRate = record->getItem("RESV")->getSIDouble(0);
}
well->setLiquidRate( currentStep , liquidRate );
well->setResVRate( currentStep , resVRate );
WellProductionPropertiesPtr properties(new WellProductionProperties());
properties->OilRate = orat;
properties->WaterRate = wrat;
properties->GasRate = grat;
properties->LiquidRate = liquidRate;
properties->ResVRate = resVRate;
//properties->ProductionControls = 0;
std::cout << "Setting production properties at tstep=" << currentStep << " to " << properties->ProductionControls << std::endl;
well->setProductionProperties(currentStep, properties);
// well->setOilRate(currentStep, orat);
// well->setWaterRate(currentStep, wrat);
// well->setGasRate(currentStep, grat);
// well->setLiquidRate( currentStep , liquidRate );
// well->setResVRate( currentStep , resVRate );
well->setBHPLimit(currentStep, BHPLimit , true);
well->setTHPLimit(currentStep, THPLimit , true);

View File

@@ -50,7 +50,7 @@ namespace Opm {
m_guideRatePhase(new DynamicState<GuideRate::GuideRatePhaseEnum>(timeMap, GuideRate::UNDEFINED)),
m_guideRateScalingFactor(new DynamicState<double>(timeMap, 1.0)),
m_completions( new DynamicState<CompletionSetConstPtr>( timeMap , CompletionSetConstPtr( new CompletionSet()) )),
m_productionProperties( new DynamicState<WellProductionProperties>(timeMap, WellProductionProperties() )),
m_productionProperties( new DynamicState<WellProductionPropertiesPtr>(timeMap, WellProductionPropertiesPtr(new WellProductionProperties()) )),
m_groupName( new DynamicState<std::string>( timeMap , "" )),
m_headI(headI),
m_headJ(headJ),
@@ -65,36 +65,38 @@ namespace Opm {
}
void Well::setProductionProperties(size_t timeStep , const WellProductionProperties newProperties) {
void Well::setProductionProperties(size_t timeStep , const WellProductionPropertiesPtr newProperties) {
m_isProducer->add(timeStep , true);
WellProductionProperties copyToBeSaved = getProductionProperties(timeStep);
if ((copyToBeSaved.ProductionControls != newProperties.ProductionControls)) {
copyToBeSaved.ProductionControls = newProperties.ProductionControls;
WellProductionPropertiesPtr copyToBeSaved = getProductionProperties(timeStep);
// std::cout << "setProductionProperties(): getProductionProperties returned " << copyToBeSaved->ProductionControls << " at timestep " << timeStep << std::endl;
// if ((copyToBeSaved->ProductionControls != newProperties->ProductionControls)) {
copyToBeSaved->ProductionControls = newProperties->ProductionControls;
// }
if (copyToBeSaved->OilRate != newProperties->OilRate) {
copyToBeSaved->OilRate = newProperties->OilRate;
copyToBeSaved->ProductionControls += WellProducer::ORAT;
}
if (copyToBeSaved.OilRate != newProperties.OilRate) {
copyToBeSaved.OilRate = newProperties.OilRate;
copyToBeSaved.ProductionControls += WellProducer::ORAT;
if (copyToBeSaved->GasRate != newProperties->GasRate) {
copyToBeSaved->GasRate = newProperties->GasRate;
copyToBeSaved->ProductionControls += WellProducer::GRAT;
}
if (copyToBeSaved.GasRate != newProperties.GasRate) {
copyToBeSaved.GasRate = newProperties.GasRate;
copyToBeSaved.ProductionControls += WellProducer::GRAT;
if (copyToBeSaved->WaterRate != newProperties->WaterRate) {
copyToBeSaved->WaterRate = newProperties->WaterRate;
copyToBeSaved->ProductionControls += WellProducer::WRAT;
}
if (copyToBeSaved.WaterRate != newProperties.WaterRate) {
copyToBeSaved.WaterRate = newProperties.WaterRate;
copyToBeSaved.ProductionControls += WellProducer::WRAT;
if (copyToBeSaved->LiquidRate != newProperties->LiquidRate) {
copyToBeSaved->LiquidRate = newProperties->LiquidRate;
copyToBeSaved->ProductionControls += WellProducer::LRAT;
}
if (copyToBeSaved.LiquidRate != newProperties.LiquidRate) {
copyToBeSaved.LiquidRate = newProperties.LiquidRate;
copyToBeSaved.ProductionControls += WellProducer::LRAT;
}
if (copyToBeSaved.ResVRate != newProperties.ResVRate) {
copyToBeSaved.ResVRate = newProperties.ResVRate;
copyToBeSaved.ProductionControls += WellProducer::RESV;
if (copyToBeSaved->ResVRate != newProperties->ResVRate) {
copyToBeSaved->ResVRate = newProperties->ResVRate;
copyToBeSaved->ProductionControls += WellProducer::RESV;
}
std::cout << "setProductionProperties(): Setting new value: " << copyToBeSaved->ProductionControls << " at timestep " << timeStep << std::endl;
m_productionProperties->add(timeStep, copyToBeSaved);
}
WellProductionProperties Well::getProductionProperties(size_t timeStep) const {
WellProductionPropertiesPtr Well::getProductionProperties(size_t timeStep) const {
return m_productionProperties->get(timeStep);
}
@@ -164,56 +166,56 @@ namespace Opm {
}
double Well::getOilRate(size_t timeStep) const {
return getProductionProperties(timeStep).OilRate;
}
// double Well::getOilRate(size_t timeStep) const {
// return getProductionProperties(timeStep).OilRate;
// }
void Well::setOilRate(size_t timeStep, double oilRate) {
WellProductionProperties properties = getProductionProperties(timeStep);
properties.OilRate = oilRate;
setProductionProperties(timeStep, properties);
}
// void Well::setOilRate(size_t timeStep, double oilRate) {
// WellProductionProperties properties = getProductionProperties(timeStep);
// properties.OilRate = oilRate;
// setProductionProperties(timeStep, properties);
// }
double Well::getGasRate(size_t timeStep) const {
return getProductionProperties(timeStep).GasRate;
}
// double Well::getGasRate(size_t timeStep) const {
// return getProductionProperties(timeStep).GasRate;
// }
void Well::setGasRate(size_t timeStep, double gasRate) {
WellProductionProperties properties = getProductionProperties(timeStep);
properties.GasRate = gasRate;
setProductionProperties(timeStep, properties);
}
// void Well::setGasRate(size_t timeStep, double gasRate) {
// WellProductionProperties properties = getProductionProperties(timeStep);
// properties.GasRate = gasRate;
// setProductionProperties(timeStep, properties);
// }
double Well::getWaterRate(size_t timeStep) const {
return getProductionProperties(timeStep).WaterRate;
}
// double Well::getWaterRate(size_t timeStep) const {
// return getProductionProperties(timeStep).WaterRate;
// }
void Well::setWaterRate(size_t timeStep, double waterRate) {
WellProductionProperties properties = getProductionProperties(timeStep);
properties.WaterRate = waterRate;
setProductionProperties(timeStep, properties);
}
// void Well::setWaterRate(size_t timeStep, double waterRate) {
// WellProductionProperties properties = getProductionProperties(timeStep);
// properties.WaterRate = waterRate;
// setProductionProperties(timeStep, properties);
// }
double Well::getLiquidRate(size_t timeStep) const {
return getProductionProperties(timeStep).LiquidRate;
}
// double Well::getLiquidRate(size_t timeStep) const {
// return getProductionProperties(timeStep).LiquidRate;
// }
void Well::setLiquidRate(size_t timeStep, double liquidRate) {
WellProductionProperties properties = getProductionProperties(timeStep);
properties.LiquidRate = liquidRate;
setProductionProperties(timeStep, properties);
}
// void Well::setLiquidRate(size_t timeStep, double liquidRate) {
// WellProductionProperties properties = getProductionProperties(timeStep);
// properties.LiquidRate = liquidRate;
// setProductionProperties(timeStep, properties);
// }
double Well::getResVRate(size_t timeStep) const {
return getProductionProperties(timeStep).ResVRate;
}
// double Well::getResVRate(size_t timeStep) const {
// return getProductionProperties(timeStep).ResVRate;
// }
void Well::setResVRate(size_t timeStep, double resvRate) {
WellProductionProperties properties = getProductionProperties(timeStep);
properties.ResVRate = resvRate;
setProductionProperties(timeStep, properties);
}
// void Well::setResVRate(size_t timeStep, double resvRate) {
// WellProductionProperties properties = getProductionProperties(timeStep);
// properties.ResVRate = resvRate;
// setProductionProperties(timeStep, properties);
// }
double Well::getSurfaceInjectionRate(size_t timeStep) const {
return m_surfaceInjectionRate->get(timeStep);
@@ -301,8 +303,8 @@ namespace Opm {
/*****************************************************************/
bool Well::hasProductionControl(size_t timeStep , WellProducer::ControlModeEnum controlMode) const {
WellProductionProperties properties = getProductionProperties(timeStep);
if ((properties.ProductionControls & controlMode) != 0)
WellProductionPropertiesPtr properties = getProductionProperties(timeStep);
if ((properties->ProductionControls & controlMode) != 0)
return true;
else
return false;
@@ -310,18 +312,18 @@ namespace Opm {
void Well::addProductionControl(size_t timeStep , WellProducer::ControlModeEnum controlMode) {
WellProductionProperties properties = getProductionProperties(timeStep);
if ((properties.ProductionControls & controlMode) == 0) {
properties.ProductionControls += controlMode;
WellProductionPropertiesPtr properties = getProductionProperties(timeStep);
if ((properties->ProductionControls & controlMode) == 0) {
properties->ProductionControls += controlMode;
setProductionProperties(timeStep, properties);
}
}
void Well::dropProductionControl(size_t timeStep , WellProducer::ControlModeEnum controlMode) {
WellProductionProperties properties = getProductionProperties(timeStep);
if ((properties.ProductionControls & controlMode) != 0) {
properties.ProductionControls -= controlMode;
WellProductionPropertiesPtr properties = getProductionProperties(timeStep);
if ((properties->ProductionControls & controlMode) != 0) {
properties->ProductionControls -= controlMode;
setProductionProperties(timeStep, properties);
}
}

View File

@@ -35,15 +35,19 @@
namespace Opm {
typedef struct {
typedef struct WellProductionProperties {
double OilRate;
double GasRate;
double WaterRate;
double LiquidRate;
double ResVRate;
int ProductionControls;
WellProductionProperties(){OilRate=0.0; GasRate=0.0; WaterRate=0.0; LiquidRate=0.0; ResVRate=0.0; ProductionControls=0;}
} WellProductionProperties;
typedef std::shared_ptr<WellProductionProperties> WellProductionPropertiesPtr;
typedef std::shared_ptr<const WellProductionProperties> WellProductionPropertiesConstPtr;
class Well {
public:
Well(const std::string& name, int headI, int headJ, double refDepth, TimeMapConstPtr timeMap , size_t creationTimeStep);
@@ -53,16 +57,16 @@ namespace Opm {
const std::string getGroupName(size_t timeStep) const;
void setGroupName(size_t timeStep , const std::string& groupName);
double getOilRate(size_t timeStep) const;
void setOilRate(size_t timeStep, double oilRate);
double getLiquidRate(size_t timeStep) const;
void setLiquidRate(size_t timeStep, double LiquidRate);
double getResVRate(size_t timeStep) const;
void setResVRate(size_t timeStep, double resVRate);
double getGasRate(size_t timeStep) const;
void setGasRate(size_t timeStep, double gasRate);
double getWaterRate(size_t timeStep) const;
void setWaterRate(size_t timeStep, double waterRate);
// double getOilRate(size_t timeStep) const;
// void setOilRate(size_t timeStep, double oilRate);
// double getLiquidRate(size_t timeStep) const;
// void setLiquidRate(size_t timeStep, double LiquidRate);
// double getResVRate(size_t timeStep) const;
// void setResVRate(size_t timeStep, double resVRate);
// double getGasRate(size_t timeStep) const;
// void setGasRate(size_t timeStep, double gasRate);
// double getWaterRate(size_t timeStep) const;
// void setWaterRate(size_t timeStep, double waterRate);
double getSurfaceInjectionRate(size_t timeStep) const;
void setSurfaceInjectionRate(size_t timeStep, double injectionRate);
double getReservoirInjectionRate(size_t timeStep) const;
@@ -108,8 +112,8 @@ namespace Opm {
void addWELSPECS(DeckRecordConstPtr deckRecord);
void addCompletions(size_t time_step , const std::vector<CompletionConstPtr>& newCompletions);
CompletionSetConstPtr getCompletions(size_t timeStep) const;
void setProductionProperties(size_t timeStep , const WellProductionProperties properties);
WellProductionProperties getProductionProperties(size_t timeStep) const;
void setProductionProperties(size_t timeStep , const WellProductionPropertiesPtr properties);
WellProductionPropertiesPtr getProductionProperties(size_t timeStep) const;
private:
void switch2Producer(size_t timeStep );
@@ -146,7 +150,7 @@ namespace Opm {
std::shared_ptr<DynamicState<double> > m_guideRateScalingFactor;
std::shared_ptr<DynamicState<CompletionSetConstPtr> > m_completions;
std::shared_ptr<DynamicState<WellProductionProperties> > m_productionProperties;
std::shared_ptr<DynamicState<WellProductionPropertiesPtr> > m_productionProperties;
std::shared_ptr<DynamicState<std::string> > m_groupName;
// WELSPECS data - assumes this is not dynamic

View File

@@ -45,7 +45,7 @@ BOOST_AUTO_TEST_CASE(CreateWell_CorrectNameAndDefaultValues) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , 0, 0, 0.0, timeMap , 0);
BOOST_CHECK_EQUAL( "WELL1" , well.name() );
BOOST_CHECK_EQUAL(0.0 , well.getOilRate( 5 ));
BOOST_CHECK_EQUAL(0.0 , well.getProductionProperties(5)->OilRate);
}
BOOST_AUTO_TEST_CASE(CreateWellCreateTimeStepOK) {
@@ -63,44 +63,48 @@ BOOST_AUTO_TEST_CASE(setWellProductionProperties_PropertiesSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , 0, 0, 0.0, timeMap , 0);
BOOST_CHECK_EQUAL(0.0 , well.getProductionProperties( 5 ).OilRate);
Opm::WellProductionProperties props;
props.OilRate = 99;
props.GasRate = 98;
props.WaterRate = 97;
props.LiquidRate = 96;
props.ResVRate = 95;
BOOST_CHECK_EQUAL(0.0 , well.getProductionProperties( 5 )->OilRate);
Opm::WellProductionPropertiesPtr props(new Opm::WellProductionProperties());
props->OilRate = 99;
props->GasRate = 98;
props->WaterRate = 97;
props->LiquidRate = 96;
props->ResVRate = 95;
well.setProductionProperties( 5 , props);
BOOST_CHECK_EQUAL(99 , well.getProductionProperties( 5 ).OilRate);
BOOST_CHECK_EQUAL(98 , well.getProductionProperties( 5 ).GasRate);
BOOST_CHECK_EQUAL(97 , well.getProductionProperties( 5 ).WaterRate);
BOOST_CHECK_EQUAL(96 , well.getProductionProperties( 5 ).LiquidRate);
BOOST_CHECK_EQUAL(95 , well.getProductionProperties( 5 ).ResVRate);
BOOST_CHECK_EQUAL(99 , well.getProductionProperties( 8 ).OilRate);
BOOST_CHECK_EQUAL(98 , well.getProductionProperties( 8 ).GasRate);
BOOST_CHECK_EQUAL(97 , well.getProductionProperties( 8 ).WaterRate);
BOOST_CHECK_EQUAL(96 , well.getProductionProperties( 8 ).LiquidRate);
BOOST_CHECK_EQUAL(95 , well.getProductionProperties( 8 ).ResVRate);
BOOST_CHECK_EQUAL(99 , well.getProductionProperties( 5 )->OilRate);
BOOST_CHECK_EQUAL(98 , well.getProductionProperties( 5 )->GasRate);
BOOST_CHECK_EQUAL(97 , well.getProductionProperties( 5 )->WaterRate);
BOOST_CHECK_EQUAL(96 , well.getProductionProperties( 5 )->LiquidRate);
BOOST_CHECK_EQUAL(95 , well.getProductionProperties( 5 )->ResVRate);
BOOST_CHECK_EQUAL(99 , well.getProductionProperties( 8 )->OilRate);
BOOST_CHECK_EQUAL(98 , well.getProductionProperties( 8 )->GasRate);
BOOST_CHECK_EQUAL(97 , well.getProductionProperties( 8 )->WaterRate);
BOOST_CHECK_EQUAL(96 , well.getProductionProperties( 8 )->LiquidRate);
BOOST_CHECK_EQUAL(95 , well.getProductionProperties( 8 )->ResVRate);
}
BOOST_AUTO_TEST_CASE(setOilRate_RateSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , 0, 0, 0.0, timeMap , 0);
BOOST_CHECK_EQUAL(0.0 , well.getOilRate( 5 ));
well.setOilRate( 5 , 99 );
BOOST_CHECK_EQUAL(99 , well.getOilRate( 5 ));
BOOST_CHECK_EQUAL(99 , well.getOilRate( 8 ));
BOOST_CHECK_EQUAL(0.0 , well.getProductionProperties(5)->OilRate);
Opm::WellProductionPropertiesPtr props(new Opm::WellProductionProperties());
props->OilRate = 99;
well.setProductionProperties( 5 , props);
BOOST_CHECK_EQUAL(99 , well.getProductionProperties(5)->OilRate);
BOOST_CHECK_EQUAL(99 , well.getProductionProperties(8)->OilRate);
}
BOOST_AUTO_TEST_CASE(seLiquidRate_RateSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , 0, 0, 0.0, timeMap , 0);
BOOST_CHECK_EQUAL(0.0 , well.getLiquidRate( 5 ));
well.setLiquidRate( 5 , 99 );
BOOST_CHECK_EQUAL(99 , well.getLiquidRate( 5 ));
BOOST_CHECK_EQUAL(99 , well.getLiquidRate( 8 ));
BOOST_CHECK_EQUAL(0.0 , well.getProductionProperties(5)->LiquidRate);
Opm::WellProductionPropertiesPtr props(new Opm::WellProductionProperties());
props->LiquidRate = 99;
well.setProductionProperties( 5 , props);
BOOST_CHECK_EQUAL(99 , well.getProductionProperties(5)->LiquidRate);
BOOST_CHECK_EQUAL(99 , well.getProductionProperties(8)->LiquidRate);
}
@@ -166,10 +170,12 @@ BOOST_AUTO_TEST_CASE(setGasRate_RateSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , 0, 0, 0.0, timeMap , 0);
BOOST_CHECK_EQUAL(0.0 , well.getGasRate( 5 ));
well.setGasRate( 5 , 108 );
BOOST_CHECK_EQUAL(108 , well.getGasRate( 5 ));
BOOST_CHECK_EQUAL(108 , well.getGasRate( 8 ));
BOOST_CHECK_EQUAL(0.0 , well.getProductionProperties(5)->GasRate);
Opm::WellProductionPropertiesPtr properties(new Opm::WellProductionProperties());
properties->GasRate = 108;
well.setProductionProperties(5, properties);
BOOST_CHECK_EQUAL(108 , well.getProductionProperties(5)->GasRate);
BOOST_CHECK_EQUAL(108 , well.getProductionProperties(8)->GasRate);
}
@@ -178,10 +184,12 @@ BOOST_AUTO_TEST_CASE(setWaterRate_RateSetCorrect) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
Opm::Well well("WELL1" , 0, 0, 0.0, timeMap , 0);
BOOST_CHECK_EQUAL(0.0 , well.getWaterRate( 5 ));
well.setWaterRate( 5 , 108 );
BOOST_CHECK_EQUAL(108 , well.getWaterRate( 5 ));
BOOST_CHECK_EQUAL(108 , well.getWaterRate( 8 ));
BOOST_CHECK_EQUAL(0.0 , well.getProductionProperties(5)->WaterRate);
Opm::WellProductionPropertiesPtr properties(new Opm::WellProductionProperties());
properties->WaterRate = 108;
well.setProductionProperties(5, properties);
BOOST_CHECK_EQUAL(108 , well.getProductionProperties(5)->WaterRate);
BOOST_CHECK_EQUAL(108 , well.getProductionProperties(8)->WaterRate);
}
@@ -229,17 +237,19 @@ BOOST_AUTO_TEST_CASE(isProducerCorrectlySet) {
/* Set rates => Well becomes a producer; injection rate should be set to 0. */
well.setOilRate(4 , 100 );
well.setGasRate(4 , 200 );
well.setWaterRate(4 , 300 );
Opm::WellProductionPropertiesPtr properties(new Opm::WellProductionProperties());
properties->OilRate = 100;
properties->GasRate = 200;
properties->WaterRate = 300;
well.setProductionProperties(4, properties);
BOOST_CHECK_EQUAL( false , well.isInjector(4));
BOOST_CHECK_EQUAL( true , well.isProducer(4));
// BOOST_CHECK_EQUAL( 0 , well.getSurfaceInjectionRate(4));
// BOOST_CHECK_EQUAL( 0 , well.getReservoirInjectionRate(4));
BOOST_CHECK_EQUAL( 100 , well.getOilRate(4));
BOOST_CHECK_EQUAL( 200 , well.getGasRate(4));
BOOST_CHECK_EQUAL( 300 , well.getWaterRate(4));
BOOST_CHECK_EQUAL( 100 , well.getProductionProperties(4)->OilRate);
BOOST_CHECK_EQUAL( 200 , well.getProductionProperties(4)->GasRate);
BOOST_CHECK_EQUAL( 300 , well.getProductionProperties(4)->WaterRate);
/* Set injection rate => Well becomes injector - all produced rates -> 0 */
well.setReservoirInjectionRate( 6 , 50 );
@@ -327,48 +337,53 @@ BOOST_AUTO_TEST_CASE(WellStatus) {
/*****************************************************************/
BOOST_AUTO_TEST_CASE(WellHaveProductionControlLimit) {
//BOOST_AUTO_TEST_CASE(WellHaveProductionControlLimit) {
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
Opm::Well well("WELL1", 1, 2, 2334.32, timeMap, 0);
// Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
// Opm::Well well("WELL1", 1, 2, 2334.32, timeMap, 0);
BOOST_CHECK( !well.hasProductionControl( 1 , Opm::WellProducer::ORAT ));
BOOST_CHECK( !well.hasProductionControl( 1 , Opm::WellProducer::RESV ));
// BOOST_CHECK( !well.hasProductionControl( 1 , Opm::WellProducer::ORAT ));
// BOOST_CHECK( !well.hasProductionControl( 1 , Opm::WellProducer::RESV ));
well.setOilRate( 2 , 100 );
BOOST_CHECK( well.hasProductionControl( 2, Opm::WellProducer::ORAT ));
BOOST_CHECK( !well.hasProductionControl( 2 , Opm::WellProducer::RESV ));
// Opm::WellProductionProperties properties;
// properties.OilRate = 100;
// well.setProductionProperties(2, properties);
// BOOST_CHECK( well.hasProductionControl( 2, Opm::WellProducer::ORAT ));
// BOOST_CHECK( !well.hasProductionControl( 2 , Opm::WellProducer::RESV ));
well.setResVRate( 2 , 100 );
BOOST_CHECK( well.hasProductionControl( 2 , Opm::WellProducer::RESV ));
// Opm::WellProductionProperties properties2;
// properties2.ResVRate = 100;
// well.setProductionProperties(2, properties2);
// BOOST_CHECK( well.hasProductionControl( 2 , Opm::WellProducer::RESV ));
well.setOilRate( 10 , 100 );
well.setWaterRate( 10 , 100 );
well.setGasRate( 10 , 100 );
well.setLiquidRate( 10 , 100 );
well.setResVRate( 10 , 100 );
well.setBHPLimit( 10 , 100 , true);
well.setTHPLimit( 10 , 100 , true);
// Opm::WellProductionProperties properties3;
// properties3.OilRate = 100;
// properties3.WaterRate = 100;
// properties3.GasRate = 100;
// properties3.LiquidRate = 100;
// properties3.ResVRate = 100;
// well.setBHPLimit( 10 , 100 , true);
// well.setTHPLimit( 10 , 100 , true);
BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::ORAT ));
BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::WRAT ));
BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::GRAT ));
BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::LRAT ));
BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::RESV ));
BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::BHP ));
BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::THP ));
// BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::ORAT ));
// BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::WRAT ));
// BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::GRAT ));
// BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::LRAT ));
// BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::RESV ));
// BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::BHP ));
// BOOST_CHECK( well.hasProductionControl( 10 , Opm::WellProducer::THP ));
well.dropProductionControl( 11 , Opm::WellProducer::RESV );
// well.dropProductionControl( 11 , Opm::WellProducer::RESV );
BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::ORAT ));
BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::WRAT ));
BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::GRAT ));
BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::LRAT ));
BOOST_CHECK( !well.hasProductionControl( 11 , Opm::WellProducer::RESV ));
BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::BHP ));
BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::THP ));
}
// BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::ORAT ));
// BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::WRAT ));
// BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::GRAT ));
// BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::LRAT ));
// BOOST_CHECK( !well.hasProductionControl( 11 , Opm::WellProducer::RESV ));
// BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::BHP ));
// BOOST_CHECK( well.hasProductionControl( 11 , Opm::WellProducer::THP ));
//}