Load injection guide rates from restart file

This commit is contained in:
Joakim Hove
2021-12-08 13:47:32 +01:00
parent 6d5ea77bf5
commit 9c54e324e9
3 changed files with 30 additions and 1 deletions

View File

@@ -46,6 +46,8 @@ struct RstGroup {
int ginj_cmode;
int prod_guide_rate_def;
int exceed_action;
int inj_water_guide_rate_def;
int inj_gas_guide_rate_def;
float oil_rate_limit;
float water_rate_limit;
@@ -62,6 +64,8 @@ struct RstGroup {
float glift_max_supply;
float glift_max_rate;
float efficiency_factor;
float inj_water_guide_rate;
float inj_gas_guide_rate;
double oil_production_rate;
double water_production_rate;

View File

@@ -54,6 +54,8 @@ RstGroup::RstGroup(const ::Opm::UnitSystem& unit_system,
ginj_cmode(igrp[header.nwgmax + VI::IGroup::GConInjeGInjCMode]),
prod_guide_rate_def(igrp[header.nwgmax + VI::IGroup::GuideRateDef]),
exceed_action(igrp[header.nwgmax + VI::IGroup::ExceedAction]),
inj_water_guide_rate_def(igrp[header.nwgmax + VI::IGroup::GConInjeWaterGuideRateMode]),
inj_gas_guide_rate_def(igrp[header.nwgmax + VI::IGroup::GConInjeGasGuideRateMode]),
// The values oil_rate_limit -> gas_voidage_limit will be used in UDA
// values. The UDA values are responsible for unit conversion and raw values
// are internalized here.
@@ -72,6 +74,8 @@ RstGroup::RstGroup(const ::Opm::UnitSystem& unit_system,
glift_max_supply( unit_system.to_si(M::gas_surface_rate, sgrp[VI::SGroup::GLOMaxSupply])),
glift_max_rate( unit_system.to_si(M::gas_surface_rate, sgrp[VI::SGroup::GLOMaxRate])),
efficiency_factor( unit_system.to_si(M::identity, sgrp[VI::SGroup::EfficiencyFactor])),
inj_water_guide_rate( sgrp_value(sgrp[VI::SGroup::waterGuideRate])),
inj_gas_guide_rate( sgrp_value(sgrp[VI::SGroup::gasGuideRate])),
oil_production_rate( unit_system.to_si(M::liquid_surface_rate, xgrp[VI::XGroup::OilPrRate])),
water_production_rate( unit_system.to_si(M::liquid_surface_rate, xgrp[VI::XGroup::WatPrRate])),
gas_production_rate( unit_system.to_si(M::gas_surface_rate, xgrp[VI::XGroup::GasPrRate])),

View File

@@ -128,7 +128,7 @@ namespace {
production.liquid_target.update(rst_group.liquid_rate_limit);
production.cmode = Opm::Group::ProductionCModeFromInt(rst_group.prod_cmode);
production.exceed_action = Opm::Group::ExceedActionFromInt(rst_group.exceed_action);
production.guide_rate_def = Group::GuideRateProdTargetFromInt(rst_group.prod_guide_rate_def);
production.guide_rate_def = Opm::Group::GuideRateProdTargetFromInt(rst_group.prod_guide_rate_def);
if ((production.cmode == Opm::Group::ProductionCMode::ORAT) ||
(production.cmode == Opm::Group::ProductionCMode::WRAT) ||
@@ -167,6 +167,8 @@ namespace {
injection.target_void_fraction.update(rst_group.gas_voidage_limit);
injection.phase = Opm::Phase::GAS;
injection.cmode = Opm::Group::InjectionCModeFromInt(rst_group.ginj_cmode);
injection.guide_rate_def = Opm::Group::GuideRateInjTargetFromInt(rst_group.inj_gas_guide_rate_def);
injection.guide_rate = rst_group.inj_gas_guide_rate;
assign_injection_controls(active, injection);
@@ -185,6 +187,8 @@ namespace {
injection.target_void_fraction.update(rst_group.water_voidage_limit);
injection.phase = Opm::Phase::WATER;
injection.cmode = Opm::Group::InjectionCModeFromInt(rst_group.winj_cmode);
injection.guide_rate_def = Opm::Group::GuideRateInjTargetFromInt(rst_group.inj_water_guide_rate_def);
injection.guide_rate = rst_group.inj_water_guide_rate;
assign_injection_controls(active, injection);
@@ -1134,6 +1138,23 @@ int Group::GuideRateInjTargetToInt(GuideRateInjTarget target) {
}
}
Group::GuideRateInjTarget Group::GuideRateInjTargetFromInt(int ecl_id) {
switch (ecl_id) {
case 1:
return GuideRateInjTarget::RATE;
case 2:
return GuideRateInjTarget::RESV;
case 3:
return GuideRateInjTarget::VOID;
case 4:
return GuideRateInjTarget::NETV;
default:
return GuideRateInjTarget::NO_GUIDE_RATE;
}
}
Group::GuideRateProdTarget Group::GuideRateProdTargetFromString( const std::string& stringValue ) {
if (stringValue == "OIL")