Add output of well phase potential
This commit is contained in:
parent
089b58f101
commit
5d3125c532
@ -61,6 +61,9 @@ namespace Opm {
|
||||
productivity_index_water = (1 << 11),
|
||||
productivity_index_oil = (1 << 12),
|
||||
productivity_index_gas = (1 << 13),
|
||||
well_potential_water = (1 << 14),
|
||||
well_potential_oil = (1 << 15),
|
||||
well_potential_gas = (1 << 16),
|
||||
};
|
||||
|
||||
using enum_size = std::underlying_type< opt >::type;
|
||||
@ -107,6 +110,9 @@ namespace Opm {
|
||||
double productivity_index_water = 0.0;
|
||||
double productivity_index_oil = 0.0;
|
||||
double productivity_index_gas = 0.0;
|
||||
double well_potential_water = 0.0;
|
||||
double well_potential_oil = 0.0;
|
||||
double well_potential_gas = 0.0;
|
||||
};
|
||||
|
||||
struct Connection {
|
||||
@ -272,6 +278,9 @@ namespace Opm {
|
||||
case opt::productivity_index_water: return this->productivity_index_water;
|
||||
case opt::productivity_index_oil: return this->productivity_index_oil;
|
||||
case opt::productivity_index_gas: return this->productivity_index_gas;
|
||||
case opt::well_potential_water: return this->well_potential_water;
|
||||
case opt::well_potential_oil: return this->well_potential_oil;
|
||||
case opt::well_potential_gas: return this->well_potential_gas;
|
||||
}
|
||||
|
||||
throw std::invalid_argument(
|
||||
@ -312,6 +321,9 @@ namespace Opm {
|
||||
buffer.write(this->productivity_index_water);
|
||||
buffer.write(this->productivity_index_oil);
|
||||
buffer.write(this->productivity_index_gas);
|
||||
buffer.write(this->well_potential_water);
|
||||
buffer.write(this->well_potential_oil);
|
||||
buffer.write(this->well_potential_gas);
|
||||
}
|
||||
|
||||
template <class MessageBufferType>
|
||||
@ -373,6 +385,9 @@ namespace Opm {
|
||||
buffer.read(this->productivity_index_water);
|
||||
buffer.read(this->productivity_index_oil);
|
||||
buffer.read(this->productivity_index_gas);
|
||||
buffer.read(this->well_potential_water);
|
||||
buffer.read(this->well_potential_oil);
|
||||
buffer.read(this->well_potential_gas);
|
||||
}
|
||||
|
||||
template <class MessageBufferType>
|
||||
|
@ -349,6 +349,15 @@ measure rate_unit < rt::productivity_index_oil > () { return measure::liquid_pro
|
||||
template<> constexpr
|
||||
measure rate_unit < rt::productivity_index_gas > () { return measure::gas_productivity_index; }
|
||||
|
||||
template<> constexpr
|
||||
measure rate_unit< rt::well_potential_water >() { return measure::liquid_surface_rate; }
|
||||
|
||||
template<> constexpr
|
||||
measure rate_unit< rt::well_potential_oil >() { return measure::liquid_surface_rate; }
|
||||
|
||||
template<> constexpr
|
||||
measure rate_unit< rt::well_potential_gas >() { return measure::gas_surface_rate; }
|
||||
|
||||
double efac( const std::vector<std::pair<std::string,double>>& eff_factors, const std::string& name ) {
|
||||
auto it = std::find_if( eff_factors.begin(), eff_factors.end(),
|
||||
[&] ( const std::pair< std::string, double > elem )
|
||||
@ -662,16 +671,21 @@ quantity region_rate( const fn_args& args ) {
|
||||
return { -sum, rate_unit< phase >() };
|
||||
}
|
||||
|
||||
template < rt phase>
|
||||
quantity pi (const fn_args& args ) {
|
||||
template < rt phase, bool outputProducer = true, bool outputInjector = true>
|
||||
quantity generic_well_rate (const fn_args& args ) {
|
||||
const quantity zero = { 0, rate_unit< phase >() };
|
||||
if( args.schedule_wells.empty() ) return zero;
|
||||
|
||||
const auto p = args.wells.find( args.schedule_wells.front()->name() );
|
||||
if( p == args.wells.end() ) return zero;
|
||||
std::cout << p->second.rates.get(phase) << std::endl;
|
||||
|
||||
if (args.schedule_wells.front()->isInjector(args.sim_step) && !outputInjector) return zero;
|
||||
|
||||
if (args.schedule_wells.front()->isProducer(args.sim_step) && !outputProducer) return zero;
|
||||
|
||||
return { p->second.rates.get(phase), rate_unit< phase >() };
|
||||
}
|
||||
|
||||
template< typename F, typename G >
|
||||
auto mul( F f, G g ) -> bin_op< F, G, std::multiplies< quantity > >
|
||||
{ return { f, g }; }
|
||||
@ -982,11 +996,18 @@ static const std::unordered_map< std::string, ofun > funs = {
|
||||
{ "SWFR", srate< rt::wat > },
|
||||
{ "SGFR", srate< rt::gas > },
|
||||
{ "SPR", spr },
|
||||
// Well PI
|
||||
{ "WPIW", pi< rt::productivity_index_water >},
|
||||
{ "WPIO", pi< rt::productivity_index_oil >},
|
||||
{ "WPIG", pi< rt::productivity_index_gas >},
|
||||
{ "WPIL", sum( pi< rt::productivity_index_water >, pi< rt::productivity_index_oil>)},
|
||||
// Well productivity index
|
||||
{ "WPIW", generic_well_rate< rt::productivity_index_water >},
|
||||
{ "WPIO", generic_well_rate< rt::productivity_index_oil >},
|
||||
{ "WPIG", generic_well_rate< rt::productivity_index_gas >},
|
||||
{ "WPIL", sum( generic_well_rate< rt::productivity_index_water >, generic_well_rate< rt::productivity_index_oil>)},
|
||||
// Well potential
|
||||
{ "WWPP", generic_well_rate< rt::well_potential_water , true, false>},
|
||||
{ "WOPP", generic_well_rate< rt::well_potential_oil , true, false>},
|
||||
{ "WGPP", generic_well_rate< rt::well_potential_gas , true, false>},
|
||||
{ "WWPI", generic_well_rate< rt::well_potential_water , false, true>},
|
||||
{ "WOPI", generic_well_rate< rt::well_potential_oil , false, true>},
|
||||
{ "WGPI", generic_well_rate< rt::well_potential_gas , false, true>},
|
||||
};
|
||||
|
||||
|
||||
|
@ -100,6 +100,12 @@ static data::Wells result_wells() {
|
||||
rates1.set( rt::reservoir_water, -10.6 / day );
|
||||
rates1.set( rt::reservoir_oil, -10.7 / day );
|
||||
rates1.set( rt::reservoir_gas, -10.8 / day );
|
||||
rates1.set( rt::productivity_index_water, -10.9 / day );
|
||||
rates1.set( rt::productivity_index_oil, -10.11 / day );
|
||||
rates1.set( rt::productivity_index_gas, -10.12 / day );
|
||||
rates1.set( rt::well_potential_water, -10.13 / day );
|
||||
rates1.set( rt::well_potential_oil, -10.14 / day );
|
||||
rates1.set( rt::well_potential_gas, -10.15 / day );
|
||||
|
||||
data::Rates rates2;
|
||||
rates2.set( rt::wat, -20.0 / day );
|
||||
@ -111,6 +117,12 @@ static data::Wells result_wells() {
|
||||
rates2.set( rt::reservoir_water, -20.6 / day );
|
||||
rates2.set( rt::reservoir_oil, -20.7 / day );
|
||||
rates2.set( rt::reservoir_gas, -20.8 / day );
|
||||
rates2.set( rt::productivity_index_water, -20.9 / day );
|
||||
rates2.set( rt::productivity_index_oil, -20.11 / day );
|
||||
rates2.set( rt::productivity_index_gas, -20.12 / day );
|
||||
rates2.set( rt::well_potential_water, -20.13 / day );
|
||||
rates2.set( rt::well_potential_oil, -20.14 / day );
|
||||
rates2.set( rt::well_potential_gas, -20.15 / day );
|
||||
|
||||
data::Rates rates3;
|
||||
rates3.set( rt::wat, 30.0 / day );
|
||||
@ -122,6 +134,12 @@ static data::Wells result_wells() {
|
||||
rates3.set( rt::reservoir_water, 30.6 / day );
|
||||
rates3.set( rt::reservoir_oil, 30.7 / day );
|
||||
rates3.set( rt::reservoir_gas, 30.8 / day );
|
||||
rates3.set( rt::productivity_index_water, -30.9 / day );
|
||||
rates3.set( rt::productivity_index_oil, -30.11 / day );
|
||||
rates3.set( rt::productivity_index_gas, -30.12 / day );
|
||||
rates3.set( rt::well_potential_water, -30.13 / day );
|
||||
rates3.set( rt::well_potential_oil, -30.14 / day );
|
||||
rates3.set( rt::well_potential_gas, -30.15 / day );
|
||||
|
||||
|
||||
/* completion rates */
|
||||
|
Loading…
Reference in New Issue
Block a user