|
|
|
|
@@ -41,23 +41,23 @@
|
|
|
|
|
#include <opm/parser/eclipse/Parser/ParseContext.hpp>
|
|
|
|
|
#include <opm/parser/eclipse/Parser/Parser.hpp>
|
|
|
|
|
|
|
|
|
|
static Opm::TimeMapPtr createXDaysTimeMap(size_t numDays) {
|
|
|
|
|
static std::shared_ptr< Opm::TimeMap > createXDaysTimeMap(size_t numDays) {
|
|
|
|
|
boost::gregorian::date startDate( 2010 , boost::gregorian::Jan , 1);
|
|
|
|
|
Opm::TimeMapPtr timeMap(new Opm::TimeMap(boost::posix_time::ptime(startDate)));
|
|
|
|
|
auto timeMap = std::make_shared< Opm::TimeMap >(boost::posix_time::ptime(startDate));
|
|
|
|
|
for (size_t i = 0; i < numDays; i++)
|
|
|
|
|
timeMap->addTStep( boost::posix_time::hours( (i+1) * 24 ));
|
|
|
|
|
return timeMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CreateWell_CorrectNameAndDefaultValues) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
BOOST_CHECK_EQUAL( "WELL1" , well.name() );
|
|
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).OilRate);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CreateWell_GetProductionPropertiesShouldReturnSameObject) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(&(well.getProductionProperties(5)), &(well.getProductionProperties(5)));
|
|
|
|
|
@@ -66,7 +66,7 @@ BOOST_AUTO_TEST_CASE(CreateWell_GetProductionPropertiesShouldReturnSameObject) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CreateWell_GetInjectionPropertiesShouldReturnSameObject) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(&(well.getInjectionProperties(5)), &(well.getInjectionProperties(5)));
|
|
|
|
|
@@ -75,7 +75,7 @@ BOOST_AUTO_TEST_CASE(CreateWell_GetInjectionPropertiesShouldReturnSameObject) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CreateWellCreateTimeStepOK) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 5);
|
|
|
|
|
BOOST_CHECK_EQUAL( false , well.hasBeenDefined(0) );
|
|
|
|
|
BOOST_CHECK_EQUAL( false , well.hasBeenDefined(4) );
|
|
|
|
|
@@ -86,7 +86,7 @@ BOOST_AUTO_TEST_CASE(CreateWellCreateTimeStepOK) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setWellProductionProperties_PropertiesSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy( 5 ).OilRate);
|
|
|
|
|
@@ -110,7 +110,7 @@ BOOST_AUTO_TEST_CASE(setWellProductionProperties_PropertiesSetCorrect) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setOilRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).OilRate);
|
|
|
|
|
@@ -122,7 +122,7 @@ BOOST_AUTO_TEST_CASE(setOilRate_RateSetCorrect) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(seLiquidRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).LiquidRate);
|
|
|
|
|
@@ -135,7 +135,7 @@ BOOST_AUTO_TEST_CASE(seLiquidRate_RateSetCorrect) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setPredictionModeProduction_ModeSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL( true, well.getProductionPropertiesCopy(5).predictionMode);
|
|
|
|
|
@@ -149,7 +149,7 @@ BOOST_AUTO_TEST_CASE(setPredictionModeProduction_ModeSetCorrect) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setpredictionModeInjection_ModeSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL( true, well.getInjectionPropertiesCopy(5).predictionMode);
|
|
|
|
|
@@ -313,7 +313,7 @@ BOOST_AUTO_TEST_CASE(WellCOMPDATtestINPUT) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(NewWellZeroCompletions) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
Opm::CompletionSetConstPtr completions = well.getCompletions( 0 );
|
|
|
|
|
BOOST_CHECK_EQUAL( 0U , completions->size());
|
|
|
|
|
@@ -321,7 +321,7 @@ BOOST_AUTO_TEST_CASE(NewWellZeroCompletions) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(UpdateCompletions) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
Opm::CompletionSetConstPtr completions = well.getCompletions( 0 );
|
|
|
|
|
@@ -375,7 +375,7 @@ Opm::CompletionPtr completion(const size_t i, const size_t j, const size_t k)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CompletionOrder) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
{
|
|
|
|
|
// Vertical well.
|
|
|
|
|
Opm::Well well("WELL1" , 5, 5, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
@@ -432,7 +432,7 @@ BOOST_AUTO_TEST_CASE(CompletionOrder) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setGasRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::GAS, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).GasRate);
|
|
|
|
|
@@ -446,7 +446,7 @@ BOOST_AUTO_TEST_CASE(setGasRate_RateSetCorrect) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setWaterRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).WaterRate);
|
|
|
|
|
@@ -459,7 +459,7 @@ BOOST_AUTO_TEST_CASE(setWaterRate_RateSetCorrect) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setSurfaceInjectionRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getInjectionPropertiesCopy(5).surfaceInjectionRate);
|
|
|
|
|
@@ -472,7 +472,7 @@ BOOST_AUTO_TEST_CASE(setSurfaceInjectionRate_RateSetCorrect) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setReservoirInjectionRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getInjectionPropertiesCopy(5).reservoirInjectionRate);
|
|
|
|
|
@@ -487,7 +487,7 @@ BOOST_AUTO_TEST_CASE(setReservoirInjectionRate_RateSetCorrect) {
|
|
|
|
|
BOOST_AUTO_TEST_CASE(isProducerCorrectlySet) {
|
|
|
|
|
// HACK: This test checks correctly setting of isProducer/isInjector. This property depends on which of
|
|
|
|
|
// WellProductionProperties/WellInjectionProperties is set last, independent of actual values.
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap ,0);
|
|
|
|
|
|
|
|
|
|
/* 1: Well is created as producer */
|
|
|
|
|
@@ -543,7 +543,7 @@ BOOST_AUTO_TEST_CASE(isProducerCorrectlySet) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(GroupnameCorretlySet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap ,0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL("" , well.getGroupName(2));
|
|
|
|
|
@@ -557,7 +557,7 @@ BOOST_AUTO_TEST_CASE(GroupnameCorretlySet) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(addWELSPECS_setData_dataSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1", 23, 42, Opm::Value<double>("REF_DEPTH" , 2334.32) , Opm::Phase::WATER, timeMap, 3);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK(!well.hasBeenDefined(2));
|
|
|
|
|
@@ -570,7 +570,7 @@ BOOST_AUTO_TEST_CASE(addWELSPECS_setData_dataSet) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(XHPLimitDefault) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1", 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -591,7 +591,7 @@ BOOST_AUTO_TEST_CASE(XHPLimitDefault) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(InjectorType) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
Opm::Well well("WELL1", 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
|
|
|
|
|
|
|
|
|
Opm::WellInjectionProperties injectionProps(well.getInjectionPropertiesCopy(1));
|
|
|
|
|
@@ -606,7 +606,7 @@ BOOST_AUTO_TEST_CASE(InjectorType) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellStatus) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(10);
|
|
|
|
|
|
|
|
|
|
Opm::Well well("WELL1" , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
@@ -628,7 +628,7 @@ BOOST_AUTO_TEST_CASE(WellStatus) {
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellHaveProductionControlLimit) {
|
|
|
|
|
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(20);
|
|
|
|
|
Opm::Well well("WELL1", 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::OIL, timeMap, 0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -678,7 +678,7 @@ BOOST_AUTO_TEST_CASE(WellHaveProductionControlLimit) {
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellHaveInjectionControlLimit) {
|
|
|
|
|
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(20);
|
|
|
|
|
Opm::Well well("WELL1", 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK( !well.getInjectionPropertiesCopy(1).hasInjectionControl( Opm::WellInjector::RATE ));
|
|
|
|
|
@@ -722,7 +722,7 @@ BOOST_AUTO_TEST_CASE(WellHaveInjectionControlLimit) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellSetAvailableForGroupControl_ControlSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(20);
|
|
|
|
|
Opm::Well well("WELL1", 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK(well.isAvailableForGroupControl(10));
|
|
|
|
|
@@ -733,7 +733,7 @@ BOOST_AUTO_TEST_CASE(WellSetAvailableForGroupControl_ControlSet) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellSetGuideRate_GuideRateSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(20);
|
|
|
|
|
Opm::Well well("WELL1", 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_LT(well.getGuideRate(0), 0);
|
|
|
|
|
@@ -743,7 +743,7 @@ BOOST_AUTO_TEST_CASE(WellSetGuideRate_GuideRateSet) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellGuideRatePhase_GuideRatePhaseSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(20);
|
|
|
|
|
Opm::Well well("WELL1", 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
|
|
|
|
BOOST_CHECK_EQUAL(Opm::GuideRate::UNDEFINED, well.getGuideRatePhase(0));
|
|
|
|
|
well.setGuideRatePhase(3, Opm::GuideRate::RAT);
|
|
|
|
|
@@ -753,7 +753,7 @@ BOOST_AUTO_TEST_CASE(WellGuideRatePhase_GuideRatePhaseSet) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellSetScalingFactor_ScalingFactorSetSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
|
|
|
|
auto timeMap = createXDaysTimeMap(20);
|
|
|
|
|
Opm::Well well("WELL1", 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
|
|
|
|
BOOST_CHECK_EQUAL(1.0, well.getGuideRateScalingFactor(0));
|
|
|
|
|
well.setGuideRateScalingFactor(4, 0.6);
|
|
|
|
|
|