diff --git a/src/opm/output/eclipse/Summary.cpp b/src/opm/output/eclipse/Summary.cpp index 8316ccb0d..a1165ac51 100644 --- a/src/opm/output/eclipse/Summary.cpp +++ b/src/opm/output/eclipse/Summary.cpp @@ -468,21 +468,21 @@ double efac( const std::vector>& 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; + for (const auto& well : args.schedule_wells) { + auto xwPos = args.wells.find(well.name()); + if (xwPos != args.wells.end()) + alq_rate += xwPos->second.rates.get(rt::alq, 0.0); } - const auto& well = args.schedule_wells.front(); - 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 }; + 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 > }, diff --git a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp index 42d257a1d..dfbeb0fd6 100644 --- a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp @@ -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}";