2013-10-25 10:28:56 -05: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 ScheduleTests
|
|
|
|
#include <boost/test/unit_test.hpp>
|
|
|
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
|
|
|
|
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
|
|
|
|
#include <opm/parser/eclipse/Deck/DeckIntItem.hpp>
|
|
|
|
#include <opm/parser/eclipse/Deck/DeckStringItem.hpp>
|
|
|
|
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
2014-01-22 07:40:10 -06:00
|
|
|
#include <opm/parser/eclipse/Parser/Parser.hpp>
|
2013-10-25 10:28:56 -05:00
|
|
|
|
|
|
|
using namespace Opm;
|
|
|
|
|
2014-05-08 09:26:14 -05:00
|
|
|
static DeckPtr createDeck() {
|
2014-02-26 15:15:02 -06:00
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START\n"
|
|
|
|
"8 MAR 1998 /\n"
|
|
|
|
"\n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"\n";
|
2013-10-25 10:28:56 -05:00
|
|
|
|
2014-02-26 15:15:02 -06:00
|
|
|
return parser.parseString(input);
|
2013-11-05 08:25:47 -06:00
|
|
|
}
|
|
|
|
|
2014-05-08 09:26:14 -05:00
|
|
|
static DeckPtr createDeckWithWells() {
|
2014-01-22 07:40:10 -06:00
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"10 MAI 2007 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"WELSPECS\n"
|
|
|
|
" \'W_1\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n"
|
|
|
|
"/ \n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 10 \'JUN\' 2007 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 2,3\n"
|
|
|
|
" 10 JLY 2007 / \n"
|
|
|
|
" 10 AUG 2007 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELSPECS\n"
|
2014-05-14 08:10:17 -05:00
|
|
|
" \'WX2\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n"
|
2014-01-22 07:40:10 -06:00
|
|
|
" \'W_3\' \'OP\' 20 51 3.92 \'OIL\' 7* / \n"
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
return parser.parseString(input);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-05-08 09:26:14 -05:00
|
|
|
static DeckPtr createDeckWithWellsOrdered() {
|
2014-04-30 07:45:37 -05:00
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"10 MAI 2007 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"WELSPECS\n"
|
|
|
|
" \'CW_1\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n"
|
|
|
|
" \'BW_2\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n"
|
|
|
|
" \'AW_3\' \'OP\' 20 51 3.92 \'OIL\' 7* / \n"
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
return parser.parseString(input);
|
|
|
|
}
|
|
|
|
|
2014-12-05 05:59:53 -06:00
|
|
|
|
|
|
|
static DeckPtr createDeckWithWellsAndCompletionData() {
|
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"1 NOV 1979 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 1 DES 1979/ \n"
|
|
|
|
"/\n"
|
|
|
|
"WELSPECS\n"
|
2014-12-08 11:26:13 -06:00
|
|
|
" 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n"
|
|
|
|
" 'OP_2' 'OP' 8 8 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n"
|
|
|
|
" 'OP_3' 'OP' 7 7 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n"
|
2014-12-05 05:59:53 -06:00
|
|
|
"/\n"
|
|
|
|
"COMPDAT\n"
|
2014-12-08 11:26:13 -06:00
|
|
|
" 'OP_1' 9 9 1 1 '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"
|
|
|
|
" 'OP_2' 8 8 1 3 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Y' 21.925 / \n"
|
|
|
|
" 'OP_2' 8 7 3 3 'OPEN' 1* 15.071 0.311 1391.859 1* 1* 'Y' 21.920 / \n"
|
|
|
|
" 'OP_2' 8 7 3 6 'OPEN' 1* 6.242 0.311 576.458 1* 1* 'Y' 21.915 / \n"
|
|
|
|
" 'OP_3' 7 7 1 1 'OPEN' 1* 27.412 0.311 2445.337 1* 1* 'Y' 18.521 / \n"
|
|
|
|
" 'OP_3' 7 7 2 2 'OPEN' 1* 55.195 0.311 4923.842 1* 1* 'Y' 18.524 / \n"
|
2014-12-05 05:59:53 -06:00
|
|
|
"/\n"
|
|
|
|
"DATES -- 2,3\n"
|
|
|
|
" 10 JUL 2007 / \n"
|
|
|
|
" 10 AUG 2007 / \n"
|
|
|
|
"/\n"
|
|
|
|
"COMPDAT\n"
|
2014-12-08 11:26:13 -06:00
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
2014-12-05 05:59:53 -06:00
|
|
|
"/\n";
|
|
|
|
|
|
|
|
|
|
|
|
return parser.parseString(input);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-11-05 08:25:47 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckMissingReturnsDefaults) {
|
|
|
|
DeckPtr deck(new Deck());
|
|
|
|
DeckKeywordPtr keyword(new DeckKeyword("SCHEDULE"));
|
|
|
|
deck->addKeyword( keyword );
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
|
|
|
Schedule schedule(grid , deck);
|
2014-02-21 09:31:55 -06:00
|
|
|
BOOST_CHECK_EQUAL( schedule.getStartTime() , boost::posix_time::ptime(boost::gregorian::date( 1983 , boost::gregorian::Jan , 1)));
|
2013-11-05 08:25:47 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-04-30 07:45:37 -05:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWellsOrdered) {
|
|
|
|
DeckPtr deck = createDeckWithWellsOrdered();
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(100,100,100);
|
|
|
|
Schedule schedule(grid , deck);
|
2015-02-12 08:32:31 -06:00
|
|
|
std::vector<WellConstPtr> wells = schedule.getWells();
|
2014-12-08 09:34:28 -06:00
|
|
|
|
2014-04-30 07:45:37 -05:00
|
|
|
BOOST_CHECK_EQUAL( "CW_1" , wells[0]->name());
|
|
|
|
BOOST_CHECK_EQUAL( "BW_2" , wells[1]->name());
|
|
|
|
BOOST_CHECK_EQUAL( "AW_3" , wells[2]->name());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-11-05 08:25:47 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithStart) {
|
|
|
|
DeckPtr deck = createDeck();
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
|
|
|
Schedule schedule(grid , deck);
|
2014-02-21 09:31:55 -06:00
|
|
|
BOOST_CHECK_EQUAL( schedule.getStartTime() , boost::posix_time::ptime(boost::gregorian::date( 1998 , boost::gregorian::Mar , 8)));
|
2013-10-25 10:28:56 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithSCHEDULENoThrow) {
|
|
|
|
DeckPtr deck(new Deck());
|
|
|
|
DeckKeywordPtr keyword(new DeckKeyword("SCHEDULE"));
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2013-10-25 10:28:56 -05:00
|
|
|
deck->addKeyword( keyword );
|
2014-12-08 09:34:28 -06:00
|
|
|
|
2015-01-25 16:48:48 -06:00
|
|
|
BOOST_CHECK_NO_THROW(Schedule schedule(grid , deck));
|
2013-10-25 10:28:56 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-11-05 08:25:47 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(EmptyScheduleHasNoWells) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2013-11-05 08:25:47 -06:00
|
|
|
DeckPtr deck = createDeck();
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2013-11-05 08:25:47 -06:00
|
|
|
BOOST_CHECK_EQUAL( 0U , schedule.numWells() );
|
|
|
|
BOOST_CHECK_EQUAL( false , schedule.hasWell("WELL1") );
|
|
|
|
BOOST_CHECK_THROW( schedule.getWell("WELL2") , std::invalid_argument );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-11-14 09:08:10 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateSchedule_DeckWithoutGRUPTREE_HasRootGroupTreeNodeForTimeStepZero) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2013-11-14 09:08:10 -06:00
|
|
|
DeckPtr deck = createDeck();
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2013-11-14 09:08:10 -06:00
|
|
|
BOOST_CHECK_EQUAL("FIELD", schedule.getGroupTree(0)->getNode("FIELD")->name());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-11-20 07:59:43 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateSchedule_DeckWithGRUPTREE_HasRootGroupTreeNodeForTimeStepZero) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2013-11-20 07:59:43 -06:00
|
|
|
DeckPtr deck = createDeck();
|
|
|
|
DeckKeywordPtr gruptreeKeyword(new DeckKeyword("GRUPTREE"));
|
2014-12-08 09:34:28 -06:00
|
|
|
|
2013-11-20 07:59:43 -06:00
|
|
|
DeckRecordPtr recordChildOfField(new DeckRecord());
|
|
|
|
DeckStringItemPtr itemChild1(new DeckStringItem("CHILD_GROUP"));
|
|
|
|
itemChild1->push_back("BARNET");
|
|
|
|
DeckStringItemPtr itemParent1(new DeckStringItem("PARENT_GROUP"));
|
|
|
|
itemParent1->push_back("FAREN");
|
2014-12-08 09:34:28 -06:00
|
|
|
|
2013-11-20 07:59:43 -06:00
|
|
|
recordChildOfField->addItem(itemChild1);
|
|
|
|
recordChildOfField->addItem(itemParent1);
|
|
|
|
gruptreeKeyword->addRecord(recordChildOfField);
|
|
|
|
deck->addKeyword(gruptreeKeyword);
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2013-11-20 07:59:43 -06:00
|
|
|
GroupTreeNodePtr fieldNode = schedule.getGroupTree(0)->getNode("FIELD");
|
|
|
|
BOOST_CHECK_EQUAL("FIELD", fieldNode->name());
|
|
|
|
GroupTreeNodePtr FAREN = fieldNode->getChildGroup("FAREN");
|
|
|
|
BOOST_CHECK(FAREN->hasChildGroup("BARNET"));
|
|
|
|
}
|
2013-11-14 09:08:10 -06:00
|
|
|
|
|
|
|
|
|
|
|
|
2013-11-05 08:25:47 -06:00
|
|
|
|
2013-11-18 06:11:49 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(EmptyScheduleHasFIELDGroup) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2013-11-18 06:11:49 -06:00
|
|
|
DeckPtr deck = createDeck();
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2013-11-18 06:11:49 -06:00
|
|
|
BOOST_CHECK_EQUAL( 1U , schedule.numGroups() );
|
|
|
|
BOOST_CHECK_EQUAL( true , schedule.hasGroup("FIELD") );
|
|
|
|
BOOST_CHECK_EQUAL( false , schedule.hasGroup("GROUP") );
|
|
|
|
BOOST_CHECK_THROW( schedule.getGroup("GROUP") , std::invalid_argument );
|
|
|
|
}
|
|
|
|
|
2014-01-22 07:40:10 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(WellsIterator_Empty_EmptyVectorReturned) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2014-01-22 07:40:10 -06:00
|
|
|
DeckPtr deck = createDeck();
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2014-01-22 07:40:10 -06:00
|
|
|
|
2015-02-12 08:32:31 -06:00
|
|
|
std::vector<WellConstPtr> wells_alltimesteps = schedule.getWells();
|
2014-01-22 07:40:10 -06:00
|
|
|
BOOST_CHECK_EQUAL(0U, wells_alltimesteps.size());
|
2015-02-12 08:32:31 -06:00
|
|
|
std::vector<WellConstPtr> wells_t0 = schedule.getWells(0);
|
2014-01-22 07:40:10 -06:00
|
|
|
BOOST_CHECK_EQUAL(0U, wells_t0.size());
|
|
|
|
|
|
|
|
BOOST_CHECK_THROW(schedule.getWells(1), std::invalid_argument);
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(WellsIterator_HasWells_WellsReturned) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2014-01-22 07:40:10 -06:00
|
|
|
DeckPtr deck = createDeckWithWells();
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2014-01-22 07:40:10 -06:00
|
|
|
|
2015-02-12 08:32:31 -06:00
|
|
|
std::vector<WellConstPtr> wells_alltimesteps = schedule.getWells();
|
2014-01-22 07:40:10 -06:00
|
|
|
BOOST_CHECK_EQUAL(3U, wells_alltimesteps.size());
|
2015-02-12 08:32:31 -06:00
|
|
|
std::vector<WellConstPtr> wells_t0 = schedule.getWells(0);
|
2014-01-22 07:40:10 -06:00
|
|
|
BOOST_CHECK_EQUAL(1U, wells_t0.size());
|
2015-02-12 08:32:31 -06:00
|
|
|
std::vector<WellConstPtr> wells_t3 = schedule.getWells(3);
|
2014-01-22 07:40:10 -06:00
|
|
|
BOOST_CHECK_EQUAL(3U, wells_t3.size());
|
|
|
|
}
|
2013-11-18 06:11:49 -06:00
|
|
|
|
|
|
|
|
2014-05-06 02:54:37 -05:00
|
|
|
BOOST_AUTO_TEST_CASE(WellsIteratorWithRegex_HasWells_WellsReturned) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2014-05-06 02:54:37 -05:00
|
|
|
DeckPtr deck = createDeckWithWells();
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2014-05-06 02:54:37 -05:00
|
|
|
std::string wellNamePattern;
|
|
|
|
std::vector<WellPtr> wells;
|
|
|
|
|
|
|
|
wellNamePattern = "*";
|
|
|
|
wells = schedule.getWells(wellNamePattern);
|
|
|
|
BOOST_CHECK_EQUAL(3U, wells.size());
|
|
|
|
|
|
|
|
wellNamePattern = "W_*";
|
|
|
|
wells = schedule.getWells(wellNamePattern);
|
2014-05-14 08:10:17 -05:00
|
|
|
BOOST_CHECK_EQUAL(2U, wells.size());
|
2014-05-06 02:54:37 -05:00
|
|
|
|
|
|
|
wellNamePattern = "W_3";
|
|
|
|
wells = schedule.getWells(wellNamePattern);
|
|
|
|
BOOST_CHECK_EQUAL(1U, wells.size());
|
|
|
|
}
|
|
|
|
|
2014-12-05 05:59:53 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(ReturnNumWellsTimestep) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2014-12-05 05:59:53 -06:00
|
|
|
DeckPtr deck = createDeckWithWells();
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2014-12-05 05:59:53 -06:00
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(schedule.numWells(0), 1);
|
|
|
|
BOOST_CHECK_EQUAL(schedule.numWells(1), 1);
|
|
|
|
BOOST_CHECK_EQUAL(schedule.numWells(2), 1);
|
|
|
|
BOOST_CHECK_EQUAL(schedule.numWells(3), 3);
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(ReturnMaxNumCompletionsForWellsInTimestep) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2014-12-05 05:59:53 -06:00
|
|
|
DeckPtr deck = createDeckWithWellsAndCompletionData();
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2014-12-05 05:59:53 -06:00
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(schedule.getMaxNumCompletionsForWells(1), 7);
|
|
|
|
BOOST_CHECK_EQUAL(schedule.getMaxNumCompletionsForWells(3), 9);
|
|
|
|
}
|
|
|
|
|
2015-01-13 04:25:46 -06:00
|
|
|
static DeckPtr createDeckWithWellsAndCompletionDataWithWELOPEN() {
|
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"1 NOV 1979 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 1 DES 1979/ \n"
|
|
|
|
"/\n"
|
|
|
|
"WELSPECS\n"
|
|
|
|
" 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n"
|
|
|
|
" 'OP_2' 'OP' 8 8 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n"
|
|
|
|
" 'OP_3' 'OP' 7 7 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 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
" 'OP_2' 8 8 1 3 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Y' 21.925 / \n"
|
|
|
|
" 'OP_2' 8 7 3 3 'OPEN' 1* 15.071 0.311 1391.859 1* 1* 'Y' 21.920 / \n"
|
|
|
|
" 'OP_2' 8 7 3 6 'OPEN' 1* 6.242 0.311 576.458 1* 1* 'Y' 21.915 / \n"
|
|
|
|
" 'OP_3' 7 7 1 1 'OPEN' 1* 27.412 0.311 2445.337 1* 1* 'Y' 18.521 / \n"
|
|
|
|
" 'OP_3' 7 7 2 2 'OPEN' 1* 55.195 0.311 4923.842 1* 1* 'Y' 18.524 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 2,3\n"
|
|
|
|
" 10 JUL 2007 / \n"
|
|
|
|
" 10 AUG 2007 / \n"
|
|
|
|
"/\n"
|
|
|
|
"COMPDAT\n"
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' SHUT / \n"
|
|
|
|
" '*' OPEN 0 0 3 / \n"
|
2015-01-13 05:56:17 -06:00
|
|
|
" 'OP_2' SHUT 0 0 0 4 6 / \n "
|
2015-01-13 08:06:28 -06:00
|
|
|
" 'OP_3' SHUT 0 0 0 / \n"
|
2015-01-13 05:56:17 -06:00
|
|
|
"/\n"
|
|
|
|
"DATES -- 4\n"
|
|
|
|
" 10 JUL 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
2015-01-13 08:06:28 -06:00
|
|
|
" 'OP_1' OPEN / \n"
|
2015-01-13 05:56:17 -06:00
|
|
|
" 'OP_2' OPEN 0 0 0 4 6 / \n "
|
2015-01-13 08:06:28 -06:00
|
|
|
" 'OP_3' OPEN 0 0 0 / \n"
|
2015-01-16 10:49:28 -06:00
|
|
|
"/\n"
|
|
|
|
"DATES -- 5\n"
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' SHUT 0 0 0 0 0 / \n "
|
2015-01-13 04:25:46 -06:00
|
|
|
"/\n";
|
|
|
|
|
|
|
|
return parser.parseString(input);
|
|
|
|
}
|
|
|
|
|
2015-01-16 10:49:28 -06:00
|
|
|
|
|
|
|
|
2015-01-13 04:25:46 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWellsAndCompletionDataWithWELOPEN) {
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2015-01-13 04:25:46 -06:00
|
|
|
DeckPtr deck = createDeckWithWellsAndCompletionDataWithWELOPEN();
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2015-01-13 04:25:46 -06:00
|
|
|
WellPtr well;
|
|
|
|
well = schedule.getWell("OP_1");
|
|
|
|
size_t currentStep = 0;
|
2015-02-06 07:55:03 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::SHUT, well->getStatus(currentStep));
|
2015-01-13 04:25:46 -06:00
|
|
|
currentStep = 3;
|
2015-01-13 05:56:17 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::SHUT, well->getStatus(currentStep));
|
2015-01-13 04:25:46 -06:00
|
|
|
|
|
|
|
well = schedule.getWell("OP_2");
|
|
|
|
CompletionSetConstPtr completionSet = well->getCompletions(currentStep);
|
|
|
|
|
2015-01-13 05:56:17 -06:00
|
|
|
size_t index = 3;
|
|
|
|
CompletionConstPtr completion = completionSet->get(index);
|
2015-01-13 08:06:28 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::SHUT, completion->getState());
|
2015-01-13 05:56:17 -06:00
|
|
|
index = 4;
|
|
|
|
completion = completionSet->get(index);
|
2015-01-13 08:06:28 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::SHUT, completion->getState());
|
2015-01-13 05:56:17 -06:00
|
|
|
index = 5;
|
|
|
|
completion = completionSet->get(index);
|
2015-01-13 08:06:28 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::SHUT, completion->getState());
|
2015-01-13 05:56:17 -06:00
|
|
|
index = 6;
|
|
|
|
completion = completionSet->get(index);
|
2015-01-13 08:06:28 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::OPEN, completion->getState());
|
2015-01-13 05:56:17 -06:00
|
|
|
|
|
|
|
currentStep = 4;
|
|
|
|
completionSet = well->getCompletions(currentStep);
|
|
|
|
index = 3;
|
|
|
|
completion = completionSet->get(index);
|
2015-01-13 08:06:28 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::OPEN, completion->getState());
|
2015-01-13 05:56:17 -06:00
|
|
|
index = 4;
|
|
|
|
completion = completionSet->get(index);
|
2015-01-13 08:06:28 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::OPEN, completion->getState());
|
2015-01-13 05:56:17 -06:00
|
|
|
index = 5;
|
|
|
|
completion = completionSet->get(index);
|
2015-01-13 08:06:28 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::OPEN, completion->getState());
|
2015-01-13 05:56:17 -06:00
|
|
|
index = 6;
|
|
|
|
completion = completionSet->get(index);
|
2015-01-13 08:06:28 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::OPEN, completion->getState());
|
|
|
|
|
|
|
|
well = schedule.getWell("OP_3");
|
|
|
|
currentStep = 3;
|
|
|
|
completionSet = well->getCompletions(currentStep);
|
|
|
|
|
|
|
|
index = 0;
|
|
|
|
completion = completionSet->get(index);
|
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::SHUT, completion->getState());
|
|
|
|
|
|
|
|
currentStep = 4;
|
|
|
|
completionSet = well->getCompletions(currentStep);
|
|
|
|
|
|
|
|
index = 0;
|
|
|
|
completion = completionSet->get(index);
|
|
|
|
BOOST_CHECK_EQUAL(WellCompletion::StateEnum::OPEN, completion->getState());
|
|
|
|
|
|
|
|
well = schedule.getWell("OP_1");
|
|
|
|
|
2015-01-16 10:49:28 -06:00
|
|
|
currentStep = 3;
|
|
|
|
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::SHUT, well->getStatus(currentStep));
|
|
|
|
|
|
|
|
currentStep = 4;
|
|
|
|
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::OPEN, well->getStatus(currentStep));
|
|
|
|
|
|
|
|
currentStep = 5;
|
|
|
|
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::SHUT, well->getStatus(currentStep));
|
|
|
|
|
2015-01-13 04:25:46 -06:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2014-12-05 05:59:53 -06:00
|
|
|
|
2015-01-13 08:06:28 -06:00
|
|
|
|
2015-01-21 07:07:02 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithWELOPEN_TryToOpenWellWithShutCompletionsDoNotOpenWell) {
|
2015-01-16 10:49:28 -06:00
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"1 NOV 1979 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 1 DES 1979/ \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 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 2\n"
|
|
|
|
" 10 JUL 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' OPEN / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 3\n"
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' SHUT 0 0 0 0 0 / \n "
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 4\n"
|
|
|
|
" 10 NOV 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' OPEN / \n "
|
|
|
|
"/\n";
|
|
|
|
|
2015-01-25 16:48:48 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>(10,10,10);
|
2015-01-16 10:49:28 -06:00
|
|
|
DeckPtr deck = parser.parseString(input);
|
2015-01-25 16:48:48 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2015-01-21 07:07:02 -06:00
|
|
|
WellPtr well;
|
|
|
|
well = schedule.getWell("OP_1");
|
|
|
|
size_t currentStep = 3;
|
|
|
|
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::SHUT, well->getStatus(currentStep));
|
2015-01-22 00:39:29 -06:00
|
|
|
currentStep = 4;
|
2015-01-21 07:07:02 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::SHUT, well->getStatus(currentStep));
|
2015-01-16 10:49:28 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-01-20 01:59:56 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithCOMPLUMPwithC1_ThrowsExcpetion) {
|
2015-01-19 06:35:33 -06:00
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"1 NOV 1979 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 1 DES 1979/ \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 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 3\n"
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
"/\n"
|
2015-01-20 01:59:56 -06:00
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' OPEN 0 0 0 1 0 / \n"
|
|
|
|
"/\n"
|
|
|
|
"COMPLUMP\n"
|
|
|
|
" 'OP_1' 0 0 0 0 0 / \n "
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 4\n"
|
|
|
|
" 10 NOV 2008 / \n"
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
|
|
|
|
DeckPtr deck = parser.parseString(input);
|
2015-01-26 04:34:11 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 10 , 10 , 10 );
|
|
|
|
BOOST_CHECK_THROW(Schedule schedule(grid , deck), std::exception);
|
2015-01-20 01:59:56 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithCOMPLUMPwithC1andC2_ThrowsExcpetion) {
|
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"1 NOV 1979 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 1 DES 1979/ \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 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 3\n"
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' OPEN 0 0 0 1 4 / \n"
|
|
|
|
"/\n"
|
|
|
|
"COMPLUMP\n"
|
|
|
|
" 'OP_1' 0 0 0 0 0 / \n "
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 4\n"
|
|
|
|
" 10 NOV 2008 / \n"
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
|
|
|
|
DeckPtr deck = parser.parseString(input);
|
2015-01-26 04:34:11 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 10 , 10 , 10 );
|
|
|
|
BOOST_CHECK_THROW(Schedule schedule(grid , deck), std::exception);
|
2015-01-20 01:59:56 -06:00
|
|
|
}
|
2015-01-13 08:06:28 -06:00
|
|
|
|
2015-01-20 01:59:56 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithCOMPLUMPwithC2_ThrowsExcpetion) {
|
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"1 NOV 1979 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 1 DES 1979/ \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 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 3\n"
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' OPEN 0 0 0 0 4 / \n"
|
|
|
|
"/\n"
|
2015-01-19 06:35:33 -06:00
|
|
|
"COMPLUMP\n"
|
|
|
|
" 'OP_1' 0 0 0 0 0 / \n "
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 4\n"
|
|
|
|
" 10 NOV 2008 / \n"
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
|
|
|
|
DeckPtr deck = parser.parseString(input);
|
2015-01-26 04:34:11 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 10 , 10 , 10 );
|
|
|
|
BOOST_CHECK_THROW(Schedule schedule(grid , deck), std::exception);
|
2015-01-19 06:35:33 -06:00
|
|
|
}
|
|
|
|
|
2015-01-20 03:27:44 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithCOMPLUMPwithDefaultValuesInWELOPEN) {
|
2015-01-20 01:59:56 -06:00
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"1 NOV 1979 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 1 DES 1979/ \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 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 3\n"
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
2015-02-06 07:55:03 -06:00
|
|
|
" 'OP_1' OPEN/ \n"
|
2015-01-20 01:59:56 -06:00
|
|
|
"/\n"
|
|
|
|
"COMPLUMP\n"
|
|
|
|
" 'OP_1' 0 0 0 0 0 / \n "
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 4\n"
|
|
|
|
" 10 NOV 2008 / \n"
|
|
|
|
"/\n";
|
2015-01-19 06:35:33 -06:00
|
|
|
|
2015-01-26 04:34:11 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 10 , 10 , 10 );
|
2015-01-20 01:59:56 -06:00
|
|
|
DeckPtr deck = parser.parseString(input);
|
2015-01-26 04:34:11 -06:00
|
|
|
Schedule schedule(grid , deck);
|
2015-01-20 01:59:56 -06:00
|
|
|
WellPtr well;
|
|
|
|
well = schedule.getWell("OP_1");
|
2015-02-06 07:55:03 -06:00
|
|
|
size_t currentStep = 3;
|
2015-01-20 01:59:56 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::OPEN, well->getStatus(currentStep));
|
|
|
|
}
|
2015-01-13 08:06:28 -06:00
|
|
|
|
2015-02-06 07:55:03 -06:00
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithWRFT) {
|
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"1 NOV 1979 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 1 DES 1979/ \n"
|
|
|
|
"/\n"
|
|
|
|
"WELSPECS\n"
|
|
|
|
" 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n"
|
|
|
|
" 'OP_2' 'OP' 4 4 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 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
" 'OP_2' 4 4 4 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 2\n"
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WRFT \n"
|
|
|
|
"/ \n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' OPEN / \n"
|
|
|
|
" 'OP_2' OPEN / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 3\n"
|
|
|
|
" 10 NOV 2008 / \n"
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 10 , 10 , 10 );
|
|
|
|
DeckPtr deck = parser.parseString(input);
|
|
|
|
Schedule schedule(grid , deck);
|
|
|
|
WellPtr well;
|
|
|
|
size_t currentStep = 2;
|
|
|
|
well = schedule.getWell("OP_1");
|
2015-02-12 01:38:26 -06:00
|
|
|
BOOST_CHECK_EQUAL(well->getRFTActive(currentStep),true);
|
2015-02-06 07:55:03 -06:00
|
|
|
well = schedule.getWell("OP_2");
|
2015-02-12 01:38:26 -06:00
|
|
|
BOOST_CHECK_EQUAL(well->getRFTActive(currentStep),true);
|
2015-02-06 07:55:03 -06:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithWRFTPLT) {
|
|
|
|
Opm::Parser parser;
|
|
|
|
std::string input =
|
|
|
|
"START -- 0 \n"
|
|
|
|
"1 NOV 1979 / \n"
|
|
|
|
"SCHEDULE\n"
|
|
|
|
"DATES -- 1\n"
|
|
|
|
" 1 DES 1979/ \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 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' SHUT / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 2\n"
|
|
|
|
" 10 OKT 2006 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' SHUT / \n"
|
|
|
|
"/\n"
|
|
|
|
"WRFTPLT \n"
|
|
|
|
" 'OP_1' FOPN / \n"
|
|
|
|
"/ \n"
|
|
|
|
"DATES -- 3\n"
|
|
|
|
" 10 OKT 2007 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' OPEN 0 0 0 0 0 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 4\n"
|
|
|
|
" 10 OKT 2008 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELOPEN\n"
|
|
|
|
" 'OP_1' OPEN / \n"
|
|
|
|
"/\n"
|
|
|
|
"COMPLUMP\n"
|
|
|
|
" 'OP_1' 0 0 0 0 0 / \n "
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 5\n"
|
|
|
|
" 10 NOV 2008 / \n"
|
|
|
|
"/\n";
|
2015-01-13 08:06:28 -06:00
|
|
|
|
2015-02-06 07:55:03 -06:00
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 10 , 10 , 10 );
|
|
|
|
DeckPtr deck = parser.parseString(input);
|
|
|
|
Schedule schedule(grid , deck);
|
|
|
|
WellPtr well;
|
|
|
|
well = schedule.getWell("OP_1");
|
|
|
|
|
|
|
|
size_t currentStep = 3;
|
2015-02-12 01:38:26 -06:00
|
|
|
BOOST_CHECK_EQUAL(well->getRFTActive(currentStep),false);
|
2015-02-06 07:55:03 -06:00
|
|
|
currentStep = 4;
|
2015-02-12 01:38:26 -06:00
|
|
|
BOOST_CHECK_EQUAL(well->getRFTActive(currentStep),true);
|
2015-02-06 07:55:03 -06:00
|
|
|
BOOST_CHECK_EQUAL(WellCommon::StatusEnum::OPEN, well->getStatus(currentStep));
|
|
|
|
currentStep = 5;
|
2015-02-12 01:38:26 -06:00
|
|
|
BOOST_CHECK_EQUAL(well->getRFTActive(currentStep),false);
|
2015-02-06 07:55:03 -06:00
|
|
|
}
|
2015-01-13 08:06:28 -06:00
|
|
|
|
2015-03-25 02:20:22 -05:00
|
|
|
BOOST_AUTO_TEST_CASE(createDeckWithWeltArg) {
|
|
|
|
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 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n"
|
|
|
|
" 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n"
|
|
|
|
"/\n"
|
|
|
|
"DATES -- 2\n"
|
|
|
|
" 20 JAN 2010 / \n"
|
|
|
|
"/\n"
|
|
|
|
"WELTARG\n"
|
|
|
|
" OP_1 ORAT 1300 /\n"
|
|
|
|
" OP_1 WRAT 1400 /\n"
|
|
|
|
" OP_1 GRAT 1500 /\n"
|
|
|
|
" OP_1 LRAT 1600.58 /\n"
|
|
|
|
" OP_1 CRAT 1722.15 /\n"
|
|
|
|
" OP_1 RESV 1801.05 /\n"
|
|
|
|
" OP_1 BHP 1900 /\n"
|
|
|
|
" OP_1 THP 2000 /\n"
|
|
|
|
" OP_1 VFP 2100 /\n"
|
|
|
|
" OP_1 LIFT 2200 /\n"
|
|
|
|
" OP_1 GUID 2300 /\n"
|
|
|
|
" OP_1 WGRA 2490.09 /\n"
|
|
|
|
" OP_1 NGL 2519.51 /\n"
|
|
|
|
" OP_1 CVAL 2600 /\n"
|
|
|
|
" OP_1 REIN 2700 /\n"
|
|
|
|
" OP_1 STRA 2800 /\n"
|
|
|
|
" OP_1 SATP 2900 /\n"
|
|
|
|
" OP_1 SATT 3000 /\n"
|
|
|
|
"/\n";
|
|
|
|
|
|
|
|
DeckPtr deck = parser.parseString(input);
|
|
|
|
std::shared_ptr<const EclipseGrid> grid = std::make_shared<const EclipseGrid>( 10 , 10 , 10 );
|
|
|
|
Schedule schedule(grid , deck);
|
|
|
|
WellPtr well = schedule.getWell("OP_1");
|
|
|
|
|
|
|
|
size_t currentStep = 1;
|
|
|
|
WellProductionProperties wpp = well->getProductionProperties(currentStep);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.WaterRate,0);
|
|
|
|
|
|
|
|
currentStep = 2;
|
|
|
|
wpp = well->getProductionProperties(currentStep);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.OilRate, 1300);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.WaterRate, 1400);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.GasRate, 1500);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.LiquidRate, 1600.58);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.LinearlyCombinedRate, 1722.15);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.ResVRate, 1801.05);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.BHPLimit, 1900);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.THPLimit, 2000);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.VFPTableNumber, 2100);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.ArtificialLiftQuantity, 2200);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.GuideRate, 2300);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.WetGasRate, 2490.09);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.NGLRate, 2519.51);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.CalorificProductionRate, 2600);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.ReinjectionFraction, 2700);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.SteamRate, 2800);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.SaturationPressureOffset, 2900);
|
|
|
|
BOOST_CHECK_EQUAL(wpp.SaturationTemperatureOffset, 3000);
|
|
|
|
}
|