Merge pull request #2057 from OPM/summary-bugfixes

Summary bugfixes
This commit is contained in:
Bård Skaflestad 2020-10-27 14:30:29 +01:00 committed by GitHub
commit 2ba39f875c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 17 deletions

View File

@ -468,21 +468,21 @@ double efac( const std::vector<std::pair<std::string,double>>& eff_factors, cons
return (it != eff_factors.end()) ? it->second : 1;
}
inline quantity alqrate( const fn_args& args ) {
const quantity zero = { 0.0, measure::gas_surface_rate };
/*
This is bit dangerous, exactly how the ALQ value should be interpreted varies
between the different VFP tables. The code here assumes - without checking -
that it represents gas lift rate.
*/
inline quantity glir( const fn_args& args ) {
double alq_rate = 0;
if (args.schedule_wells.empty()) {
// No wells. Before simulation starts?
return zero;
}
const auto& well = args.schedule_wells.front();
for (const auto& well : args.schedule_wells) {
auto xwPos = args.wells.find(well.name());
if (xwPos == args.wells.end()) {
return zero;
if (xwPos != args.wells.end())
alq_rate += xwPos->second.rates.get(rt::alq, 0.0);
}
return { xwPos->second.rates.get(rt::alq, 0.0), measure::gas_surface_rate };
return { alq_rate, measure::gas_surface_rate };
}
template< rt phase, bool injection = true >
@ -1044,7 +1044,7 @@ static const std::unordered_map< std::string, ofun > funs = {
{ "WOPR", rate< rt::oil, producer > },
{ "WGPR", rate< rt::gas, producer > },
{ "WEPR", rate< rt::energy, producer > },
{ "WGLIR", alqrate },
{ "WGLIR", glir },
{ "WNPR", rate< rt::solvent, producer > },
{ "WCPR", rate< rt::polymer, producer > },
{ "WSPR", rate< rt::brine, producer > },
@ -1126,7 +1126,7 @@ static const std::unordered_map< std::string, ofun > funs = {
{ "GWPR", rate< rt::wat, producer > },
{ "GOPR", rate< rt::oil, producer > },
{ "GGPR", rate< rt::gas, producer > },
{ "GGLIR", alqrate },
{ "GGLIR", glir },
{ "GNPR", rate< rt::solvent, producer > },
{ "GCPR", rate< rt::polymer, producer > },
{ "GSPR", rate< rt::brine, producer > },
@ -1280,7 +1280,7 @@ static const std::unordered_map< std::string, ofun > funs = {
{ "FWPR", rate< rt::wat, producer > },
{ "FOPR", rate< rt::oil, producer > },
{ "FGPR", rate< rt::gas, producer > },
{ "FGLIR", alqrate },
{ "FGLIR", glir },
{ "FNPR", rate< rt::solvent, producer > },
{ "FCPR", rate< rt::polymer, producer > },
{ "FSPR", rate< rt::brine, producer > },

View File

@ -255,6 +255,10 @@ namespace {
|| is_in_set(countkw, keyword.substr(1));
}
bool is_liquid_phase(const std::string& keyword) {
return keyword == "WPIL";
}
bool is_region_to_region(const std::string& keyword) {
using sz_t = std::string::size_type;
if ((keyword.size() == sz_t{3}) && keyword[2] == 'F') return true;
@ -424,14 +428,14 @@ inline void keywordW( SummaryConfig::keyword_list& list,
Two step check for whether to discard this keyword as unsupported:
1. Completion quantity keywords are currently not supported. These are
well summary keywords, apart from "WMCTL", that end in 'L'.
well summary keywords, apart from "WMCTL" and "WPIL", that end in 'L'.
2. If the keyword is a UDQ keyword there is no convention enforced to
the last character, and in that case it is treated as a normal well
keyword anyways.
*/
if (keyword.name().back() == 'L') {
if (! (is_control_mode(keyword.name()) || is_udq(keyword.name()))) {
if (! (is_control_mode(keyword.name()) || is_liquid_phase(keyword.name()) || is_udq(keyword.name()))) {
const auto& location = keyword.location();
std::string msg = "Unsupported summary output keyword {}\n"
"In {file} line {line}";