GuideRateHandler.hpp
Go to the documentation of this file.
1/*
2 Copyright 2025 Equinor ASA
3
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#ifndef OPM_GUIDERATE_HANDLER_HPP
21#define OPM_GUIDERATE_HANDLER_HPP
22
24#include <opm/input/eclipse/Schedule/Group/GuideRate.hpp>
25#include <opm/output/data/Groups.hpp>
26#include <opm/output/data/GuideRateValue.hpp>
32namespace Opm {
33
45template<typename Scalar, typename IndexTraits>
47public:
48
49#ifdef RESERVOIR_COUPLING_ENABLED
51#endif
52
60 public:
62 GuideRateHandler<Scalar, IndexTraits> &parent, const int report_step_idx, const double sim_time
63 );
64
65 DeferredLogger &deferredLogger() { return this->parent_.deferredLogger(); }
70 private:
71 void dumpGuideRatesRecursive_(const Group& group, int level);
72 void getGroupGuideRatesInjection_(
73 const Group& group,
74 const data::GroupGuideRates& group_guide_rate,
75 std::vector<std::string>& msg_items
76 ) const;
77 void getGroupGuideRatesProduction_(
78 const Group& group,
79 const data::GroupGuideRates& group_guide_rate,
80 std::vector<std::string>& msg_items
81 ) const;
88 void printGroupGuideRates_(const Group& group, int level);
89 void printHeader_();
90 void printFooter_();
91 void printWellGuideRates_(const Well& well, int level);
92
94 const int report_step_idx_;
95 const double sim_time_;
97 const Schedule& schedule_;
98 const Parallel::Communication& comm_;
99 std::unordered_map<std::string, data::GuideRateValue> well_guide_rates_;
100 std::unordered_map<std::string, data::GroupGuideRates> group_guide_rates_;
101 };
102
111 public:
114 const int report_step_idx,
115 const double sim_time,
116 const WellState<Scalar, IndexTraits> &well_state,
117 GroupState<Scalar> &group_state,
118 const int num_phases
119 );
120
121 bool isReservoirCouplingMaster() const { return this->parent_.isReservoirCouplingMaster(); }
122 bool isReservoirCouplingSlave() const { return this->parent_.isReservoirCouplingSlave(); }
124 return this->parent_.reservoirCouplingMaster();
125 }
126 const Parallel::Communication &comm() const { return this->parent_.comm_; }
127 DeferredLogger &deferredLogger() { return this->parent_.deferredLogger(); }
128 GuideRate &guideRate() { return this->parent_.guide_rate_; }
129 const PhaseUsageInfo<IndexTraits>& phaseUsage() const { return this->parent_.phaseUsage(); }
130 const SummaryState &summaryState() const { return this->parent_.summary_state_; }
131 const Schedule &schedule() const { return this->parent_.schedule_; }
135 void update();
136
137 private:
138 bool isMasterGroup_(const Group& group) const {
139 return this->parent_.rescoup().isMasterGroup(group.name());
140 }
141 void updateGuideRatesForInjectionGroups_(const Group& group);
148 void updateGuideRatesForProductionGroups_(const Group& group, std::vector<Scalar>& pot);
149 void updateGuideRatesForWells_();
163 void updateInjectionGroupPotentialFromSubGroups_(
164 const Group& group, std::vector<Scalar>& pot);
165 void updateInjectionGroupPotentials_(const Group& group, std::vector<Scalar>& pot);
166#ifdef RESERVOIR_COUPLING_ENABLED
167 void updateProductionGroupPotentialFromSlaveGroup_(
168 const Group& group, std::vector<Scalar>& pot);
169#endif
170 void updateProductionGroupPotentialFromSubGroups(
171 const Group& group, std::vector<Scalar>& pot);
172
174 const int report_step_idx_;
175 const double sim_time_;
176 const WellState<Scalar, IndexTraits> &well_state_;
177 GroupState<Scalar> &group_state_;
178 const int num_phases_;
179 const UnitSystem& unit_system_;
180 };
181
184 const Schedule& schedule,
185 const SummaryState& summary_state,
186 const Parallel::Communication& comm
187 );
188
189 // === Reservoir Coupling ===
190
193 const ReservoirCoupling::Proxy<Scalar>& rescoup() const { return rescoup_; }
194
195 bool isReservoirCouplingMaster() const { return rescoup_.isMaster(); }
196 bool isReservoirCouplingSlave() const { return rescoup_.isSlave(); }
197
200
201#ifdef RESERVOIR_COUPLING_ENABLED
202 void sendSlaveGroupPotentialsToMaster(const GroupState<Scalar>& group_state);
203 void setReservoirCouplingMaster(ReservoirCouplingMaster<Scalar>* master) {
204 rescoup_.setMaster(master);
205 }
206 void setReservoirCouplingSlave(ReservoirCouplingSlave<Scalar>* slave) {
207 rescoup_.setSlave(slave);
208 }
209#endif
210 DeferredLogger& deferredLogger() const { return this->well_model_.groupStateHelper().deferredLogger(); }
219 void debugDumpGuideRates(const int report_step_idx, const double sim_time);
220 const Parallel::Communication& getComm() const { return comm_; }
221 const GuideRate& guideRate() { return guide_rate_; }
222 const PhaseUsageInfo<IndexTraits>& phaseUsage() const { return well_model_.phaseUsage(); }
223 const Schedule& schedule() const { return schedule_; }
224 const SummaryState& summaryState() const { return summary_state_; }
233 void updateGuideRates(const int report_step_idx,
234 const double sim_time,
235 const WellState<Scalar, IndexTraits>& well_state,
236 GroupState<Scalar>& group_state);
237
238 const BlackoilWellModelGeneric<Scalar, IndexTraits>& wellModel() const { return well_model_; }
240private:
241 void debugDumpGuideRatesRecursive_(const Group& group) const;
243 const Schedule& schedule_;
244 const SummaryState& summary_state_;
245 const Parallel::Communication& comm_;
246 GuideRate& guide_rate_;
248};
249
250} // namespace Opm
251
252#endif // OPM_GUIDERATE_HANDLER_HPP
GroupStateHelperType & groupStateHelper()
Definition: BlackoilWellModelGeneric.hpp:335
const PhaseUsageInfo< IndexTraits > & phaseUsage() const
Definition: BlackoilWellModelGeneric.hpp:148
Definition: DeferredLogger.hpp:57
DeferredLogger & deferredLogger() const
Get the deferred logger.
Definition: GroupStateHelper.hpp:233
Definition: GroupState.hpp:42
Responsible for formatting and printing guide rate information to logs.
Definition: GuideRateHandler.hpp:59
void dumpGuideRates()
Dumps guide rates for all wells and groups in a hierarchical structure.
GuideRateDumper(GuideRateHandler< Scalar, IndexTraits > &parent, const int report_step_idx, const double sim_time)
DeferredLogger & deferredLogger()
Definition: GuideRateHandler.hpp:65
Computes and updates guide rate values for wells and groups.
Definition: GuideRateHandler.hpp:110
const Parallel::Communication & comm() const
Definition: GuideRateHandler.hpp:126
void update()
Triggers the guide rate update process for the current simulation step.
UpdateGuideRates(GuideRateHandler< Scalar, IndexTraits > &parent, const int report_step_idx, const double sim_time, const WellState< Scalar, IndexTraits > &well_state, GroupState< Scalar > &group_state, const int num_phases)
GuideRate & guideRate()
Definition: GuideRateHandler.hpp:128
DeferredLogger & deferredLogger()
Definition: GuideRateHandler.hpp:127
const PhaseUsageInfo< IndexTraits > & phaseUsage() const
Definition: GuideRateHandler.hpp:129
const Schedule & schedule() const
Definition: GuideRateHandler.hpp:131
bool isReservoirCouplingMaster() const
Definition: GuideRateHandler.hpp:121
ReservoirCouplingMaster< Scalar > & reservoirCouplingMaster()
Definition: GuideRateHandler.hpp:123
bool isReservoirCouplingSlave() const
Definition: GuideRateHandler.hpp:122
const SummaryState & summaryState() const
Definition: GuideRateHandler.hpp:130
Handles computation and reporting of guide rates for wells and groups.
Definition: GuideRateHandler.hpp:46
void debugDumpGuideRates(const int report_step_idx, const double sim_time)
Dumps guide rate information to the logger in a readable format.
const BlackoilWellModelGeneric< Scalar, IndexTraits > & wellModel() const
Definition: GuideRateHandler.hpp:238
ReservoirCoupling::Proxy< Scalar > & rescoup()
Get the reservoir coupling proxy.
Definition: GuideRateHandler.hpp:192
const GuideRate & guideRate()
Definition: GuideRateHandler.hpp:221
const ReservoirCoupling::Proxy< Scalar > & rescoup() const
Definition: GuideRateHandler.hpp:193
const SummaryState & summaryState() const
Definition: GuideRateHandler.hpp:224
bool isReservoirCouplingSlave() const
Definition: GuideRateHandler.hpp:196
DeferredLogger & deferredLogger() const
Definition: GuideRateHandler.hpp:210
const Schedule & schedule() const
Definition: GuideRateHandler.hpp:223
const Parallel::Communication & getComm() const
Definition: GuideRateHandler.hpp:220
BlackoilWellModelGeneric< Scalar, IndexTraits > & wellModel()
Definition: GuideRateHandler.hpp:239
const PhaseUsageInfo< IndexTraits > & phaseUsage() const
Definition: GuideRateHandler.hpp:222
GuideRateHandler(BlackoilWellModelGeneric< Scalar, IndexTraits > &well_model, const Schedule &schedule, const SummaryState &summary_state, const Parallel::Communication &comm)
bool isReservoirCouplingMaster() const
Definition: GuideRateHandler.hpp:195
ReservoirCouplingMaster< Scalar > & reservoirCouplingMaster()
Definition: GuideRateHandler.hpp:198
ReservoirCouplingSlave< Scalar > & reservoirCouplingSlave()
Definition: GuideRateHandler.hpp:199
void updateGuideRates(const int report_step_idx, const double sim_time, const WellState< Scalar, IndexTraits > &well_state, GroupState< Scalar > &group_state)
Updates guide rates for the current simulation step.
Definition: GasLiftGroupInfo.hpp:38
Thin proxy for reservoir coupling master/slave pointers.
Definition: RescoupProxy.hpp:54
Definition: ReservoirCouplingMaster.hpp:42
Definition: ReservoirCouplingSlave.hpp:40
Definition: WellState.hpp:68
Dune::Communication< MPIComm > Communication
Definition: ParallelCommunication.hpp:30
Definition: blackoilbioeffectsmodules.hh:45
Definition: ReservoirCoupling.hpp:214