mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #3299 from akva2/gasliftstage2_break_circular
GasLiftStage2: drop circular dependency for BlackoilWellModel
This commit is contained in:
commit
66443c63fb
@ -108,9 +108,8 @@ namespace Opm {
|
||||
typedef typename BaseAuxiliaryModule<TypeTag>::NeighborSet NeighborSet;
|
||||
using GasLiftSingleWell = ::Opm::GasLiftSingleWell<TypeTag>;
|
||||
using GasLiftStage2 = ::Opm::GasLiftStage2<TypeTag>;
|
||||
using GLiftWellState = GasLiftWellState;
|
||||
using GLiftWellStateMap =
|
||||
std::map<std::string,std::unique_ptr<GLiftWellState>>;
|
||||
std::map<std::string,std::unique_ptr<GasLiftWellState>>;
|
||||
using GLiftOptWells =
|
||||
std::map<std::string,std::unique_ptr<GasLiftSingleWell>>;
|
||||
using GLiftProdWells =
|
||||
|
@ -1108,7 +1108,7 @@ namespace Opm {
|
||||
GLiftWellStateMap &glift_well_state_map)
|
||||
{
|
||||
|
||||
GasLiftStage2 glift {*this, ebosSimulator_, deferred_logger, this->wellState(),
|
||||
GasLiftStage2 glift {this->phaseUsage(), ebosSimulator_, deferred_logger, this->wellState(),
|
||||
prod_wells, glift_wells, glift_well_state_map};
|
||||
glift.runOptimize();
|
||||
}
|
||||
|
@ -34,12 +34,6 @@
|
||||
#include <opm/simulators/wells/GasLiftWellState.hpp>
|
||||
#include <opm/simulators/utils/DeferredLogger.hpp>
|
||||
#include <opm/simulators/wells/WellState.hpp>
|
||||
// NOTE: BlackoilWellModel.hpp includes ourself (GasLiftStage2.hpp), so we need
|
||||
// to forward declare BlackoilWellModel for it to be defined in this file.
|
||||
namespace Opm {
|
||||
template<typename TypeTag> class BlackoilWellModel;
|
||||
}
|
||||
#include <opm/simulators/wells/BlackoilWellModel.hpp>
|
||||
|
||||
#include <cassert>
|
||||
#include <functional>
|
||||
@ -58,12 +52,10 @@ namespace Opm
|
||||
template<class TypeTag>
|
||||
class GasLiftStage2 {
|
||||
using Simulator = GetPropType<TypeTag, Properties::Simulator>;
|
||||
using BlackoilWellModel = ::Opm::BlackoilWellModel<TypeTag>;
|
||||
using GasLiftSingleWell = ::Opm::GasLiftSingleWell<TypeTag>;
|
||||
using GLiftWellState = GasLiftWellState;
|
||||
using GLiftOptWells = typename BlackoilWellModel::GLiftOptWells;
|
||||
using GLiftProdWells = typename BlackoilWellModel::GLiftProdWells;
|
||||
using GLiftWellStateMap = typename BlackoilWellModel::GLiftWellStateMap;
|
||||
using GLiftOptWells = std::map<std::string,std::unique_ptr<GasLiftSingleWell>>;
|
||||
using GLiftProdWells = std::map<std::string,const WellInterface<TypeTag> *>;
|
||||
using GLiftWellStateMap = std::map<std::string,std::unique_ptr<GasLiftWellState>>;
|
||||
using GradPair = std::pair<std::string, double>;
|
||||
using GradPairItr = std::vector<GradPair>::iterator;
|
||||
using GradInfo = typename GasLiftSingleWell::GradInfo;
|
||||
@ -79,7 +71,7 @@ namespace Opm
|
||||
static const int Gas = BlackoilPhases::Vapour;
|
||||
public:
|
||||
GasLiftStage2(
|
||||
const BlackoilWellModel &well_model,
|
||||
const PhaseUsage& phase_usage,
|
||||
const Simulator &ebos_simulator,
|
||||
DeferredLogger &deferred_logger,
|
||||
WellState &well_state,
|
||||
@ -93,7 +85,7 @@ namespace Opm
|
||||
GradMap &grad_map, const std::string well_name, bool add);
|
||||
std::optional<GradInfo> calcIncOrDecGrad_(
|
||||
const std::string name, const GasLiftSingleWell &gs_well, bool increase);
|
||||
bool checkRateAlreadyLimited_(GLiftWellState &state, bool increase);
|
||||
bool checkRateAlreadyLimited_(GasLiftWellState &state, bool increase);
|
||||
GradInfo deleteDecGradItem_(const std::string &name);
|
||||
GradInfo deleteIncGradItem_(const std::string &name);
|
||||
GradInfo deleteGrad_(const std::string &name, bool increase);
|
||||
@ -140,7 +132,6 @@ namespace Opm
|
||||
|
||||
DeferredLogger &deferred_logger_;
|
||||
const Simulator &ebos_simulator_;
|
||||
const BlackoilWellModel &well_model_;
|
||||
WellState &well_state_;
|
||||
GLiftProdWells &prod_wells_;
|
||||
GLiftOptWells &stage1_wells_;
|
||||
|
@ -36,7 +36,7 @@ namespace Opm {
|
||||
template<typename TypeTag>
|
||||
GasLiftStage2<TypeTag>::
|
||||
GasLiftStage2(
|
||||
const BlackoilWellModel &well_model,
|
||||
const PhaseUsage& phase_usage,
|
||||
const Simulator &ebos_simulator,
|
||||
DeferredLogger &deferred_logger,
|
||||
WellState &well_state,
|
||||
@ -46,7 +46,6 @@ GasLiftStage2(
|
||||
) :
|
||||
deferred_logger_{deferred_logger},
|
||||
ebos_simulator_{ebos_simulator},
|
||||
well_model_{well_model},
|
||||
well_state_{well_state},
|
||||
prod_wells_{prod_wells},
|
||||
stage1_wells_{glift_wells},
|
||||
@ -54,7 +53,7 @@ GasLiftStage2(
|
||||
report_step_idx_{ebos_simulator_.episodeIndex()},
|
||||
summary_state_{ebos_simulator_.vanguard().summaryState()},
|
||||
schedule_{ebos_simulator.vanguard().schedule()},
|
||||
phase_usage_{well_model_.phaseUsage()},
|
||||
phase_usage_{phase_usage},
|
||||
glo_{schedule_.glo(report_step_idx_)},
|
||||
comm_{ebos_simulator.vanguard().grid().comm()},
|
||||
debug_{false}
|
||||
@ -108,7 +107,7 @@ addOrRemoveALQincrement_(GradMap &grad_map, const std::string well_name, bool ad
|
||||
if (it == this->well_state_map_.end())
|
||||
return;
|
||||
|
||||
GLiftWellState &state = *(it->second.get());
|
||||
GasLiftWellState &state = *(it->second.get());
|
||||
const GradInfo &gi = grad_map.at(well_name);
|
||||
if (this->debug_) {
|
||||
auto new_alq = gi.alq;
|
||||
@ -135,7 +134,7 @@ calcIncOrDecGrad_(
|
||||
if(this->well_state_map_.count(well_name) == 0)
|
||||
return std::nullopt;
|
||||
|
||||
GLiftWellState &state = *(this->well_state_map_.at(well_name).get());
|
||||
GasLiftWellState &state = *(this->well_state_map_.at(well_name).get());
|
||||
if (checkRateAlreadyLimited_(state, increase)) {
|
||||
/*
|
||||
const std::string msg = fmt::format(
|
||||
@ -167,7 +166,7 @@ calcIncOrDecGrad_(
|
||||
template<typename TypeTag>
|
||||
bool
|
||||
GasLiftStage2<TypeTag>::
|
||||
checkRateAlreadyLimited_(GLiftWellState &state, bool increase)
|
||||
checkRateAlreadyLimited_(GasLiftWellState &state, bool increase)
|
||||
{
|
||||
auto current_increase = state.increase();
|
||||
bool do_check = false;
|
||||
@ -354,7 +353,7 @@ getCurrentWellRates_(const std::string &well_name, const std::string &group_name
|
||||
GasLiftSingleWell &gs_well = *(this->stage1_wells_.at(well_name).get());
|
||||
const WellInterface<TypeTag> &well = gs_well.getStdWell();
|
||||
well_ptr = &well;
|
||||
GLiftWellState &state = *(this->well_state_map_.at(well_name).get());
|
||||
GasLiftWellState &state = *(this->well_state_map_.at(well_name).get());
|
||||
std::tie(oil_rate, gas_rate) = state.getRates();
|
||||
success = true;
|
||||
if ( this->debug_) debug_info = "(A)";
|
||||
@ -1135,7 +1134,7 @@ updateRates(const std::string &well_name)
|
||||
// compute the delta on wells on own rank
|
||||
if (this->parent.well_state_map_.count(well_name) > 0) {
|
||||
const GradInfo &gi = this->parent.dec_grads_.at(well_name);
|
||||
GLiftWellState &state = *(this->parent.well_state_map_.at(well_name).get());
|
||||
GasLiftWellState &state = *(this->parent.well_state_map_.at(well_name).get());
|
||||
GasLiftSingleWell &gs_well = *(this->parent.stage1_wells_.at(well_name).get());
|
||||
const WellInterface<TypeTag> &well = gs_well.getStdWell();
|
||||
// only get deltas for wells owned by this rank
|
||||
|
Loading…
Reference in New Issue
Block a user