Implement WALQ Summary Vector
This commit is contained in:
parent
0b5694c05b
commit
2ad81c9364
@ -535,6 +535,33 @@ double efac( const std::vector<std::pair<std::string,double>>& eff_factors, cons
|
|||||||
return (it != eff_factors.end()) ? it->second : 1.0;
|
return (it != eff_factors.end()) ? it->second : 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline quantity artificial_lift_quantity( const fn_args& args ) {
|
||||||
|
// Note: This function is intentionally supported only at the well level
|
||||||
|
// (meaning there's no loop over args.schedule_wells by intention). Its
|
||||||
|
// purpose is to calculate WALQ only.
|
||||||
|
auto alq = quantity { 0.0, measure::identity };
|
||||||
|
|
||||||
|
if (args.schedule_wells.empty()) {
|
||||||
|
return alq;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto* well = args.schedule_wells.front();
|
||||||
|
if (well->isInjector()) {
|
||||||
|
return alq;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto xwPos = args.wells.find(well->name());
|
||||||
|
if ((xwPos == args.wells.end()) ||
|
||||||
|
(xwPos->second.dynamicStatus == Opm::Well::Status::SHUT))
|
||||||
|
{
|
||||||
|
return alq;
|
||||||
|
}
|
||||||
|
|
||||||
|
alq.value = well->productionControls(args.st).alq_value;
|
||||||
|
|
||||||
|
return alq;
|
||||||
|
}
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
has_alq_type(const Opm::ScheduleState& sched_state,
|
has_alq_type(const Opm::ScheduleState& sched_state,
|
||||||
const Opm::Well::ProductionControls& pc)
|
const Opm::Well::ProductionControls& pc)
|
||||||
@ -1578,6 +1605,7 @@ static const std::unordered_map< std::string, ofun > funs = {
|
|||||||
{ "WEPR", rate< rt::energy, producer > },
|
{ "WEPR", rate< rt::energy, producer > },
|
||||||
{ "WTPRHEA", rate< rt::energy, producer > },
|
{ "WTPRHEA", rate< rt::energy, producer > },
|
||||||
{ "WGLIR", glir},
|
{ "WGLIR", glir},
|
||||||
|
{ "WALQ", artificial_lift_quantity },
|
||||||
{ "WNPR", rate< rt::solvent, producer > },
|
{ "WNPR", rate< rt::solvent, producer > },
|
||||||
{ "WCPR", rate< rt::polymer, producer > },
|
{ "WCPR", rate< rt::polymer, producer > },
|
||||||
{ "WSPR", rate< rt::brine, producer > },
|
{ "WSPR", rate< rt::brine, producer > },
|
||||||
|
@ -10291,6 +10291,9 @@ WWPRH
|
|||||||
WGLIR
|
WGLIR
|
||||||
'B-*' 'C-*' /
|
'B-*' 'C-*' /
|
||||||
|
|
||||||
|
WALQ
|
||||||
|
'B-*' /
|
||||||
|
|
||||||
-- Production cumulatives
|
-- Production cumulatives
|
||||||
WOPT
|
WOPT
|
||||||
'B-*' 'C-*' /
|
'B-*' 'C-*' /
|
||||||
|
@ -1207,6 +1207,10 @@ BOOST_AUTO_TEST_CASE(GLIR_and_ALQ)
|
|||||||
|
|
||||||
BOOST_CHECK_CLOSE(1234.56 + 2345.67 + 3456.78,
|
BOOST_CHECK_CLOSE(1234.56 + 2345.67 + 3456.78,
|
||||||
ecl_sum_get_group_var(resp, 1, "B1", "GGLIR"), 1.0e-5);
|
ecl_sum_get_group_var(resp, 1, "B1", "GGLIR"), 1.0e-5);
|
||||||
|
|
||||||
|
BOOST_CHECK_CLOSE(0.0, ecl_sum_get_well_var(resp, 1, "B-1H", "WALQ"), 1.0e-5);
|
||||||
|
BOOST_CHECK_CLOSE(0.0, ecl_sum_get_well_var(resp, 1, "B-2H", "WALQ"), 1.0e-5);
|
||||||
|
BOOST_CHECK_CLOSE(0.0, ecl_sum_get_well_var(resp, 1, "B-3H", "WALQ"), 1.0e-5);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(connection_kewords) {
|
BOOST_AUTO_TEST_CASE(connection_kewords) {
|
||||||
|
Loading…
Reference in New Issue
Block a user