Add support for WTHPH+WBHPH keywords

This commit is contained in:
Sveinung Styve Rundhovde (IT SI SIB) 2017-11-28 08:41:36 +01:00
parent adb017aec4
commit ff193322e4
6 changed files with 68 additions and 0 deletions

View File

@ -32,6 +32,8 @@ namespace Opm {
double temperature;
double BHPLimit;
double THPLimit;
double BHPH;
double THPH;
int VFPTableNumber;
bool predictionMode;
int injectionControls;

View File

@ -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;

View File

@ -763,6 +763,11 @@ namespace Opm {
}
properties.predictionMode = false;
if ( record.getItem( "BHP" ).hasValue(0) )
properties.BHPH = record.getItem("BHP").getSIDouble(0);
if ( record.getItem( "THP" ).hasValue(0) )
properties.THPH = record.getItem("THP").getSIDouble(0);
if (well.setInjectionProperties(currentStep, properties))
m_events.addEvent( ScheduleEvents::INJECTION_UPDATE , currentStep );

View File

@ -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 << ", "

View File

@ -86,6 +86,11 @@ namespace Opm {
throw std::invalid_argument("Setting CMODE to unspecified control");
}
if ( record.getItem( "BHP" ).hasValue(0) )
p.BHPH = record.getItem("BHP").getSIDouble(0);
if ( record.getItem( "THP" ).hasValue(0) )
p.THPH = record.getItem("THP").getSIDouble(0);
return p;
}
@ -146,6 +151,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 +175,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 << " }";

View File

@ -2178,3 +2178,47 @@ 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"
" 'P1' '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"
"WCONPROD\n"
" P1 SHUT ORAT 6 500 0 0 0 3.2 3.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& pro1 = schedule.getWell("P1")->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 );
BOOST_CHECK_CLOSE( 0.0 * 1e5, pro1.BHPH, 1e-5 );
BOOST_CHECK_CLOSE( 0.0 * 1e5, pro1.THPH, 1e-5 );
}