diff --git a/lib/eclipse/EclipseState/Schedule/Schedule.cpp b/lib/eclipse/EclipseState/Schedule/Schedule.cpp index 6c5e25282..855cfe635 100644 --- a/lib/eclipse/EclipseState/Schedule/Schedule.cpp +++ b/lib/eclipse/EclipseState/Schedule/Schedule.cpp @@ -763,6 +763,13 @@ namespace Opm { } properties.predictionMode = false; + properties.BHPH = record.getItem( "BHP" ).hasValue(0) + ? record.getItem("BHP").getSIDouble(0) + : 0.0; + properties.THPH = record.getItem( "THP" ).hasValue(0) + ? record.getItem("THP").getSIDouble(0) + : 0.0; + if (well.setInjectionProperties(currentStep, properties)) m_events.addEvent( ScheduleEvents::INJECTION_UPDATE , currentStep ); diff --git a/lib/eclipse/EclipseState/Schedule/WellInjectionProperties.cpp b/lib/eclipse/EclipseState/Schedule/WellInjectionProperties.cpp index 2fa18a883..450d34a7b 100644 --- a/lib/eclipse/EclipseState/Schedule/WellInjectionProperties.cpp +++ b/lib/eclipse/EclipseState/Schedule/WellInjectionProperties.cpp @@ -34,6 +34,8 @@ namespace Opm { + ParserKeywords::STCOND::TEMPERATURE::defaultValue; BHPLimit=0.0; THPLimit=0.0; + BHPH=0.0; + THPH=0.0; VFPTableNumber=0; predictionMode=true; injectionControls=0; @@ -48,6 +50,8 @@ namespace Opm { (temperature == other.temperature) && (BHPLimit == other.BHPLimit) && (THPLimit == other.THPLimit) && + (BHPH == other.BHPH) && + (THPH == other.THPH) && (VFPTableNumber == other.VFPTableNumber) && (predictionMode == other.predictionMode) && (injectionControls == other.injectionControls) && @@ -71,6 +75,8 @@ namespace Opm { << "temperature: " << wp.temperature << ", " << "BHP limit: " << wp.BHPLimit << ", " << "THP limit: " << wp.THPLimit << ", " + << "BHPH: " << wp.BHPH << ", " + << "THPH: " << wp.THPH << ", " << "VFP table: " << wp.VFPTableNumber << ", " << "prediction mode: " << wp.predictionMode << ", " << "injection ctrl: " << wp.injectionControls << ", " diff --git a/lib/eclipse/EclipseState/Schedule/WellProductionProperties.cpp b/lib/eclipse/EclipseState/Schedule/WellProductionProperties.cpp index 1f963fbc4..e838c0145 100644 --- a/lib/eclipse/EclipseState/Schedule/WellProductionProperties.cpp +++ b/lib/eclipse/EclipseState/Schedule/WellProductionProperties.cpp @@ -86,6 +86,9 @@ namespace Opm { throw std::invalid_argument("Setting CMODE to unspecified control"); } + p.BHPH = record.getItem("BHP").getSIDouble(0); + p.THPH = record.getItem("THP").getSIDouble(0); + return p; } @@ -146,6 +149,8 @@ namespace Opm { && ResVRate == other.ResVRate && BHPLimit == other.BHPLimit && THPLimit == other.THPLimit + && BHPH == other.BHPH + && THPH == other.THPH && VFPTableNumber == other.VFPTableNumber && controlMode == other.controlMode && m_productionControls == other.m_productionControls @@ -168,6 +173,8 @@ namespace Opm { << "ResV rate: " << wp.ResVRate << ", " << "BHP limit: " << wp.BHPLimit << ", " << "THP limit: " << wp.THPLimit << ", " + << "BHPH: " << wp.BHPH << ", " + << "THPH: " << wp.THPH << ", " << "VFP table: " << wp.VFPTableNumber << ", " << "ALQ: " << wp.ALQValue << ", " << "prediction: " << wp.predictionMode << " }"; diff --git a/lib/eclipse/include/opm/parser/eclipse/EclipseState/Schedule/WellInjectionProperties.hpp b/lib/eclipse/include/opm/parser/eclipse/EclipseState/Schedule/WellInjectionProperties.hpp index 1b2bbc892..96381497d 100644 --- a/lib/eclipse/include/opm/parser/eclipse/EclipseState/Schedule/WellInjectionProperties.hpp +++ b/lib/eclipse/include/opm/parser/eclipse/EclipseState/Schedule/WellInjectionProperties.hpp @@ -32,6 +32,8 @@ namespace Opm { double temperature; double BHPLimit; double THPLimit; + double BHPH; + double THPH; int VFPTableNumber; bool predictionMode; int injectionControls; diff --git a/lib/eclipse/include/opm/parser/eclipse/EclipseState/Schedule/WellProductionProperties.hpp b/lib/eclipse/include/opm/parser/eclipse/EclipseState/Schedule/WellProductionProperties.hpp index be856dc47..ece9a7129 100644 --- a/lib/eclipse/include/opm/parser/eclipse/EclipseState/Schedule/WellProductionProperties.hpp +++ b/lib/eclipse/include/opm/parser/eclipse/EclipseState/Schedule/WellProductionProperties.hpp @@ -39,6 +39,8 @@ namespace Opm { double ResVRate = 0.0; double BHPLimit = 0.0; double THPLimit = 0.0; + double BHPH = 0.0; + double THPH = 0.0; int VFPTableNumber = 0; double ALQValue = 0.0; bool predictionMode = false; diff --git a/lib/eclipse/tests/ScheduleTests.cpp b/lib/eclipse/tests/ScheduleTests.cpp index 168c295e6..9592821c8 100644 --- a/lib/eclipse/tests/ScheduleTests.cpp +++ b/lib/eclipse/tests/ScheduleTests.cpp @@ -2178,3 +2178,40 @@ BOOST_AUTO_TEST_CASE(handleWEFAC) { BOOST_CHECK_EQUAL(well_i->getEfficiencyFactor(3), 0.9); } + +BOOST_AUTO_TEST_CASE(historic_BHP_and_THP) { + 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" + " 'P' 'OP' 9 9 1* 'OIL' 1* / \n" + " 'I' 'OP' 9 9 1* 'WATER' 1* / \n" + "/\n" + "WCONHIST\n" + " P SHUT ORAT 6 500 0 0 0 1.2 1.1 / \n" + "/\n" + "WCONINJH\n" + " I WATER STOP 100 2.1 2.2 / \n" + "/\n" + ; + + ParseContext parseContext; + auto deck = parser.parseString(input, parseContext); + EclipseGrid grid(10,10,10); + TableManager table ( deck ); + Eclipse3DProperties eclipseProperties ( deck , table, grid); + Schedule schedule( deck, grid, eclipseProperties, Phases( true, true, true ) ,parseContext); + + const auto& prod = schedule.getWell("P")->getProductionProperties(1); + const auto& inje = schedule.getWell("I")->getInjectionProperties(1); + + BOOST_CHECK_CLOSE( 1.1 * 1e5, prod.BHPH, 1e-5 ); + BOOST_CHECK_CLOSE( 1.2 * 1e5, prod.THPH, 1e-5 ); + BOOST_CHECK_CLOSE( 2.1 * 1e5, inje.BHPH, 1e-5 ); + BOOST_CHECK_CLOSE( 2.2 * 1e5, inje.THPH, 1e-5 ); +}