Summary: Production is negative injection.
Represent simulator-provided data as production = negative injection, and write rates accordingly. Tests updated.
This commit is contained in:
parent
fe3bf63bd2
commit
6cfb52ae69
@ -381,16 +381,16 @@ inline double well_keywords( E keyword,
|
||||
switch( keyword ) {
|
||||
|
||||
/* Production rates */
|
||||
case E::WWPR: return rate( rt::wat );
|
||||
case E::WOPR: return rate( rt::oil );
|
||||
case E::WGPR: return rate( rt::gas );
|
||||
case E::WLPR: return rate( rt::wat ) + rate( rt::oil );
|
||||
case E::WWPR: return - rate( rt::wat );
|
||||
case E::WOPR: return - rate( rt::oil );
|
||||
case E::WGPR: return - rate( rt::gas );
|
||||
case E::WLPR: return - ( rate( rt::wat ) + rate( rt::oil ) );
|
||||
|
||||
/* Production totals */
|
||||
case E::WWPT: return accu + vol( rt::wat );
|
||||
case E::WOPT: return accu + vol( rt::oil );
|
||||
case E::WGPT: return accu + vol( rt::gas );
|
||||
case E::WLPT: return accu + vol( rt::wat ) + vol( rt::oil );
|
||||
case E::WWPT: return accu - vol( rt::wat );
|
||||
case E::WOPT: return accu - vol( rt::oil );
|
||||
case E::WGPT: return accu - vol( rt::gas );
|
||||
case E::WLPT: return accu - ( vol( rt::wat ) + vol( rt::oil ) );
|
||||
|
||||
/* Production history rates */
|
||||
case E::WWPRH: return histprate( WT::wat );
|
||||
@ -426,12 +426,12 @@ inline double well_keywords( E keyword,
|
||||
/* Injection rates */
|
||||
/* TODO: read from sim or compute (how?) */
|
||||
/* TODO: Tests */
|
||||
case E::WWIR: return - rate( rt::wat );
|
||||
case E::WOIR: return - rate( rt::oil );
|
||||
case E::WGIR: return - rate( rt::gas );
|
||||
case E::WWIT: return accu - vol( rt::wat );
|
||||
case E::WOIT: return accu - vol( rt::oil );
|
||||
case E::WGIT: return accu - vol( rt::gas );
|
||||
case E::WWIR: return rate( rt::wat );
|
||||
case E::WOIR: return rate( rt::oil );
|
||||
case E::WGIR: return rate( rt::gas );
|
||||
case E::WWIT: return accu + vol( rt::wat );
|
||||
case E::WOIT: return accu + vol( rt::oil );
|
||||
case E::WGIT: return accu + vol( rt::gas );
|
||||
|
||||
case E::WWIRH: return histirate( WellInjector::WATER );
|
||||
case E::WOIRH: return histirate( WellInjector::OIL );
|
||||
@ -548,21 +548,21 @@ inline double group_keywords( E keyword,
|
||||
|
||||
switch( keyword ) {
|
||||
/* Production rates */
|
||||
case E::GWPR: return rate( rt::wat );
|
||||
case E::GOPR: return rate( rt::oil );
|
||||
case E::GGPR: return rate( rt::gas );
|
||||
case E::GLPR: return rate( rt::wat ) + rate( rt::oil );
|
||||
case E::GWPR: return - rate( rt::wat );
|
||||
case E::GOPR: return - rate( rt::oil );
|
||||
case E::GGPR: return - rate( rt::gas );
|
||||
case E::GLPR: return (- rate( rt::wat )) + (- rate( rt::oil ));
|
||||
|
||||
/* Production totals */
|
||||
case E::GWPT: return accu + vol( rt::wat );
|
||||
case E::GOPT: return accu + vol( rt::oil );
|
||||
case E::GGPT: return accu + vol( rt::gas );
|
||||
case E::GWPT: return accu - vol( rt::wat );
|
||||
case E::GOPT: return accu - vol( rt::oil );
|
||||
case E::GGPT: return accu - vol( rt::gas );
|
||||
|
||||
/* Injection rates */
|
||||
case E::GWIR: return - rate( rt::wat );
|
||||
case E::GGIR: return - rate( rt::gas );
|
||||
case E::GWIT: return accu - vol( rt::wat );
|
||||
case E::GGIT: return accu - vol( rt::gas );
|
||||
case E::GWIR: return rate( rt::wat );
|
||||
case E::GGIR: return rate( rt::gas );
|
||||
case E::GWIT: return accu + vol( rt::wat );
|
||||
case E::GGIT: return accu + vol( rt::gas );
|
||||
|
||||
/* Production ratios */
|
||||
case E::GWCT: return wct( rate( rt::wat ), rate( rt::oil ) );
|
||||
|
@ -68,14 +68,14 @@ static data::Wells result_wells() {
|
||||
const double ps = 100000;
|
||||
|
||||
data::Rates rates1;
|
||||
rates1.set( rt::wat, 10.0 / day );
|
||||
rates1.set( rt::oil, 10.1 / day );
|
||||
rates1.set( rt::gas, 10.2 / day );
|
||||
rates1.set( rt::wat, -10.0 / day );
|
||||
rates1.set( rt::oil, -10.1 / day );
|
||||
rates1.set( rt::gas, -10.2 / day );
|
||||
|
||||
data::Rates rates2;
|
||||
rates2.set( rt::wat, 20.0 / day );
|
||||
rates2.set( rt::oil, 20.1 / day );
|
||||
rates2.set( rt::gas, 20.2 / day );
|
||||
rates2.set( rt::wat, -20.0 / day );
|
||||
rates2.set( rt::oil, -20.1 / day );
|
||||
rates2.set( rt::gas, -20.2 / day );
|
||||
|
||||
data::Rates rates3;
|
||||
rates3.set( rt::wat, 30.0 / day );
|
||||
@ -131,15 +131,15 @@ BOOST_AUTO_TEST_CASE(W_WOG_PR) {
|
||||
const auto* resp = res.get();
|
||||
BOOST_CHECK_CLOSE( 10.0, ecl_sum_get_well_var( resp, 0, "W_1", "WWPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 20.0, ecl_sum_get_well_var( resp, 0, "W_2", "WWPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.0, ecl_sum_get_well_var( resp, 0, "W_3", "WWPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.0, ecl_sum_get_well_var( resp, 0, "W_3", "WWPR" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 10.1, ecl_sum_get_well_var( resp, 0, "W_1", "WOPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 20.1, ecl_sum_get_well_var( resp, 0, "W_2", "WOPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.1, ecl_sum_get_well_var( resp, 0, "W_3", "WOPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.1, ecl_sum_get_well_var( resp, 0, "W_3", "WOPR" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 10.2, ecl_sum_get_well_var( resp, 0, "W_1", "WGPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 20.2, ecl_sum_get_well_var( resp, 0, "W_2", "WGPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.2, ecl_sum_get_well_var( resp, 0, "W_3", "WGPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.2, ecl_sum_get_well_var( resp, 0, "W_3", "WGPR" ), 1e-5 );
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(W_WOG_PT) {
|
||||
@ -154,27 +154,27 @@ BOOST_AUTO_TEST_CASE(W_WOG_PT) {
|
||||
const auto* resp = res.get();
|
||||
BOOST_CHECK_CLOSE( 10.0 / day, ecl_sum_get_well_var( resp, 0, "W_1", "WWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 20.0 / day, ecl_sum_get_well_var( resp, 0, "W_2", "WWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.0 / day, ecl_sum_get_well_var( resp, 0, "W_3", "WWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.0 / day, ecl_sum_get_well_var( resp, 0, "W_3", "WWPT" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 10.1 / day, ecl_sum_get_well_var( resp, 0, "W_1", "WOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 20.1 / day, ecl_sum_get_well_var( resp, 0, "W_2", "WOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.1 / day, ecl_sum_get_well_var( resp, 0, "W_3", "WOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.1 / day, ecl_sum_get_well_var( resp, 0, "W_3", "WOPT" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 10.2 / day, ecl_sum_get_well_var( resp, 0, "W_1", "WGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 20.2 / day, ecl_sum_get_well_var( resp, 0, "W_2", "WGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.2 / day, ecl_sum_get_well_var( resp, 0, "W_3", "WGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.2 / day, ecl_sum_get_well_var( resp, 0, "W_3", "WGPT" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 2 * 10.0 / day, ecl_sum_get_well_var( resp, 1, "W_1", "WWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * 20.0 / day, ecl_sum_get_well_var( resp, 1, "W_2", "WWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * 30.0 / day, ecl_sum_get_well_var( resp, 1, "W_3", "WWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -2 * 30.0 / day, ecl_sum_get_well_var( resp, 1, "W_3", "WWPT" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 2 * 10.1 / day, ecl_sum_get_well_var( resp, 1, "W_1", "WOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * 20.1 / day, ecl_sum_get_well_var( resp, 1, "W_2", "WOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * 30.1 / day, ecl_sum_get_well_var( resp, 1, "W_3", "WOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -2 * 30.1 / day, ecl_sum_get_well_var( resp, 1, "W_3", "WOPT" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 2 * 10.2 / day, ecl_sum_get_well_var( resp, 1, "W_1", "WGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * 20.2 / day, ecl_sum_get_well_var( resp, 1, "W_2", "WGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * 30.2 / day, ecl_sum_get_well_var( resp, 1, "W_3", "WGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -2 * 30.2 / day, ecl_sum_get_well_var( resp, 1, "W_3", "WGPT" ), 1e-5 );
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(WWCT) {
|
||||
@ -294,10 +294,10 @@ BOOST_AUTO_TEST_CASE(WLP_R_T) {
|
||||
BOOST_CHECK_CLOSE( 20.0 + 20.1, ecl_sum_get_well_var( resp, 1, "W_2", "WLPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * (20.0 + 20.1) / day, ecl_sum_get_well_var( resp, 1, "W_2", "WLPT" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 30.0 + 30.1, ecl_sum_get_well_var( resp, 0, "W_3", "WLPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( (30.0 + 30.1) / day, ecl_sum_get_well_var( resp, 0, "W_3", "WLPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( (30.0 + 30.1), ecl_sum_get_well_var( resp, 1, "W_3", "WLPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * (30.0 + 30.1) / day, ecl_sum_get_well_var( resp, 1, "W_3", "WLPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( - (30.0 + 30.1), ecl_sum_get_well_var( resp, 0, "W_3", "WLPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( - (30.0 + 30.1) / day, ecl_sum_get_well_var( resp, 0, "W_3", "WLPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( - (30.0 + 30.1), ecl_sum_get_well_var( resp, 1, "W_3", "WLPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( - 2 * (30.0 + 30.1) / day, ecl_sum_get_well_var( resp, 1, "W_3", "WLPT" ), 1e-5 );
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(W_WOG_PRH) {
|
||||
@ -382,13 +382,13 @@ BOOST_AUTO_TEST_CASE(G_WOG_PR) {
|
||||
const auto* resp = res.get();
|
||||
|
||||
BOOST_CHECK_CLOSE( 10.0 + 20.0, ecl_sum_get_group_var( resp, 0, "G_1", "GWPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.0, ecl_sum_get_group_var( resp, 0, "G_2", "GWPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.0, ecl_sum_get_group_var( resp, 0, "G_2", "GWPR" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 10.1 + 20.1, ecl_sum_get_group_var( resp, 0, "G_1", "GOPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.1, ecl_sum_get_group_var( resp, 0, "G_2", "GOPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.1, ecl_sum_get_group_var( resp, 0, "G_2", "GOPR" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 10.2 + 20.2, ecl_sum_get_group_var( resp, 0, "G_1", "GGPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.2, ecl_sum_get_group_var( resp, 0, "G_2", "GGPR" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.2, ecl_sum_get_group_var( resp, 0, "G_2", "GGPR" ), 1e-5 );
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(G_WOG_PT) {
|
||||
@ -403,18 +403,18 @@ BOOST_AUTO_TEST_CASE(G_WOG_PT) {
|
||||
const auto* resp = res.get();
|
||||
|
||||
BOOST_CHECK_CLOSE( (10.0 + 20.0) / day, ecl_sum_get_group_var( resp, 0, "G_1", "GWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.0 / day, ecl_sum_get_group_var( resp, 0, "G_2", "GWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.0 / day, ecl_sum_get_group_var( resp, 0, "G_2", "GWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( (10.1 + 20.1) / day, ecl_sum_get_group_var( resp, 0, "G_1", "GOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.1 / day, ecl_sum_get_group_var( resp, 0, "G_2", "GOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.1 / day, ecl_sum_get_group_var( resp, 0, "G_2", "GOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( (10.2 + 20.2) / day, ecl_sum_get_group_var( resp, 0, "G_1", "GGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 30.2 / day, ecl_sum_get_group_var( resp, 0, "G_2", "GGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -30.2 / day, ecl_sum_get_group_var( resp, 0, "G_2", "GGPT" ), 1e-5 );
|
||||
|
||||
BOOST_CHECK_CLOSE( 2 * (10.0 + 20.0) / day, ecl_sum_get_group_var( resp, 1, "G_1", "GWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * 30.0 / day, ecl_sum_get_group_var( resp, 1, "G_2", "GWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * (10.1 + 20.1) / day, ecl_sum_get_group_var( resp, 1, "G_1", "GOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * 30.1 / day, ecl_sum_get_group_var( resp, 1, "G_2", "GOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * (10.2 + 20.2) / day, ecl_sum_get_group_var( resp, 1, "G_1", "GGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * 30.2 / day, ecl_sum_get_group_var( resp, 1, "G_2", "GGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * (10.0 + 20.0) / day, ecl_sum_get_group_var( resp, 1, "G_1", "GWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -2 * 30.0 / day, ecl_sum_get_group_var( resp, 1, "G_2", "GWPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * (10.1 + 20.1) / day, ecl_sum_get_group_var( resp, 1, "G_1", "GOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -2 * 30.1 / day, ecl_sum_get_group_var( resp, 1, "G_2", "GOPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 2 * (10.2 + 20.2) / day, ecl_sum_get_group_var( resp, 1, "G_1", "GGPT" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( -2 * 30.2 / day, ecl_sum_get_group_var( resp, 1, "G_2", "GGPT" ), 1e-5 );
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(G_WOG_PRH) {
|
||||
|
Loading…
Reference in New Issue
Block a user