Merge pull request #2135 from joakim-hove/inplace-at
Make sure original_inplace can be safely accessed
This commit is contained in:
commit
718faaf43b
@ -759,13 +759,17 @@ inline quantity bhp( const fn_args& args ) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
quantity roew(const fn_args& args) {
|
quantity roew(const fn_args& args) {
|
||||||
double oil_prod = 0;
|
const quantity zero = { 0, measure::identity };
|
||||||
const auto& region_name = std::get<std::string>(*args.extra_data);
|
const auto& region_name = std::get<std::string>(*args.extra_data);
|
||||||
|
if (!args.initial_inplace.has( region_name, Opm::Inplace::Phase::OIL, args.num))
|
||||||
|
return zero;
|
||||||
|
|
||||||
|
double oil_prod = 0;
|
||||||
const auto& wells = args.regionCache.wells( region_name, args.num );
|
const auto& wells = args.regionCache.wells( region_name, args.num );
|
||||||
for (const auto& well : wells)
|
for (const auto& well : wells)
|
||||||
oil_prod += args.st.get_well_var(well, "WOPT");
|
oil_prod += args.st.get_well_var(well, "WOPT");
|
||||||
|
|
||||||
//oil_prod = args.unit_system.to_si(Opm::UnitSystem::measure::volume, oil_prod);
|
oil_prod = args.unit_system.to_si(Opm::UnitSystem::measure::volume, oil_prod);
|
||||||
return { oil_prod / args.initial_inplace.get( region_name, Opm::Inplace::Phase::OIL, args.num ) , measure::identity };
|
return { oil_prod / args.initial_inplace.get( region_name, Opm::Inplace::Phase::OIL, args.num ) , measure::identity };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1115,9 +1115,30 @@ inline void handleKW( SummaryConfig::keyword_list& list,
|
|||||||
|
|
||||||
|
|
||||||
inline void uniq( SummaryConfig::keyword_list& vec ) {
|
inline void uniq( SummaryConfig::keyword_list& vec ) {
|
||||||
std::sort( vec.begin(), vec.end() );
|
std::sort( vec.begin(), vec.end());
|
||||||
auto logical_end = std::unique( vec.begin(), vec.end() );
|
auto logical_end = std::unique( vec.begin(), vec.end() );
|
||||||
vec.erase( logical_end, vec.end() );
|
vec.erase( logical_end, vec.end() );
|
||||||
|
if (vec.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
/*
|
||||||
|
This is a desperate hack to ensure that the ROEW keywords come after
|
||||||
|
WOPT keywords, to ensure that the WOPT keywords have been fully
|
||||||
|
evaluated in the SummaryState when we evaluate the ROEW keywords.
|
||||||
|
*/
|
||||||
|
std::size_t tail_index = vec.size() - 1;
|
||||||
|
std::size_t item_index = 0;
|
||||||
|
while (true) {
|
||||||
|
if (item_index >= tail_index)
|
||||||
|
break;
|
||||||
|
|
||||||
|
auto& node = vec[item_index];
|
||||||
|
if (node.keyword().rfind("ROEW", 0) == 0) {
|
||||||
|
std::swap( node, vec[tail_index] );
|
||||||
|
tail_index--;
|
||||||
|
}
|
||||||
|
item_index++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user