From 5337306a55d0f101626ae80e319b9592eca7ba43 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Thu, 5 Nov 2020 14:22:24 +0100 Subject: [PATCH] Add summary evaluation for CxxxL connection completion keywords --- src/opm/output/eclipse/Summary.cpp | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/opm/output/eclipse/Summary.cpp b/src/opm/output/eclipse/Summary.cpp index 975804e08..4995f556b 100644 --- a/src/opm/output/eclipse/Summary.cpp +++ b/src/opm/output/eclipse/Summary.cpp @@ -558,6 +558,39 @@ inline quantity ratel( const fn_args& args ) { return { sum, rate_unit< phase >() }; } +template< rt phase, bool injection = true > +inline quantity cratel( const fn_args& args ) { + const quantity zero = { 0, rate_unit< phase >() }; + + const auto& well = args.schedule_wells.front(); + const auto& name = well.name(); + if( args.wells.count( name ) == 0 ) return zero; + const auto& well_data = args.wells.at( name ); + if (well_data.current_control.isProducer == injection) return zero; + + double sum = 0; + const auto& conn0 = well.getConnections().getFromGlobalIndex( args.num - 1); + const auto& connections = well.getConnections(conn0.complnum()) ; + for (const auto& conn_ptr : connections) { + const size_t global_index = conn_ptr->global_index(); + const auto& conn_data = std::find_if(well_data.connections.begin(), + well_data.connections.end(), + [global_index] (const Opm::data::Connection cdata) + { + return cdata.index == global_index; + }); + if (conn_data != well_data.connections.end()) { + double eff_fac = efac( args.eff_factors, name ); + sum += conn_data->rates.get( phase, 0.0 ) * eff_fac; + } + } + if( !injection ) sum *= -1; + + if (phase == rt::polymer || phase == rt::brine) return { sum, measure::mass_rate }; + return { sum, rate_unit< phase >() }; +} + + template< bool injection > inline quantity flowing( const fn_args& args ) { const auto& wells = args.wells; @@ -1317,6 +1350,20 @@ static const std::unordered_map< std::string, ofun > funs = { { "GVPRT", res_vol_production_target }, + { "CGIRL", cratel< rt::gas, injector> }, + { "CGITL", mul( cratel< rt::gas, injector>, duration) }, + { "CWIRL", cratel< rt::wat, injector> }, + { "CWITL", mul( cratel< rt::wat, injector>, duration) }, + { "CWPRL", cratel< rt::wat, producer > }, + { "CWPTL", mul( cratel< rt::wat, producer >, duration) }, + { "COPRL", cratel< rt::oil, producer > }, + { "COPTL", mul( cratel< rt::oil, producer >, duration) }, + { "CGPRL", cratel< rt::gas, producer > }, + { "CGPTL", mul( cratel< rt::gas, producer >, duration) }, + { "COFRL", cratel< rt::oil, producer > }, + { "CGORL", div( cratel< rt::gas, producer >, cratel< rt::oil, producer > ) }, + { "CWCTL", div( cratel< rt::wat, producer >, + sum( cratel< rt::wat, producer >, cratel< rt::oil, producer > ) ) }, { "CWIR", crate< rt::wat, injector > }, { "CGIR", crate< rt::gas, injector > }, { "CCIR", crate< rt::polymer, injector > },