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; 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()) { for (const auto& well : args.schedule_wells) {
// No wells. Before simulation starts? auto xwPos = args.wells.find(well.name());
return zero; if (xwPos != args.wells.end())
alq_rate += xwPos->second.rates.get(rt::alq, 0.0);
} }
const auto& well = args.schedule_wells.front(); return { alq_rate, measure::gas_surface_rate };
auto xwPos = args.wells.find(well.name());
if (xwPos == args.wells.end()) {
return zero;
}
return { xwPos->second.rates.get(rt::alq, 0.0), measure::gas_surface_rate };
} }
template< rt phase, bool injection = true > template< rt phase, bool injection = true >
@ -1044,7 +1044,7 @@ static const std::unordered_map< std::string, ofun > funs = {
{ "WOPR", rate< rt::oil, producer > }, { "WOPR", rate< rt::oil, producer > },
{ "WGPR", rate< rt::gas, producer > }, { "WGPR", rate< rt::gas, producer > },
{ "WEPR", rate< rt::energy, producer > }, { "WEPR", rate< rt::energy, producer > },
{ "WGLIR", alqrate }, { "WGLIR", glir },
{ "WNPR", rate< rt::solvent, producer > }, { "WNPR", rate< rt::solvent, producer > },
{ "WCPR", rate< rt::polymer, producer > }, { "WCPR", rate< rt::polymer, producer > },
{ "WSPR", rate< rt::brine, producer > }, { "WSPR", rate< rt::brine, producer > },
@ -1126,7 +1126,7 @@ static const std::unordered_map< std::string, ofun > funs = {
{ "GWPR", rate< rt::wat, producer > }, { "GWPR", rate< rt::wat, producer > },
{ "GOPR", rate< rt::oil, producer > }, { "GOPR", rate< rt::oil, producer > },
{ "GGPR", rate< rt::gas, producer > }, { "GGPR", rate< rt::gas, producer > },
{ "GGLIR", alqrate }, { "GGLIR", glir },
{ "GNPR", rate< rt::solvent, producer > }, { "GNPR", rate< rt::solvent, producer > },
{ "GCPR", rate< rt::polymer, producer > }, { "GCPR", rate< rt::polymer, producer > },
{ "GSPR", rate< rt::brine, producer > }, { "GSPR", rate< rt::brine, producer > },
@ -1280,7 +1280,7 @@ static const std::unordered_map< std::string, ofun > funs = {
{ "FWPR", rate< rt::wat, producer > }, { "FWPR", rate< rt::wat, producer > },
{ "FOPR", rate< rt::oil, producer > }, { "FOPR", rate< rt::oil, producer > },
{ "FGPR", rate< rt::gas, producer > }, { "FGPR", rate< rt::gas, producer > },
{ "FGLIR", alqrate }, { "FGLIR", glir },
{ "FNPR", rate< rt::solvent, producer > }, { "FNPR", rate< rt::solvent, producer > },
{ "FCPR", rate< rt::polymer, producer > }, { "FCPR", rate< rt::polymer, producer > },
{ "FSPR", rate< rt::brine, producer > }, { "FSPR", rate< rt::brine, producer > },

View File

@ -255,6 +255,10 @@ namespace {
|| is_in_set(countkw, keyword.substr(1)); || 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) { bool is_region_to_region(const std::string& keyword) {
using sz_t = std::string::size_type; using sz_t = std::string::size_type;
if ((keyword.size() == sz_t{3}) && keyword[2] == 'F') return true; 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: Two step check for whether to discard this keyword as unsupported:
1. Completion quantity keywords are currently not supported. These are 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 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 the last character, and in that case it is treated as a normal well
keyword anyways. keyword anyways.
*/ */
if (keyword.name().back() == 'L') { 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(); const auto& location = keyword.location();
std::string msg = "Unsupported summary output keyword {}\n" std::string msg = "Unsupported summary output keyword {}\n"
"In {file} line {line}"; "In {file} line {line}";