Add support for GVPR keyword
This commit is contained in:
parent
a55f8497b6
commit
ffb85c98bf
@ -45,14 +45,17 @@ namespace Opm {
|
||||
public:
|
||||
Rates() = default;
|
||||
enum class opt : uint32_t {
|
||||
wat = (1 << 0),
|
||||
oil = (1 << 1),
|
||||
gas = (1 << 2),
|
||||
polymer = (1 << 3),
|
||||
solvent = (1 << 4),
|
||||
energy = (1 << 5),
|
||||
dissolved_gas = (1 << 6),
|
||||
vaporized_oil = (1 << 7),
|
||||
wat = (1 << 0),
|
||||
oil = (1 << 1),
|
||||
gas = (1 << 2),
|
||||
polymer = (1 << 3),
|
||||
solvent = (1 << 4),
|
||||
energy = (1 << 5),
|
||||
dissolved_gas = (1 << 6),
|
||||
vaporized_oil = (1 << 7),
|
||||
reservoir_water = (1 << 8),
|
||||
reservoir_oil = (1 << 9),
|
||||
reservoir_gas = (1 << 10),
|
||||
};
|
||||
|
||||
using enum_size = std::underlying_type< opt >::type;
|
||||
@ -88,6 +91,9 @@ namespace Opm {
|
||||
double energy = 0.0;
|
||||
double dissolved_gas = 0.0;
|
||||
double vaporized_oil = 0.0;
|
||||
double reservoir_water = 0.0;
|
||||
double reservoir_oil = 0.0;
|
||||
double reservoir_gas = 0.0;
|
||||
};
|
||||
|
||||
struct Completion {
|
||||
@ -196,6 +202,9 @@ namespace Opm {
|
||||
case opt::energy: return this->energy;
|
||||
case opt::dissolved_gas: return this->dissolved_gas;
|
||||
case opt::vaporized_oil: return this->vaporized_oil;
|
||||
case opt::reservoir_water: return this->reservoir_water;
|
||||
case opt::reservoir_oil: return this->reservoir_oil;
|
||||
case opt::reservoir_gas: return this->reservoir_gas;
|
||||
}
|
||||
|
||||
throw std::invalid_argument(
|
||||
|
@ -94,6 +94,10 @@ measure mul_unit( measure lhs, measure rhs ) {
|
||||
( rhs == measure::gas_surface_rate && lhs == measure::time ) )
|
||||
return measure::gas_surface_volume;
|
||||
|
||||
if( ( lhs == measure::rate && rhs == measure::time ) ||
|
||||
( rhs == measure::rate && lhs == measure::time ) )
|
||||
return measure::volume;
|
||||
|
||||
return lhs;
|
||||
}
|
||||
|
||||
@ -179,6 +183,15 @@ measure rate_unit< Phase::GAS >() { return measure::gas_surface_rate; }
|
||||
template<> constexpr
|
||||
measure rate_unit< rt::solvent >() { return measure::gas_surface_rate; }
|
||||
|
||||
template<> constexpr
|
||||
measure rate_unit< rt::reservoir_water >() { return measure::rate; }
|
||||
|
||||
template<> constexpr
|
||||
measure rate_unit< rt::reservoir_oil >() { return measure::rate; }
|
||||
|
||||
template<> constexpr
|
||||
measure rate_unit< rt::reservoir_gas >() { return measure::rate; }
|
||||
|
||||
template< rt phase, bool injection = true >
|
||||
inline quantity rate( const fn_args& args ) {
|
||||
double sum = 0.0;
|
||||
@ -615,6 +628,8 @@ static const std::unordered_map< std::string, ofun > funs = {
|
||||
{ "GOPRS", rate< rt::vaporized_oil, producer > },
|
||||
{ "GOPRF", sub (rate < rt::oil, producer >, rate< rt::vaporized_oil, producer > ) },
|
||||
{ "GLPR", sum( rate< rt::wat, producer >, rate< rt::oil, producer > ) },
|
||||
{ "GVPR", sum( sum( rate< rt::reservoir_water, producer >, rate< rt::reservoir_oil, producer > ),
|
||||
rate< rt::reservoir_gas, producer > ) },
|
||||
|
||||
{ "GWPT", mul( rate< rt::wat, producer >, duration ) },
|
||||
{ "GOPT", mul( rate< rt::oil, producer >, duration ) },
|
||||
|
@ -138,6 +138,9 @@ static data::Wells result_wells() {
|
||||
rates1.set( rt::solvent, -10.3 / day );
|
||||
rates1.set( rt::dissolved_gas, -10.4 / day );
|
||||
rates1.set( rt::vaporized_oil, -10.5 / day );
|
||||
rates1.set( rt::reservoir_water, -10.6 / day );
|
||||
rates1.set( rt::reservoir_oil, -10.7 / day );
|
||||
rates1.set( rt::reservoir_gas, -10.8 / day );
|
||||
|
||||
data::Rates rates2;
|
||||
rates2.set( rt::wat, -20.0 / day );
|
||||
@ -146,6 +149,9 @@ static data::Wells result_wells() {
|
||||
rates2.set( rt::solvent, -20.3 / day );
|
||||
rates2.set( rt::dissolved_gas, -20.4 / day );
|
||||
rates2.set( rt::vaporized_oil, -20.5 / day );
|
||||
rates2.set( rt::reservoir_water, -20.6 / day );
|
||||
rates2.set( rt::reservoir_oil, -20.7 / day );
|
||||
rates2.set( rt::reservoir_gas, -20.8 / day );
|
||||
|
||||
data::Rates rates3;
|
||||
rates3.set( rt::wat, 30.0 / day );
|
||||
@ -154,6 +160,9 @@ static data::Wells result_wells() {
|
||||
rates3.set( rt::solvent, 30.3 / day );
|
||||
rates3.set( rt::dissolved_gas, 30.4 / day );
|
||||
rates3.set( rt::vaporized_oil, 30.5 / day );
|
||||
rates3.set( rt::reservoir_water, 30.6 / day );
|
||||
rates3.set( rt::reservoir_oil, 30.7 / day );
|
||||
rates3.set( rt::reservoir_gas, 30.8 / day );
|
||||
|
||||
|
||||
/* completion rates */
|
||||
@ -164,6 +173,9 @@ static data::Wells result_wells() {
|
||||
crates1.set( rt::solvent, -100.3 / day );
|
||||
crates1.set( rt::dissolved_gas, -100.4 / day );
|
||||
crates1.set( rt::vaporized_oil, -100.5 / day );
|
||||
crates1.set( rt::reservoir_water, -100.6 / day );
|
||||
crates1.set( rt::reservoir_oil, -100.7 / day );
|
||||
crates1.set( rt::reservoir_gas, -100.8 / day );
|
||||
|
||||
data::Rates crates2;
|
||||
crates2.set( rt::wat, -200.0 / day );
|
||||
@ -172,6 +184,9 @@ static data::Wells result_wells() {
|
||||
crates2.set( rt::solvent, -200.3 / day );
|
||||
crates2.set( rt::dissolved_gas, -200.4 / day );
|
||||
crates2.set( rt::vaporized_oil, -200.5 / day );
|
||||
crates2.set( rt::reservoir_water, -200.6 / day );
|
||||
crates2.set( rt::reservoir_oil, -200.7 / day );
|
||||
crates2.set( rt::reservoir_gas, -200.8 / day );
|
||||
|
||||
data::Rates crates3;
|
||||
crates3.set( rt::wat, 300.0 / day );
|
||||
@ -180,6 +195,9 @@ static data::Wells result_wells() {
|
||||
crates3.set( rt::solvent, 300.3 / day );
|
||||
crates3.set( rt::dissolved_gas, 300.4 / day );
|
||||
crates3.set( rt::vaporized_oil, 300.5 / day );
|
||||
crates2.set( rt::reservoir_water, 300.6 / day );
|
||||
crates2.set( rt::reservoir_oil, 300.7 / day );
|
||||
crates2.set( rt::reservoir_gas, 300.8 / day );
|
||||
|
||||
/*
|
||||
The active index assigned to the completion must be manually
|
||||
@ -437,6 +455,8 @@ BOOST_AUTO_TEST_CASE(group_keywords) {
|
||||
BOOST_CHECK_CLOSE( 10.5 + 20.5, ecl_sum_get_group_var( resp, 1, "G_1", "GOPRS" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE((10.1 - 10.5) + (20.1 - 20.5),
|
||||
ecl_sum_get_group_var( resp, 1, "G_1", "GOPRF" ), 1e-5 );
|
||||
BOOST_CHECK_CLOSE( 10.6 + 10.7 + 10.8 + 20.6 + 20.7 + 20.8,
|
||||
ecl_sum_get_group_var( resp, 1, "G_1", "GVPR" ), 1e-5 );
|
||||
|
||||
/* Production totals */
|
||||
BOOST_CHECK_CLOSE( 10.0 + 20.0, ecl_sum_get_group_var( resp, 1, "G_1", "GWPT" ), 1e-5 );
|
||||
|
Loading…
Reference in New Issue
Block a user