From 9c54e324e99503f691bf3cd0271ce98d3aebf994 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Wed, 8 Dec 2021 13:47:32 +0100 Subject: [PATCH] Load injection guide rates from restart file --- opm/io/eclipse/rst/group.hpp | 4 ++++ src/opm/io/eclipse/rst/group.cpp | 4 ++++ .../EclipseState/Schedule/Group/Group.cpp | 23 ++++++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/opm/io/eclipse/rst/group.hpp b/opm/io/eclipse/rst/group.hpp index db4e7e39d..1770c089a 100644 --- a/opm/io/eclipse/rst/group.hpp +++ b/opm/io/eclipse/rst/group.hpp @@ -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; diff --git a/src/opm/io/eclipse/rst/group.cpp b/src/opm/io/eclipse/rst/group.cpp index f96bffd6a..1dee7246e 100644 --- a/src/opm/io/eclipse/rst/group.cpp +++ b/src/opm/io/eclipse/rst/group.cpp @@ -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])), diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp index eb523b18a..ec5c7933e 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp @@ -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")