From 7d015772ee10bf24a88cd5b72dc8d3bf9db7c799 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Fri, 8 Nov 2013 23:20:09 +0100 Subject: [PATCH] Added completionSet as DynamicState<> property to the Well Object --- .../eclipse/EclipseState/Schedule/Well.cpp | 23 ++++++++- .../eclipse/EclipseState/Schedule/Well.hpp | 7 ++- .../EclipseState/Schedule/tests/WellTests.cpp | 48 +++++++++++++++++++ 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/opm/parser/eclipse/EclipseState/Schedule/Well.cpp b/opm/parser/eclipse/EclipseState/Schedule/Well.cpp index 468d3df1f..d3e5f1aee 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/Well.cpp +++ b/opm/parser/eclipse/EclipseState/Schedule/Well.cpp @@ -24,11 +24,16 @@ #include #include #include +#include +#include namespace Opm { - Well::Well(const std::string& name, TimeMapConstPtr timeMap) - : m_oilRate(new DynamicState(timeMap, 0.0)), m_inPredictionMode(new DynamicState(timeMap, true)) { + Well::Well(const std::string& name , TimeMapConstPtr timeMap) + : m_oilRate( new DynamicState( timeMap , 0.0)) , + m_inPredictionMode(new DynamicState(timeMap, true)), + m_completions( new DynamicState( timeMap , CompletionSetConstPtr( new CompletionSet()) )) + { m_name = name; } @@ -62,6 +67,20 @@ namespace Opm { } + CompletionSetConstPtr Well::getCompletions(size_t timeStep) { + return m_completions->get( timeStep ); + } + + void Well::addCompletions(size_t time_step , const std::vector& newCompletions) { + CompletionSetConstPtr currentCompletionSet = m_completions->get(time_step); + CompletionSetPtr newCompletionSet = CompletionSetPtr( currentCompletionSet->shallowCopy() ); + + for (size_t ic = 0; ic < newCompletions.size(); ic++) + newCompletionSet->add( newCompletions[ic] ); + + m_completions->add( time_step , newCompletionSet); + } + } diff --git a/opm/parser/eclipse/EclipseState/Schedule/Well.hpp b/opm/parser/eclipse/EclipseState/Schedule/Well.hpp index 10104efdd..9e985d3bb 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/Well.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/Well.hpp @@ -23,6 +23,8 @@ #include #include +#include +#include #include #include @@ -39,12 +41,13 @@ namespace Opm { bool isInPredictionMode(size_t timeStep) const; void setInPredictionMode(size_t timeStep, bool isInPredictionMode); void addWELSPECS(DeckRecordConstPtr deckRecord); - + void addCompletions(size_t time_step , const std::vector& newCompletions); + CompletionSetConstPtr getCompletions(size_t timeStep); private: std::string m_name; boost::shared_ptr > m_oilRate; boost::shared_ptr > m_inPredictionMode; - + boost::shared_ptr > m_completions; }; typedef boost::shared_ptr WellPtr; typedef boost::shared_ptr WellConstPtr; diff --git a/opm/parser/eclipse/EclipseState/Schedule/tests/WellTests.cpp b/opm/parser/eclipse/EclipseState/Schedule/tests/WellTests.cpp index 110d45476..fafd73d3f 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/tests/WellTests.cpp +++ b/opm/parser/eclipse/EclipseState/Schedule/tests/WellTests.cpp @@ -64,3 +64,51 @@ BOOST_AUTO_TEST_CASE(setPredictionMode_ModeSetCorrect) { BOOST_CHECK_EQUAL(false , well.isInPredictionMode( 5 )); BOOST_CHECK_EQUAL(false , well.isInPredictionMode( 8 )); } + + + +BOOST_AUTO_TEST_CASE(NewWellZeroCompletions) { + Opm::TimeMapPtr timeMap = createXDaysTimeMap(10); + Opm::Well well("WELL1" , timeMap); + Opm::CompletionSetConstPtr completions = well.getCompletions( 0 ); + BOOST_CHECK_EQUAL( 0U , completions->size()); +} + + +BOOST_AUTO_TEST_CASE(UpdateCompletions) { + Opm::TimeMapPtr timeMap = createXDaysTimeMap(10); + Opm::Well well("WELL1" , timeMap); + Opm::CompletionSetConstPtr completions = well.getCompletions( 0 ); + BOOST_CHECK_EQUAL( 0U , completions->size()); + + std::vector newCompletions; + std::vector newCompletions2; + Opm::CompletionConstPtr comp1(new Opm::Completion( 10 , 10 , 10 , Opm::AUTO , 99.0)); + Opm::CompletionConstPtr comp2(new Opm::Completion( 10 , 11 , 10 , Opm::SHUT , 99.0)); + Opm::CompletionConstPtr comp3(new Opm::Completion( 10 , 10 , 12 , Opm::OPEN , 99.0)); + Opm::CompletionConstPtr comp4(new Opm::Completion( 10 , 10 , 12 , Opm::SHUT , 99.0)); + Opm::CompletionConstPtr comp5(new Opm::Completion( 10 , 10 , 13 , Opm::OPEN , 99.0)); + + //std::vector 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)); + +} +