Summary Output: Make Group Potentials Aware of Efficiency Factors

As with all rate-like quantities, the *EFAC values affect the group
tree level above the level where the factor is applied
This commit is contained in:
Bård Skaflestad 2020-04-24 17:01:06 +02:00
parent 7468499855
commit 96a2350bf3
3 changed files with 128 additions and 2 deletions

View File

@ -722,11 +722,11 @@ inline quantity potential_rate( const fn_args& args ) {
if (sched_well.isInjector() && outputInjector) {
const auto v = args.wells.at(name).rates.get(phase, 0.0);
sum += v;
sum += v * efac(args.eff_factors, name);
}
else if (sched_well.isProducer() && outputProducer) {
const auto v = args.wells.at(name).rates.get(phase, 0.0);
sum += v;
sum += v * efac(args.eff_factors, name);
}
}

View File

@ -88,6 +88,17 @@ GWCT
GGOR
/
GOPP
/
GWPP
/
GGPP
/
GGPI
/
GWPI
/
FOPR
FOPT
@ -96,6 +107,12 @@ FOIR
FOIT
FOPP
FWPP
FGPP
FGPI
FWPI
COPR
'W_2' /
/

View File

@ -1579,6 +1579,31 @@ BOOST_AUTO_TEST_CASE(READ_WRITE_WELLDATA) {
BOOST_CHECK_MESSAGE(curr.inj == ::Opm::Well::InjectorCMode::GRUP, "W_6 must be on GRUP control");
}
// Well/group tree structure (SUMMARY_EFF_FAC.DATA):
//
// W* are wells, G* are groups.
//
// +-------+
// | FIELD |
// +---+---+
// |
// +----------+-----------------+
// | |
// +----+---+ +----+---+
// | G | | G_4 |
// +----+---+ +----+---+
// | |
// +--------+----------+ +----+---+
// | | | G_3 |
// +----+---+ +----+---+ +----+---+
// | G_1 | | G_2 | |
// +----+---+ +----+---+ +----+---+
// | | | W_3 |
// +----+---+ +----+---+ +----+---+
// | W_1 | | W_2 |
// +----+---+ +----+---+
//
BOOST_AUTO_TEST_CASE(efficiency_factor) {
setup cfg( "test_efficiency_factor", "SUMMARY_EFF_FAC.DATA" );
@ -1599,12 +1624,48 @@ BOOST_AUTO_TEST_CASE(efficiency_factor) {
BOOST_CHECK_CLOSE( 10.1, ecl_sum_get_well_var( resp, 1, "W_1", "WOPT" ), 1e-5 );
BOOST_CHECK_CLOSE( 2 * 10.1, ecl_sum_get_well_var( resp, 2, "W_1", "WOPT" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.13, ecl_sum_get_group_var( resp, 1, "G_1", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.14, ecl_sum_get_group_var( resp, 1, "G_1", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.15, ecl_sum_get_group_var( resp, 1, "G_1", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G_1", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G_1", "GGPI" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.13, ecl_sum_get_group_var( resp, 2, "G_1", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.14, ecl_sum_get_group_var( resp, 2, "G_1", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.15, ecl_sum_get_group_var( resp, 2, "G_1", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G_1", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G_1", "GGPI" ), 1e-5 );
/* WEFAC 0.2 assigned to W_2.
* W_2 assigned to group G2. GEFAC G2 = 0.01 */
BOOST_CHECK_CLOSE( 20.1, ecl_sum_get_well_var( resp, 1, "W_2", "WOPR" ), 1e-5 );
BOOST_CHECK_CLOSE( 20.1 * 0.2 * 0.01, ecl_sum_get_well_var( resp, 1, "W_2", "WOPT" ), 1e-5 );
BOOST_CHECK_CLOSE( 2 * 20.1 * 0.2 * 0.01, ecl_sum_get_well_var( resp, 2, "W_2", "WOPT" ), 1e-5 );
BOOST_CHECK_CLOSE( -20.13 * 0.2, ecl_sum_get_group_var( resp, 1, "G_2", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -20.14 * 0.2, ecl_sum_get_group_var( resp, 1, "G_2", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -20.15 * 0.2, ecl_sum_get_group_var( resp, 1, "G_2", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G_2", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G_2", "GGPI" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.13 - (20.13 * 0.2 * 0.01), ecl_sum_get_group_var( resp, 1, "G", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.14 - (20.14 * 0.2 * 0.01), ecl_sum_get_group_var( resp, 1, "G", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.15 - (20.15 * 0.2 * 0.01), ecl_sum_get_group_var( resp, 1, "G", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G", "GGPI" ), 1e-5 );
BOOST_CHECK_CLOSE( -20.13 * 0.2, ecl_sum_get_group_var( resp, 2, "G_2", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -20.14 * 0.2, ecl_sum_get_group_var( resp, 2, "G_2", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -20.15 * 0.2, ecl_sum_get_group_var( resp, 2, "G_2", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G_2", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G_2", "GGPI" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.13 - (20.13 * 0.2 * 0.01), ecl_sum_get_group_var( resp, 2, "G", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.14 - (20.14 * 0.2 * 0.01), ecl_sum_get_group_var( resp, 2, "G", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( -10.15 - (20.15 * 0.2 * 0.01), ecl_sum_get_group_var( resp, 2, "G", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G", "GGPI" ), 1e-5 );
/* WEFAC 0.3 assigned to W_3.
* W_3 assigned to group G3. GEFAC G_3 = 0.02
* G_3 assigned to group G4. GEFAC G_4 = 0.03*/
@ -1612,6 +1673,54 @@ BOOST_AUTO_TEST_CASE(efficiency_factor) {
BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03, ecl_sum_get_well_var( resp, 1, "W_3", "WOIT" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03 + 30.1 * 0.3 * 0.02 * 0.04, ecl_sum_get_well_var( resp, 2, "W_3", "WOIT" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.13 * 0.3, ecl_sum_get_group_var( resp, 1, "G_3", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.14 * 0.3, ecl_sum_get_group_var( resp, 1, "G_3", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.15 * 0.3, ecl_sum_get_group_var( resp, 1, "G_3", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G_3", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G_3", "GGPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.13 * 0.3 * 0.02, ecl_sum_get_group_var( resp, 1, "G_4", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.14 * 0.3 * 0.02, ecl_sum_get_group_var( resp, 1, "G_4", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.15 * 0.3 * 0.02, ecl_sum_get_group_var( resp, 1, "G_4", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G_4", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 1, "G_4", "GGPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.13 * 0.3, ecl_sum_get_group_var( resp, 2, "G_3", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.14 * 0.3, ecl_sum_get_group_var( resp, 2, "G_3", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.15 * 0.3, ecl_sum_get_group_var( resp, 2, "G_3", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G_3", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G_3", "GGPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.13 * 0.3 * 0.02, ecl_sum_get_group_var( resp, 2, "G_4", "GWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.14 * 0.3 * 0.02, ecl_sum_get_group_var( resp, 2, "G_4", "GOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 30.15 * 0.3 * 0.02, ecl_sum_get_group_var( resp, 2, "G_4", "GGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G_4", "GWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_group_var( resp, 2, "G_4", "GGPI" ), 1e-5 );
BOOST_CHECK_CLOSE( - 10.13
- (20.13 * 0.2 * 0.01)
+ (30.13 * 0.3 * 0.02)*0.03, ecl_sum_get_field_var( resp, 1, "FWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( - 10.14
- (20.14 * 0.2 * 0.01)
+ (30.14 * 0.3 * 0.02)*0.03, ecl_sum_get_field_var( resp, 1, "FOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( - 10.15
- (20.15 * 0.2 * 0.01)
+ (30.15 * 0.3 * 0.02)*0.03, ecl_sum_get_field_var( resp, 1, "FGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_field_var( resp, 1, "FWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_field_var( resp, 1, "FGPI" ), 1e-5 );
BOOST_CHECK_CLOSE( - 10.13
- (20.13 * 0.2 * 0.01)
+ (30.13 * 0.3 * 0.02)*0.04, ecl_sum_get_field_var( resp, 2, "FWPP" ), 1e-5 );
BOOST_CHECK_CLOSE( - 10.14
- (20.14 * 0.2 * 0.01)
+ (30.14 * 0.3 * 0.02)*0.04, ecl_sum_get_field_var( resp, 2, "FOPP" ), 1e-5 );
BOOST_CHECK_CLOSE( - 10.15
- (20.15 * 0.2 * 0.01)
+ (30.15 * 0.3 * 0.02)*0.04, ecl_sum_get_field_var( resp, 2, "FGPP" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_field_var( resp, 2, "FWPI" ), 1e-5 );
BOOST_CHECK_CLOSE( 0.0 , ecl_sum_get_field_var( resp, 2, "FGPI" ), 1e-5 );
/* WEFAC 0.2 assigned to W_2.
* W_2 assigned to group G2. GEFAC G2 = 0.01 */
BOOST_CHECK_CLOSE( 20.1 * 0.2, ecl_sum_get_group_var( resp, 1, "G_2", "GOPR" ), 1e-5 );