2013-11-05 12:55:03 +01:00
|
|
|
/*
|
|
|
|
|
Copyright 2013 Statoil ASA.
|
|
|
|
|
|
|
|
|
|
This file is part of the Open Porous Media project (OPM).
|
|
|
|
|
|
|
|
|
|
OPM is free software: you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
OPM is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <stdexcept>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <boost/filesystem.hpp>
|
|
|
|
|
|
|
|
|
|
#define BOOST_TEST_MODULE WellTest
|
|
|
|
|
#include <boost/test/unit_test.hpp>
|
|
|
|
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
|
|
|
|
|
2014-01-27 18:27:57 +01:00
|
|
|
#include <opm/parser/eclipse/Units/ConversionFactors.hpp>
|
2015-01-26 16:40:13 +01:00
|
|
|
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
2014-01-20 14:52:30 +01:00
|
|
|
#include <opm/parser/eclipse/Deck/DeckRecord.hpp>
|
|
|
|
|
#include <opm/parser/eclipse/Deck/DeckStringItem.hpp>
|
2013-11-05 12:55:03 +01:00
|
|
|
|
2015-01-26 16:40:13 +01:00
|
|
|
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
|
2016-01-15 08:42:57 +01:00
|
|
|
#include <opm/parser/eclipse/EclipseState/IOConfig/IOConfig.hpp>
|
2015-08-28 16:21:14 +02:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp>
|
2016-01-15 08:42:57 +01:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/CompletionSet.hpp>
|
2015-08-28 16:21:14 +02:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
|
2014-01-28 14:31:51 +01:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/ScheduleEnums.hpp>
|
2013-11-05 12:55:03 +01:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/Well.hpp>
|
2013-11-05 15:25:47 +01:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp>
|
Refactor WellProductionProperties manipulation code
This commit splits the creation of WellProductionProperties objects,
and especially the ad-hoc helper functions historyProperties()
and predictionProperties() out to a separate module,
WellProductionProperties.[hc]pp. Creating the properties object
from a DeckRecordConstPtr is deferred to two named constructors,
WellProductionProperties::history() and
WellProductionProperties::prediction()
that, respectively, assume the roles of historyProperties() and
predictionProperties(). Reimplement handleWCONProducer() in terms
of these named constructors and remove the producerProperties()
helper whose task, inspecting the status and retrieving/setting the
CMODE if not SHUT, can be assumed by handleWCONProducer().
Add a simple test module, WellPropertiesTest.cpp, to enforce the
rather peculiar semantics of the WCONHIST keyword. Control modes
{O,W,G}RAT, LRAT, and RESV are *always* (unconditionally) supported
in WCONHIST but there is no control mode switching. The latter is
deferred to client code, depending on the '.predictionMode' flag.
Suggested by: [at] joakim-hove
2014-07-07 13:28:25 +02:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/WellProductionProperties.hpp>
|
2016-01-24 21:49:39 +01:00
|
|
|
#include <opm/parser/eclipse/Parser/ParseMode.hpp>
|
2015-01-26 16:40:13 +01:00
|
|
|
#include <opm/parser/eclipse/Parser/Parser.hpp>
|
|
|
|
|
|
2014-05-08 16:26:14 +02:00
|
|
|
static Opm::TimeMapPtr createXDaysTimeMap(size_t numDays) {
|
2013-11-05 15:25:47 +01:00
|
|
|
boost::gregorian::date startDate( 2010 , boost::gregorian::Jan , 1);
|
2014-02-21 16:31:55 +01:00
|
|
|
Opm::TimeMapPtr timeMap(new Opm::TimeMap(boost::posix_time::ptime(startDate)));
|
2013-11-08 09:14:57 +01:00
|
|
|
for (size_t i = 0; i < numDays; i++)
|
2013-11-05 15:25:47 +01:00
|
|
|
timeMap->addTStep( boost::posix_time::hours( (i+1) * 24 ));
|
2013-11-08 09:14:57 +01:00
|
|
|
return timeMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CreateWell_CorrectNameAndDefaultValues) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
2013-11-05 12:55:03 +01:00
|
|
|
BOOST_CHECK_EQUAL( "WELL1" , well.name() );
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).OilRate);
|
2013-11-08 09:14:57 +01:00
|
|
|
}
|
2013-11-05 15:25:47 +01:00
|
|
|
|
2014-03-18 08:19:26 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateWell_GetProductionPropertiesShouldReturnSameObject) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
2014-03-18 08:19:26 +01:00
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(&(well.getProductionProperties(5)), &(well.getProductionProperties(5)));
|
|
|
|
|
BOOST_CHECK_EQUAL(&(well.getProductionProperties(8)), &(well.getProductionProperties(8)));
|
|
|
|
|
BOOST_CHECK_EQUAL(&(well.getProductionProperties(5)), &(well.getProductionProperties(8)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CreateWell_GetInjectionPropertiesShouldReturnSameObject) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
2014-03-18 08:19:26 +01:00
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(&(well.getInjectionProperties(5)), &(well.getInjectionProperties(5)));
|
|
|
|
|
BOOST_CHECK_EQUAL(&(well.getInjectionProperties(8)), &(well.getInjectionProperties(8)));
|
|
|
|
|
BOOST_CHECK_EQUAL(&(well.getInjectionProperties(5)), &(well.getInjectionProperties(8)));
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-25 16:25:57 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateWellCreateTimeStepOK) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 5);
|
2013-11-25 16:25:57 +01:00
|
|
|
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) );
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2013-11-25 16:25:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2014-02-28 14:54:47 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(setWellProductionProperties_PropertiesSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
2014-02-28 14:54:47 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy( 5 ).OilRate);
|
2014-03-10 15:56:24 +01:00
|
|
|
Opm::WellProductionProperties props;
|
|
|
|
|
props.OilRate = 99;
|
|
|
|
|
props.GasRate = 98;
|
|
|
|
|
props.WaterRate = 97;
|
|
|
|
|
props.LiquidRate = 96;
|
|
|
|
|
props.ResVRate = 95;
|
2014-02-28 14:54:47 +01:00
|
|
|
well.setProductionProperties( 5 , props);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(99 , well.getProductionPropertiesCopy( 5 ).OilRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(98 , well.getProductionPropertiesCopy( 5 ).GasRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(97 , well.getProductionPropertiesCopy( 5 ).WaterRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(96 , well.getProductionPropertiesCopy( 5 ).LiquidRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(95 , well.getProductionPropertiesCopy( 5 ).ResVRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(99 , well.getProductionPropertiesCopy( 8 ).OilRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(98 , well.getProductionPropertiesCopy( 8 ).GasRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(97 , well.getProductionPropertiesCopy( 8 ).WaterRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(96 , well.getProductionPropertiesCopy( 8 ).LiquidRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(95 , well.getProductionPropertiesCopy( 8 ).ResVRate);
|
2014-02-28 14:54:47 +01:00
|
|
|
}
|
|
|
|
|
|
2013-11-08 09:14:57 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(setOilRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).OilRate);
|
2014-03-10 15:56:24 +01:00
|
|
|
Opm::WellProductionProperties props;
|
|
|
|
|
props.OilRate = 99;
|
2014-03-10 13:18:56 +01:00
|
|
|
well.setProductionProperties( 5 , props);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(99 , well.getProductionPropertiesCopy(5).OilRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(99 , well.getProductionPropertiesCopy(8).OilRate);
|
2013-11-05 12:55:03 +01:00
|
|
|
}
|
2013-11-08 09:39:37 +01:00
|
|
|
|
2014-01-30 10:14:51 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(seLiquidRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).LiquidRate);
|
2014-03-10 15:56:24 +01:00
|
|
|
Opm::WellProductionProperties props;
|
|
|
|
|
props.LiquidRate = 99;
|
2014-03-10 13:18:56 +01:00
|
|
|
well.setProductionProperties( 5 , props);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(99 , well.getProductionPropertiesCopy(5).LiquidRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(99 , well.getProductionPropertiesCopy(8).LiquidRate);
|
2014-01-30 10:14:51 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2014-03-12 11:21:57 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(setPredictionModeProduction_ModeSetCorrect) {
|
2013-11-08 09:39:37 +01:00
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL( true, well.getProductionPropertiesCopy(5).predictionMode);
|
2014-03-12 11:21:57 +01:00
|
|
|
Opm::WellProductionProperties props;
|
2014-03-20 23:27:18 +01:00
|
|
|
props.predictionMode = false;
|
2014-03-12 11:21:57 +01:00
|
|
|
well.setProductionProperties( 5 , props);
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL(false , well.getProductionPropertiesCopy(5).predictionMode);
|
|
|
|
|
BOOST_CHECK_EQUAL(false , well.getProductionPropertiesCopy(8).predictionMode);
|
2014-03-12 11:21:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(setpredictionModeInjection_ModeSetCorrect) {
|
2014-03-12 11:21:57 +01:00
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
2014-03-12 11:21:57 +01:00
|
|
|
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL( true, well.getInjectionPropertiesCopy(5).predictionMode);
|
2014-03-12 11:21:57 +01:00
|
|
|
Opm::WellInjectionProperties props;
|
2014-03-20 23:27:18 +01:00
|
|
|
props.predictionMode = false;
|
2014-03-12 11:21:57 +01:00
|
|
|
well.setInjectionProperties( 5 , props);
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL(false , well.getInjectionPropertiesCopy(5).predictionMode);
|
|
|
|
|
BOOST_CHECK_EQUAL(false , well.getInjectionPropertiesCopy(8).predictionMode);
|
2013-11-08 09:39:37 +01:00
|
|
|
}
|
2013-11-08 23:20:09 +01:00
|
|
|
|
|
|
|
|
|
2015-08-28 16:21:14 +02:00
|
|
|
BOOST_AUTO_TEST_CASE(WellCOMPDATtestTRACK) {
|
|
|
|
|
Opm::Parser parser;
|
|
|
|
|
std::string input =
|
|
|
|
|
"START -- 0 \n"
|
|
|
|
|
"19 JUN 2007 / \n"
|
|
|
|
|
"SCHEDULE\n"
|
|
|
|
|
"DATES -- 1\n"
|
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"WELSPECS\n"
|
|
|
|
|
" 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"COMPORD\n"
|
|
|
|
|
" OP_1 TRACK / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"COMPDAT\n"
|
|
|
|
|
" 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
|
" 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"DATES -- 2\n"
|
|
|
|
|
" 20 JAN 2010 / \n"
|
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Opm::ParseMode parseMode;
|
|
|
|
|
Opm::DeckPtr deck = parser.parseString(input, parseMode);
|
|
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>( 10 , 10 , 10 );
|
|
|
|
|
Opm::IOConfigPtr ioConfig;
|
|
|
|
|
Opm::Schedule schedule(Opm::ParseMode() , grid , deck, ioConfig);
|
|
|
|
|
Opm::WellPtr op_1 = schedule.getWell("OP_1");
|
|
|
|
|
|
|
|
|
|
size_t timestep = 2;
|
|
|
|
|
Opm::CompletionSetConstPtr completions = op_1->getCompletions( timestep );
|
|
|
|
|
BOOST_CHECK_EQUAL((size_t)9 , completions->size());
|
|
|
|
|
|
|
|
|
|
//Verify TRACK completion ordering
|
|
|
|
|
Opm::CompletionConstPtr completion;
|
|
|
|
|
for (size_t k = 0; k<completions->size(); ++k) {
|
|
|
|
|
completion = completions->get(k);
|
|
|
|
|
BOOST_CHECK_EQUAL((size_t)completion->getK(), k);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellCOMPDATtestDefaultTRACK) {
|
|
|
|
|
Opm::Parser parser;
|
|
|
|
|
std::string input =
|
|
|
|
|
"START -- 0 \n"
|
|
|
|
|
"19 JUN 2007 / \n"
|
|
|
|
|
"SCHEDULE\n"
|
|
|
|
|
"DATES -- 1\n"
|
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"WELSPECS\n"
|
|
|
|
|
" 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"COMPDAT\n"
|
|
|
|
|
" 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
|
" 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"DATES -- 2\n"
|
|
|
|
|
" 20 JAN 2010 / \n"
|
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Opm::ParseMode parseMode;
|
|
|
|
|
Opm::DeckPtr deck = parser.parseString(input, parseMode);
|
|
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>( 10 , 10 , 10 );
|
|
|
|
|
Opm::IOConfigPtr ioConfig;
|
|
|
|
|
Opm::Schedule schedule(Opm::ParseMode() , grid , deck, ioConfig);
|
|
|
|
|
Opm::WellPtr op_1 = schedule.getWell("OP_1");
|
|
|
|
|
|
|
|
|
|
size_t timestep = 2;
|
|
|
|
|
Opm::CompletionSetConstPtr completions = op_1->getCompletions( timestep );
|
|
|
|
|
BOOST_CHECK_EQUAL((size_t)9 , completions->size());
|
|
|
|
|
|
|
|
|
|
//Verify TRACK completion ordering
|
|
|
|
|
Opm::CompletionConstPtr completion;
|
|
|
|
|
for (size_t k = 0; k<completions->size(); ++k) {
|
|
|
|
|
completion = completions->get(k);
|
|
|
|
|
BOOST_CHECK_EQUAL((size_t)completion->getK(), k);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellCOMPDATtestINPUT) {
|
|
|
|
|
Opm::Parser parser;
|
|
|
|
|
std::string input =
|
|
|
|
|
"START -- 0 \n"
|
|
|
|
|
"19 JUN 2007 / \n"
|
|
|
|
|
"SCHEDULE\n"
|
|
|
|
|
"DATES -- 1\n"
|
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"WELSPECS\n"
|
|
|
|
|
" 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"COMPORD\n"
|
|
|
|
|
" OP_1 INPUT / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"COMPDAT\n"
|
|
|
|
|
" 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
|
" 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
|
"/\n"
|
|
|
|
|
"DATES -- 2\n"
|
|
|
|
|
" 20 JAN 2010 / \n"
|
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Opm::ParseMode parseMode;
|
|
|
|
|
Opm::DeckPtr deck = parser.parseString(input, parseMode);
|
|
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>( 10 , 10 , 10 );
|
|
|
|
|
Opm::IOConfigPtr ioConfig;
|
|
|
|
|
Opm::Schedule schedule(Opm::ParseMode() , grid , deck, ioConfig);
|
|
|
|
|
Opm::WellPtr op_1 = schedule.getWell("OP_1");
|
|
|
|
|
|
|
|
|
|
size_t timestep = 2;
|
|
|
|
|
Opm::CompletionSetConstPtr completions = op_1->getCompletions( timestep );
|
|
|
|
|
BOOST_CHECK_EQUAL((size_t)9 , completions->size());
|
|
|
|
|
|
|
|
|
|
//Verify INPUT completion ordering
|
|
|
|
|
Opm::CompletionConstPtr completion;
|
|
|
|
|
{
|
|
|
|
|
completion = completions->get(0);
|
|
|
|
|
BOOST_CHECK_EQUAL(completion->getK(), 0);
|
|
|
|
|
|
|
|
|
|
completion = completions->get(1);
|
|
|
|
|
BOOST_CHECK_EQUAL(completion->getK(), 2);
|
|
|
|
|
|
|
|
|
|
completion = completions->get(2);
|
|
|
|
|
BOOST_CHECK_EQUAL(completion->getK(), 3);
|
|
|
|
|
|
|
|
|
|
completion = completions->get(3);
|
|
|
|
|
BOOST_CHECK_EQUAL(completion->getK(), 4);
|
|
|
|
|
|
|
|
|
|
completion = completions->get(4);
|
|
|
|
|
BOOST_CHECK_EQUAL(completion->getK(), 5);
|
|
|
|
|
|
|
|
|
|
completion = completions->get(5);
|
|
|
|
|
BOOST_CHECK_EQUAL(completion->getK(), 6);
|
|
|
|
|
|
|
|
|
|
completion = completions->get(6);
|
|
|
|
|
BOOST_CHECK_EQUAL(completion->getK(), 7);
|
|
|
|
|
|
|
|
|
|
completion = completions->get(7);
|
|
|
|
|
BOOST_CHECK_EQUAL(completion->getK(), 8);
|
|
|
|
|
|
|
|
|
|
completion = completions->get(8);
|
|
|
|
|
BOOST_CHECK_EQUAL(completion->getK(), 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
2013-11-08 23:20:09 +01:00
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(NewWellZeroCompletions) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
2013-11-08 23:20:09 +01:00
|
|
|
Opm::CompletionSetConstPtr completions = well.getCompletions( 0 );
|
|
|
|
|
BOOST_CHECK_EQUAL( 0U , completions->size());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(UpdateCompletions) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-27 10:56:48 +01:00
|
|
|
Opm::EclipseGridConstPtr grid = std::make_shared<Opm::EclipseGrid>(20, 20, 20);
|
|
|
|
|
|
2015-01-26 00:09:13 +01:00
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
2013-11-08 23:20:09 +01:00
|
|
|
Opm::CompletionSetConstPtr completions = well.getCompletions( 0 );
|
|
|
|
|
BOOST_CHECK_EQUAL( 0U , completions->size());
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-27 15:41:19 +01:00
|
|
|
std::vector<Opm::CompletionPtr> newCompletions;
|
|
|
|
|
std::vector<Opm::CompletionPtr> newCompletions2;
|
2015-01-12 10:58:30 +01:00
|
|
|
Opm::CompletionPtr comp1(new Opm::Completion( 10 , 10 , 10 , Opm::WellCompletion::AUTO , Opm::Value<double>("ConnectionTransmissibilityFactor",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
|
2015-01-26 16:40:13 +01:00
|
|
|
Opm::CompletionPtr comp2(new Opm::Completion( 10 , 10 , 11 , Opm::WellCompletion::SHUT , Opm::Value<double>("ConnectionTransmissibilityFactor",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
|
2015-01-12 10:58:30 +01:00
|
|
|
Opm::CompletionPtr comp3(new Opm::Completion( 10 , 10 , 12 , Opm::WellCompletion::OPEN , Opm::Value<double>("ConnectionTransmissibilityFactor",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
|
|
|
|
|
Opm::CompletionPtr comp4(new Opm::Completion( 10 , 10 , 12 , Opm::WellCompletion::SHUT , Opm::Value<double>("ConnectionTransmissibilityFactor",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
|
|
|
|
|
Opm::CompletionPtr comp5(new Opm::Completion( 10 , 10 , 13 , Opm::WellCompletion::OPEN , Opm::Value<double>("ConnectionTransmissibilityFactor",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
|
2013-11-08 23:20:09 +01:00
|
|
|
|
|
|
|
|
//std::vector<Opm::CompletionConstPtr> newCompletions2{ comp4 , comp5}; Newer c++
|
|
|
|
|
|
|
|
|
|
newCompletions.push_back( comp1 );
|
|
|
|
|
newCompletions.push_back( comp2 );
|
|
|
|
|
newCompletions.push_back( comp3 );
|
|
|
|
|
|
|
|
|
|
newCompletions2.push_back( comp4 );
|
|
|
|
|
newCompletions2.push_back( comp5 );
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL( 3U , newCompletions.size());
|
|
|
|
|
well.addCompletions( 5 , newCompletions );
|
|
|
|
|
completions = well.getCompletions( 5 );
|
|
|
|
|
BOOST_CHECK_EQUAL( 3U , completions->size());
|
|
|
|
|
BOOST_CHECK_EQUAL( comp3 , completions->get(2));
|
|
|
|
|
|
|
|
|
|
well.addCompletions( 6 , newCompletions2 );
|
|
|
|
|
|
|
|
|
|
completions = well.getCompletions( 6 );
|
|
|
|
|
BOOST_CHECK_EQUAL( 4U , completions->size());
|
|
|
|
|
BOOST_CHECK_EQUAL( comp4 , completions->get(2));
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2013-11-08 23:20:09 +01:00
|
|
|
}
|
|
|
|
|
|
2015-04-15 22:59:58 +02:00
|
|
|
Opm::CompletionPtr completion(const size_t i, const size_t j, const size_t k);
|
|
|
|
|
|
2015-01-26 16:40:13 +01:00
|
|
|
// Helper function for CompletionOrder test.
|
2015-04-15 22:59:58 +02:00
|
|
|
Opm::CompletionPtr completion(const size_t i, const size_t j, const size_t k)
|
2015-01-26 16:40:13 +01:00
|
|
|
{
|
|
|
|
|
return std::make_shared<Opm::Completion>(i, j, k,
|
|
|
|
|
Opm::WellCompletion::AUTO,
|
|
|
|
|
Opm::Value<double>("ConnectionTransmissibilityFactor",99.88),
|
|
|
|
|
Opm::Value<double>("D",22.33),
|
|
|
|
|
Opm::Value<double>("SKIN",33.22),
|
2015-04-15 22:59:58 +02:00
|
|
|
Opm::WellCompletion::DirectionEnum::Z);
|
2015-01-26 16:40:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CompletionOrder) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-27 10:56:48 +01:00
|
|
|
Opm::EclipseGridConstPtr grid = std::make_shared<Opm::EclipseGrid>(10, 10, 10);
|
2015-01-26 16:40:13 +01:00
|
|
|
|
|
|
|
|
{
|
|
|
|
|
// Vertical well.
|
|
|
|
|
Opm::Well well("WELL1" , grid , 5, 5, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
auto c1 = completion(5, 5, 8);
|
|
|
|
|
auto c2 = completion(5, 5, 9);
|
|
|
|
|
auto c3 = completion(5, 5, 1);
|
|
|
|
|
auto c4 = completion(5, 5, 0);
|
|
|
|
|
std::vector<Opm::CompletionPtr> cv1 = { c1, c2 };
|
|
|
|
|
well.addCompletions(1, cv1);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(1)->get(0), c1);
|
|
|
|
|
std::vector<Opm::CompletionPtr> cv2 = { c3, c4 };
|
|
|
|
|
well.addCompletions(2, cv2);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(1)->get(0), c1);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(0), c4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
// Horizontal well.
|
|
|
|
|
Opm::Well well("WELL1" , grid , 5, 5, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
auto c1 = completion(6, 5, 8);
|
|
|
|
|
auto c2 = completion(5, 6, 7);
|
|
|
|
|
auto c3 = completion(7, 5, 8);
|
|
|
|
|
auto c4 = completion(9, 5, 8);
|
|
|
|
|
auto c5 = completion(8, 5, 9);
|
|
|
|
|
auto c6 = completion(5, 5, 4);
|
|
|
|
|
std::vector<Opm::CompletionPtr> cv1 = { c1, c2 };
|
|
|
|
|
well.addCompletions(1, cv1);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(1)->get(0), c2);
|
|
|
|
|
std::vector<Opm::CompletionPtr> cv2 = { c3, c4, c5 };
|
|
|
|
|
well.addCompletions(2, cv2);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(1)->get(0), c2);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(0), c2);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(1), c1);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(2), c3);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(3), c5);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(4), c4);
|
|
|
|
|
std::vector<Opm::CompletionPtr> cv3 = { c6 };
|
|
|
|
|
well.addCompletions(3, cv3);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(1)->get(0), c2);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(0), c2);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(1), c1);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(2), c3);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(3), c5);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(2)->get(4), c4);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(3)->get(0), c6);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(3)->get(1), c2);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(3)->get(2), c1);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(3)->get(3), c3);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(3)->get(4), c5);
|
|
|
|
|
BOOST_CHECK_EQUAL(well.getCompletions(3)->get(5), c4);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2013-11-11 14:35:14 +01:00
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setGasRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::GAS, timeMap , 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).GasRate);
|
2014-03-10 15:56:24 +01:00
|
|
|
Opm::WellProductionProperties properties;
|
|
|
|
|
properties.GasRate = 108;
|
2014-03-10 13:18:56 +01:00
|
|
|
well.setProductionProperties(5, properties);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(108 , well.getProductionPropertiesCopy(5).GasRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(108 , well.getProductionPropertiesCopy(8).GasRate);
|
2013-11-11 14:35:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(setWaterRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getProductionPropertiesCopy(5).WaterRate);
|
2014-03-10 15:56:24 +01:00
|
|
|
Opm::WellProductionProperties properties;
|
|
|
|
|
properties.WaterRate = 108;
|
2014-03-10 13:18:56 +01:00
|
|
|
well.setProductionProperties(5, properties);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL(108 , well.getProductionPropertiesCopy(5).WaterRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(108 , well.getProductionPropertiesCopy(8).WaterRate);
|
2013-11-11 14:35:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2014-01-24 12:36:45 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(setSurfaceInjectionRate_RateSetCorrect) {
|
2013-11-11 14:35:14 +01:00
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getInjectionPropertiesCopy(5).surfaceInjectionRate);
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties props(well.getInjectionPropertiesCopy(5));
|
2014-03-20 23:27:18 +01:00
|
|
|
props.surfaceInjectionRate = 108;
|
2014-03-10 16:54:05 +01:00
|
|
|
well.setInjectionProperties(5, props);
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL(108 , well.getInjectionPropertiesCopy(5).surfaceInjectionRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(108 , well.getInjectionPropertiesCopy(8).surfaceInjectionRate);
|
2013-11-11 14:35:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2014-01-24 13:24:22 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(setReservoirInjectionRate_RateSetCorrect) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap , 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL(0.0 , well.getInjectionPropertiesCopy(5).reservoirInjectionRate);
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties properties(well.getInjectionPropertiesCopy(5));
|
2014-03-20 23:27:18 +01:00
|
|
|
properties.reservoirInjectionRate = 108;
|
2014-03-10 16:54:05 +01:00
|
|
|
well.setInjectionProperties(5, properties);
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL(108 , well.getInjectionPropertiesCopy(5).reservoirInjectionRate);
|
|
|
|
|
BOOST_CHECK_EQUAL(108 , well.getInjectionPropertiesCopy(8).reservoirInjectionRate);
|
2014-01-24 13:24:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2013-11-11 14:35:14 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(isProducerCorrectlySet) {
|
2014-03-17 14:13:02 +01:00
|
|
|
// HACK: This test checks correctly setting of isProducer/isInjector. This property depends on which of
|
|
|
|
|
// WellProductionProperties/WellInjectionProperties is set last, independent of actual values.
|
2013-11-11 14:35:14 +01:00
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap ,0);
|
2013-11-11 14:35:14 +01:00
|
|
|
|
|
|
|
|
/* 1: Well is created as producer */
|
|
|
|
|
BOOST_CHECK_EQUAL( false , well.isInjector(0));
|
|
|
|
|
BOOST_CHECK_EQUAL( true , well.isProducer(0));
|
|
|
|
|
|
2014-01-24 13:24:22 +01:00
|
|
|
/* Set a surface injection rate => Well becomes an Injector */
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties injectionProps1(well.getInjectionPropertiesCopy(3));
|
2014-03-20 23:27:18 +01:00
|
|
|
injectionProps1.surfaceInjectionRate = 100;
|
2014-03-10 16:54:05 +01:00
|
|
|
well.setInjectionProperties(3, injectionProps1);
|
2014-03-10 17:25:01 +01:00
|
|
|
BOOST_CHECK_EQUAL( true , well.isInjector(3));
|
|
|
|
|
BOOST_CHECK_EQUAL( false , well.isProducer(3));
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL( 100 , well.getInjectionPropertiesCopy(3).surfaceInjectionRate);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-01-24 13:24:22 +01:00
|
|
|
/* Set a reservoir injection rate => Well becomes an Injector */
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties injectionProps2(well.getInjectionPropertiesCopy(4));
|
2014-03-20 23:27:18 +01:00
|
|
|
injectionProps2.reservoirInjectionRate = 200;
|
2014-03-10 16:54:05 +01:00
|
|
|
well.setInjectionProperties(4, injectionProps2);
|
2014-03-10 17:25:01 +01:00
|
|
|
BOOST_CHECK_EQUAL( true , well.isInjector(4));
|
|
|
|
|
BOOST_CHECK_EQUAL( false , well.isProducer(4));
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL( 200 , well.getInjectionPropertiesCopy(4).reservoirInjectionRate);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2013-11-11 14:35:14 +01:00
|
|
|
|
|
|
|
|
/* Set rates => Well becomes a producer; injection rate should be set to 0. */
|
2014-03-17 14:13:02 +01:00
|
|
|
Opm::WellInjectionProperties injectionProps3;
|
|
|
|
|
well.setInjectionProperties(4, injectionProps3);
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellProductionProperties properties(well.getProductionPropertiesCopy(4));
|
2014-03-10 15:56:24 +01:00
|
|
|
properties.OilRate = 100;
|
|
|
|
|
properties.GasRate = 200;
|
|
|
|
|
properties.WaterRate = 300;
|
2014-03-10 13:18:56 +01:00
|
|
|
well.setProductionProperties(4, properties);
|
2013-11-11 14:35:14 +01:00
|
|
|
BOOST_CHECK_EQUAL( false , well.isInjector(4));
|
|
|
|
|
BOOST_CHECK_EQUAL( true , well.isProducer(4));
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL( 0 , well.getInjectionPropertiesCopy(4).surfaceInjectionRate);
|
|
|
|
|
BOOST_CHECK_EQUAL( 0 , well.getInjectionPropertiesCopy(4).reservoirInjectionRate);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL( 100 , well.getProductionPropertiesCopy(4).OilRate);
|
|
|
|
|
BOOST_CHECK_EQUAL( 200 , well.getProductionPropertiesCopy(4).GasRate);
|
|
|
|
|
BOOST_CHECK_EQUAL( 300 , well.getProductionPropertiesCopy(4).WaterRate);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2013-11-11 14:35:14 +01:00
|
|
|
/* Set injection rate => Well becomes injector - all produced rates -> 0 */
|
2014-03-17 14:13:02 +01:00
|
|
|
Opm::WellProductionProperties prodProps2;
|
|
|
|
|
well.setProductionProperties(6, prodProps2);
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties injectionProps4(well.getInjectionPropertiesCopy(6));
|
2014-03-20 23:27:18 +01:00
|
|
|
injectionProps4.reservoirInjectionRate = 50;
|
2014-03-17 14:13:02 +01:00
|
|
|
well.setInjectionProperties(6, injectionProps4);
|
2014-03-10 17:25:01 +01:00
|
|
|
BOOST_CHECK_EQUAL( true , well.isInjector(6));
|
|
|
|
|
BOOST_CHECK_EQUAL( false , well.isProducer(6));
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL( 50 , well.getInjectionPropertiesCopy(6).reservoirInjectionRate);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL( 0 , well.getProductionPropertiesCopy(6).OilRate);
|
|
|
|
|
BOOST_CHECK_EQUAL( 0 , well.getProductionPropertiesCopy(6).GasRate);
|
|
|
|
|
BOOST_CHECK_EQUAL( 0 , well.getProductionPropertiesCopy(6).WaterRate);
|
2013-11-11 14:35:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2013-11-25 16:06:10 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(GroupnameCorretlySet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::WATER, timeMap ,0);
|
2013-11-25 16:06:10 +01:00
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL("" , well.getGroupName(2));
|
|
|
|
|
|
|
|
|
|
well.setGroupName(3 , "GROUP2");
|
|
|
|
|
BOOST_CHECK_EQUAL("GROUP2" , well.getGroupName(3));
|
|
|
|
|
BOOST_CHECK_EQUAL("GROUP2" , well.getGroupName(6));
|
|
|
|
|
well.setGroupName(7 , "NEWGROUP");
|
|
|
|
|
BOOST_CHECK_EQUAL("NEWGROUP" , well.getGroupName(7));
|
|
|
|
|
}
|
2014-01-20 14:52:30 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(addWELSPECS_setData_dataSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1", grid , 23, 42, Opm::Value<double>("REF_DEPTH" , 2334.32) , Opm::Phase::WATER, timeMap, 3);
|
2014-01-20 14:52:30 +01:00
|
|
|
|
|
|
|
|
BOOST_CHECK(!well.hasBeenDefined(2));
|
|
|
|
|
BOOST_CHECK(well.hasBeenDefined(3));
|
|
|
|
|
BOOST_CHECK_EQUAL(23, well.getHeadI());
|
|
|
|
|
BOOST_CHECK_EQUAL(42, well.getHeadJ());
|
|
|
|
|
BOOST_CHECK_EQUAL(2334.32, well.getRefDepth());
|
2014-04-06 23:11:38 +02:00
|
|
|
BOOST_CHECK_EQUAL(Opm::Phase::WATER, well.getPreferredPhase());
|
2014-01-20 14:52:30 +01:00
|
|
|
}
|
2014-01-27 18:27:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(XHPLimitDefault) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1", grid , 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-11 10:53:01 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellProductionProperties productionProps(well.getProductionPropertiesCopy(1));
|
2014-03-11 10:53:01 +01:00
|
|
|
productionProps.BHPLimit = 100;
|
2014-03-17 14:13:02 +01:00
|
|
|
productionProps.addProductionControl(Opm::WellProducer::BHP);
|
2014-03-11 10:53:01 +01:00
|
|
|
well.setProductionProperties(1, productionProps);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL( 100 , well.getProductionPropertiesCopy(5).BHPLimit);
|
|
|
|
|
BOOST_CHECK( well.getProductionPropertiesCopy(5).hasProductionControl( Opm::WellProducer::BHP ));
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties injProps(well.getInjectionPropertiesCopy(1));
|
2014-03-17 14:13:02 +01:00
|
|
|
injProps.THPLimit = 200;
|
|
|
|
|
well.setInjectionProperties(1, injProps);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK_EQUAL( 200 , well.getInjectionPropertiesCopy(5).THPLimit);
|
|
|
|
|
BOOST_CHECK( !well.getInjectionPropertiesCopy(5).hasInjectionControl( Opm::WellInjector::THP ));
|
2014-01-27 18:27:57 +01:00
|
|
|
}
|
|
|
|
|
|
2014-01-28 14:31:51 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(InjectorType) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1", grid , 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties injectionProps(well.getInjectionPropertiesCopy(1));
|
2014-03-20 23:27:18 +01:00
|
|
|
injectionProps.injectorType = Opm::WellInjector::WATER;
|
2014-03-12 10:57:14 +01:00
|
|
|
well.setInjectionProperties(1, injectionProps);
|
2014-03-12 11:21:57 +01:00
|
|
|
// TODO: Should we test for something other than water here, as long as
|
|
|
|
|
// the default value for InjectorType is WellInjector::WATER?
|
2014-03-20 23:27:18 +01:00
|
|
|
BOOST_CHECK_EQUAL( Opm::WellInjector::WATER , well.getInjectionPropertiesCopy(5).injectorType);
|
2014-01-28 14:31:51 +01:00
|
|
|
}
|
|
|
|
|
|
2014-01-29 13:33:28 +01:00
|
|
|
|
|
|
|
|
|
2014-01-29 15:34:33 +01:00
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellStatus) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(10);
|
2015-02-12 10:29:21 +01:00
|
|
|
Opm::EclipseGridConstPtr grid = std::make_shared<Opm::EclipseGrid>(20, 20, 20);
|
|
|
|
|
|
|
|
|
|
Opm::Well well("WELL1" , grid , 0, 0, Opm::Value<double>("REF_DEPTH"), Opm::Phase::OIL, timeMap , 0);
|
|
|
|
|
|
|
|
|
|
std::vector<Opm::CompletionPtr> newCompletions;
|
|
|
|
|
Opm::CompletionPtr comp1(new Opm::Completion( 10 , 10 , 10 , Opm::WellCompletion::OPEN , Opm::Value<double>("ConnectionTransmissibilityFactor",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
|
|
|
|
|
|
|
|
|
|
newCompletions.push_back( comp1 );
|
|
|
|
|
|
|
|
|
|
well.addCompletions( 2 , newCompletions );
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2015-02-12 10:29:21 +01:00
|
|
|
well.setStatus( 3 , Opm::WellCommon::OPEN );
|
2014-01-29 15:34:33 +01:00
|
|
|
BOOST_CHECK_EQUAL( Opm::WellCommon::OPEN , well.getStatus( 5 ));
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-30 15:19:50 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/*****************************************************************/
|
|
|
|
|
|
|
|
|
|
|
2014-03-12 12:21:55 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(WellHaveProductionControlLimit) {
|
2014-01-30 15:19:50 +01:00
|
|
|
|
2014-03-12 12:21:55 +01:00
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1", grid , 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::OIL, timeMap, 0);
|
2014-01-30 15:19:50 +01:00
|
|
|
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( !well.getProductionPropertiesCopy(1).hasProductionControl( Opm::WellProducer::ORAT ));
|
|
|
|
|
BOOST_CHECK( !well.getProductionPropertiesCopy(1).hasProductionControl( Opm::WellProducer::RESV ));
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellProductionProperties properties(well.getProductionPropertiesCopy(1));
|
2014-03-12 12:21:55 +01:00
|
|
|
properties.OilRate = 100;
|
2014-03-17 14:13:02 +01:00
|
|
|
properties.addProductionControl(Opm::WellProducer::ORAT);
|
2014-03-12 12:21:55 +01:00
|
|
|
well.setProductionProperties(2, properties);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( well.getProductionPropertiesCopy(2).hasProductionControl( Opm::WellProducer::ORAT ));
|
|
|
|
|
BOOST_CHECK( !well.getProductionPropertiesCopy(2).hasProductionControl( Opm::WellProducer::RESV ));
|
2014-03-12 12:21:55 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellProductionProperties properties2(well.getProductionPropertiesCopy(2));
|
2014-03-12 12:21:55 +01:00
|
|
|
properties2.ResVRate = 100;
|
2014-03-17 14:13:02 +01:00
|
|
|
properties2.addProductionControl(Opm::WellProducer::RESV);
|
2014-03-12 12:21:55 +01:00
|
|
|
well.setProductionProperties(2, properties2);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( well.getProductionPropertiesCopy(2).hasProductionControl( Opm::WellProducer::RESV ));
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellProductionProperties properties3(well.getProductionPropertiesCopy(2));
|
2014-03-12 12:21:55 +01:00
|
|
|
properties3.OilRate = 100;
|
|
|
|
|
properties3.WaterRate = 100;
|
|
|
|
|
properties3.GasRate = 100;
|
|
|
|
|
properties3.LiquidRate = 100;
|
|
|
|
|
properties3.ResVRate = 100;
|
2014-03-20 10:56:28 +01:00
|
|
|
properties3.BHPLimit = 100;
|
|
|
|
|
properties3.THPLimit = 100;
|
2014-03-17 14:13:02 +01:00
|
|
|
properties3.addProductionControl(Opm::WellProducer::ORAT);
|
|
|
|
|
properties3.addProductionControl(Opm::WellProducer::LRAT);
|
|
|
|
|
properties3.addProductionControl(Opm::WellProducer::BHP);
|
|
|
|
|
well.setProductionProperties(10, properties3);
|
2014-03-20 10:56:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( well.getProductionPropertiesCopy(10).hasProductionControl( Opm::WellProducer::ORAT ));
|
|
|
|
|
BOOST_CHECK( well.getProductionPropertiesCopy(10).hasProductionControl( Opm::WellProducer::LRAT ));
|
|
|
|
|
BOOST_CHECK( well.getProductionPropertiesCopy(10).hasProductionControl( Opm::WellProducer::BHP ));
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-20 10:56:28 +01:00
|
|
|
Opm::WellProductionProperties properties4(well.getProductionPropertiesCopy(10));
|
|
|
|
|
properties4.dropProductionControl( Opm::WellProducer::LRAT );
|
|
|
|
|
well.setProductionProperties(10, properties4);
|
2014-03-17 14:13:02 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( well.getProductionPropertiesCopy(11).hasProductionControl( Opm::WellProducer::ORAT ));
|
2014-03-20 10:56:28 +01:00
|
|
|
BOOST_CHECK( !well.getProductionPropertiesCopy(11).hasProductionControl( Opm::WellProducer::LRAT ));
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( well.getProductionPropertiesCopy(11).hasProductionControl( Opm::WellProducer::BHP ));
|
2014-03-17 14:13:02 +01:00
|
|
|
}
|
|
|
|
|
|
2014-03-12 12:21:55 +01:00
|
|
|
|
2014-01-30 16:31:35 +01:00
|
|
|
|
2014-03-17 14:13:02 +01:00
|
|
|
BOOST_AUTO_TEST_CASE(WellHaveInjectionControlLimit) {
|
|
|
|
|
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1", grid , 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( !well.getInjectionPropertiesCopy(1).hasInjectionControl( Opm::WellInjector::RATE ));
|
|
|
|
|
BOOST_CHECK( !well.getInjectionPropertiesCopy(1).hasInjectionControl( Opm::WellInjector::RESV ));
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties injProps1(well.getInjectionPropertiesCopy(2));
|
2014-03-20 23:27:18 +01:00
|
|
|
injProps1.surfaceInjectionRate = 100;
|
2014-03-17 14:13:02 +01:00
|
|
|
injProps1.addInjectionControl(Opm::WellInjector::RATE);
|
|
|
|
|
well.setInjectionProperties(2, injProps1);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( well.getInjectionPropertiesCopy(2).hasInjectionControl( Opm::WellInjector::RATE ));
|
|
|
|
|
BOOST_CHECK( !well.getInjectionPropertiesCopy(2).hasInjectionControl( Opm::WellInjector::RESV ));
|
2014-03-17 14:13:02 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties injProps2(well.getInjectionPropertiesCopy(2));
|
2014-03-20 23:27:18 +01:00
|
|
|
injProps2.reservoirInjectionRate = 100;
|
2014-03-17 14:13:02 +01:00
|
|
|
injProps2.addInjectionControl(Opm::WellInjector::RESV);
|
|
|
|
|
well.setInjectionProperties(2, injProps2);
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( well.getInjectionPropertiesCopy(2).hasInjectionControl( Opm::WellInjector::RESV ));
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties injProps3(well.getInjectionPropertiesCopy(10));
|
2014-03-17 14:13:02 +01:00
|
|
|
injProps3.BHPLimit = 100;
|
|
|
|
|
injProps3.addInjectionControl(Opm::WellInjector::BHP);
|
|
|
|
|
injProps3.THPLimit = 100;
|
|
|
|
|
injProps3.addInjectionControl(Opm::WellInjector::THP);
|
|
|
|
|
well.setInjectionProperties(10, injProps3);
|
|
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( well.getInjectionPropertiesCopy(10).hasInjectionControl( Opm::WellInjector::RATE ));
|
|
|
|
|
BOOST_CHECK( well.getInjectionPropertiesCopy(10).hasInjectionControl( Opm::WellInjector::RESV ));
|
|
|
|
|
BOOST_CHECK( well.getInjectionPropertiesCopy(10).hasInjectionControl( Opm::WellInjector::THP ));
|
|
|
|
|
BOOST_CHECK( well.getInjectionPropertiesCopy(10).hasInjectionControl( Opm::WellInjector::BHP ));
|
2014-03-17 14:13:02 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
Opm::WellInjectionProperties injProps4(well.getInjectionPropertiesCopy(11));
|
2014-03-17 14:13:02 +01:00
|
|
|
injProps4.dropInjectionControl( Opm::WellInjector::RESV );
|
|
|
|
|
well.setInjectionProperties(11, injProps4);
|
2014-12-08 16:34:28 +01:00
|
|
|
|
2014-03-17 16:03:58 +01:00
|
|
|
BOOST_CHECK( well.getInjectionPropertiesCopy(11).hasInjectionControl( Opm::WellInjector::RATE ));
|
|
|
|
|
BOOST_CHECK( !well.getInjectionPropertiesCopy(11).hasInjectionControl( Opm::WellInjector::RESV ));
|
|
|
|
|
BOOST_CHECK( well.getInjectionPropertiesCopy(11).hasInjectionControl( Opm::WellInjector::THP ));
|
|
|
|
|
BOOST_CHECK( well.getInjectionPropertiesCopy(11).hasInjectionControl( Opm::WellInjector::BHP ));
|
2014-01-30 16:31:35 +01:00
|
|
|
}
|
2014-02-21 12:48:36 +01:00
|
|
|
/*********************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellSetAvailableForGroupControl_ControlSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1", grid , 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
2014-02-21 12:48:36 +01:00
|
|
|
|
|
|
|
|
BOOST_CHECK(well.isAvailableForGroupControl(10));
|
|
|
|
|
well.setAvailableForGroupControl(12, false);
|
|
|
|
|
BOOST_CHECK(!well.isAvailableForGroupControl(13));
|
|
|
|
|
well.setAvailableForGroupControl(15, true);
|
|
|
|
|
BOOST_CHECK(well.isAvailableForGroupControl(15));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellSetGuideRate_GuideRateSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1", grid , 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
2014-02-21 12:48:36 +01:00
|
|
|
|
|
|
|
|
BOOST_CHECK_LT(well.getGuideRate(0), 0);
|
|
|
|
|
well.setGuideRate(1, 32.2);
|
|
|
|
|
BOOST_CHECK_LT(well.getGuideRate(0), 0);
|
|
|
|
|
BOOST_CHECK_EQUAL(32.2, well.getGuideRate(1));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellGuideRatePhase_GuideRatePhaseSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1", grid , 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
2014-02-21 12:48:36 +01:00
|
|
|
BOOST_CHECK_EQUAL(Opm::GuideRate::UNDEFINED, well.getGuideRatePhase(0));
|
|
|
|
|
well.setGuideRatePhase(3, Opm::GuideRate::RAT);
|
|
|
|
|
BOOST_CHECK_EQUAL(Opm::GuideRate::UNDEFINED, well.getGuideRatePhase(2));
|
|
|
|
|
BOOST_CHECK_EQUAL(Opm::GuideRate::RAT, well.getGuideRatePhase(3));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellSetScalingFactor_ScalingFactorSetSet) {
|
|
|
|
|
Opm::TimeMapPtr timeMap = createXDaysTimeMap(20);
|
2015-01-26 00:09:13 +01:00
|
|
|
std::shared_ptr<const Opm::EclipseGrid> grid = std::make_shared<const Opm::EclipseGrid>(10,10,10);
|
|
|
|
|
Opm::Well well("WELL1", grid , 1, 2, Opm::Value<double>("REF_DEPTH" , 2334.32), Opm::Phase::WATER, timeMap, 0);
|
2014-02-21 12:48:36 +01:00
|
|
|
BOOST_CHECK_EQUAL(1.0, well.getGuideRateScalingFactor(0));
|
|
|
|
|
well.setGuideRateScalingFactor(4, 0.6);
|
|
|
|
|
BOOST_CHECK_EQUAL(1.0, well.getGuideRateScalingFactor(3));
|
|
|
|
|
BOOST_CHECK_EQUAL(0.6, well.getGuideRateScalingFactor(4));
|
|
|
|
|
}
|
2015-08-28 16:21:14 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(testWellNameInWellNamePattern) {
|
|
|
|
|
const std::string& wellnamePattern1 = "OP_*";
|
|
|
|
|
const std::string& wellname1 = "OP_1";
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(Opm::Well::wellNameInWellNamePattern(wellname1, wellnamePattern1), true);
|
|
|
|
|
|
|
|
|
|
const std::string& wellnamePattern2 = "NONE";
|
|
|
|
|
BOOST_CHECK_EQUAL(Opm::Well::wellNameInWellNamePattern(wellname1, wellnamePattern2), false);
|
|
|
|
|
}
|