diff --git a/opm/parser/eclipse/EclipseState/Schedule/Group.cpp b/opm/parser/eclipse/EclipseState/Schedule/Group.cpp index 8c0328996..008f1abd4 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/Group.cpp +++ b/opm/parser/eclipse/EclipseState/Schedule/Group.cpp @@ -27,16 +27,22 @@ namespace Opm { Group::Group(const std::string& name , TimeMapConstPtr timeMap) : m_injectionPhase( new DynamicState( timeMap , WATER )), m_injectionControlMode( new DynamicState( timeMap , NONE )), - m_injectionRate( new DynamicState( timeMap , 0 )) + m_injectionRate( new DynamicState( timeMap , 0 )), + m_surfaceFlowMaxRate( new DynamicState( timeMap , 0)), + m_reservoirFlowMaxRate( new DynamicState( timeMap , 0)), + m_targetReinjectFraction( new DynamicState( timeMap , 0)), + m_targetVoidReplacementFraction( new DynamicState( timeMap , 0)) { m_name = name; } + const std::string& Group::name() const { return m_name; } + - void Group::setInjectionPhase(size_t time_step , PhaseEnum phase) { + void Group::setInjectionPhase(size_t time_step , PhaseEnum phase){ if (m_injectionPhase->size() == time_step + 1) { PhaseEnum currentPhase = m_injectionPhase->get(time_step); /* @@ -83,6 +89,38 @@ namespace Opm { return m_injectionControlMode->get( time_step ); } + void Group::setSurfaceMaxRate( size_t time_step , double rate) { + return m_surfaceFlowMaxRate->add( time_step , rate); + } + + double Group::getSurfaceMaxRate( size_t time_step ) const { + return m_surfaceFlowMaxRate->get( time_step ); + } + + void Group::setReservoirMaxRate( size_t time_step , double rate) { + return m_reservoirFlowMaxRate->add( time_step , rate); + } + + double Group::getReservoirMaxRate( size_t time_step ) const { + return m_reservoirFlowMaxRate->get( time_step ); + } + + void Group::setTargetReinjectFraction( size_t time_step , double rate) { + return m_targetReinjectFraction->add( time_step , rate); + } + + double Group::getTargetReinjectFraction( size_t time_step ) const { + return m_targetReinjectFraction->get( time_step ); + } + + void Group::setTargetVoidReplacementFraction( size_t time_step , double rate) { + return m_targetVoidReplacementFraction->add( time_step , rate); + } + + double Group::getTargetVoidReplacementFraction( size_t time_step ) const { + return m_targetVoidReplacementFraction->get( time_step ); + } + } diff --git a/opm/parser/eclipse/EclipseState/Schedule/Group.hpp b/opm/parser/eclipse/EclipseState/Schedule/Group.hpp index 8ed87ec8e..180c52815 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/Group.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/Group.hpp @@ -35,19 +35,36 @@ namespace Opm { Group(const std::string& name, TimeMapConstPtr timeMap); const std::string& name() const; - void setInjectionPhase(size_t time_step , PhaseEnum phase); + void setInjectionPhase(size_t time_step , PhaseEnum phase); PhaseEnum getInjectionPhase( size_t time_step) const; - void setInjectionControlMode(size_t time_step , GroupInjectionControlEnum ControlMode); + void setInjectionControlMode(size_t time_step , GroupInjectionControlEnum ControlMode); GroupInjectionControlEnum getInjectionControlMode( size_t time_step) const; - void setInjectionRate(size_t time_step , double rate); + void setInjectionRate(size_t time_step , double rate); double getInjectionRate( size_t time_step) const; + + void setSurfaceMaxRate( size_t time_step , double rate); + double getSurfaceMaxRate( size_t time_step ) const; + + void setReservoirMaxRate( size_t time_step , double rate); + double getReservoirMaxRate( size_t time_step ) const; + + void setTargetReinjectFraction( size_t time_step , double rate); + double getTargetReinjectFraction( size_t time_step ) const; + + void setTargetVoidReplacementFraction( size_t time_step , double rate); + double getTargetVoidReplacementFraction( size_t time_step ) const; + private: std::string m_name; boost::shared_ptr > m_injectionPhase; boost::shared_ptr > m_injectionControlMode; boost::shared_ptr > m_injectionRate; + boost::shared_ptr > m_surfaceFlowMaxRate; + boost::shared_ptr > m_reservoirFlowMaxRate; + boost::shared_ptr > m_targetReinjectFraction; + boost::shared_ptr > m_targetVoidReplacementFraction; }; typedef boost::shared_ptr GroupPtr; typedef boost::shared_ptr GroupConstPtr; diff --git a/opm/parser/eclipse/EclipseState/Schedule/tests/GroupTests.cpp b/opm/parser/eclipse/EclipseState/Schedule/tests/GroupTests.cpp index 638037936..c207ae468 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/tests/GroupTests.cpp +++ b/opm/parser/eclipse/EclipseState/Schedule/tests/GroupTests.cpp @@ -82,3 +82,21 @@ BOOST_AUTO_TEST_CASE(GroupChangePhaseSameTimeThrows) { } + + +BOOST_AUTO_TEST_CASE(GroupMiscInjection) { + Opm::TimeMapPtr timeMap = createXDaysTimeMap(10); + Opm::Group group("G1" , timeMap); + + group.setSurfaceMaxRate( 3 , 100 ); + BOOST_CHECK_EQUAL( 100 , group.getSurfaceMaxRate( 5 )); + + group.setReservoirMaxRate( 3 , 200 ); + BOOST_CHECK_EQUAL( 200 , group.getReservoirMaxRate( 5 )); + + group.setTargetReinjectFraction( 3 , 300 ); + BOOST_CHECK_EQUAL( 300 , group.getTargetReinjectFraction( 5 )); + + group.setTargetVoidReplacementFraction( 3 , 400 ); + BOOST_CHECK_EQUAL( 400 , group.getTargetVoidReplacementFraction( 5 )); +}