RescoupConstraintsCalculator.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_RESCOUP_CONSTRAINTS_CALCULATOR_HPP
21#define OPM_RESCOUP_CONSTRAINTS_CALCULATOR_HPP
22#include <opm/input/eclipse/Schedule/Group/GuideRate.hpp>
23#include <opm/material/fluidsystems/PhaseUsageInfo.hpp>
33
34namespace Opm {
35
51template<class Scalar, class IndexTraits>
53public:
56
66 GuideRateHandler<Scalar, IndexTraits>& guide_rate_handler,
68 );
69
82
114
115private:
133 std::tuple<std::vector<InjectionGroupTarget>, std::vector<ProductionGroupConstraints>>
134 calculateSlaveGroupConstraints_(std::size_t slave_idx, GroupConstraintCalculator<Scalar, IndexTraits>& calculator) const;
135
145 std::vector<InjectionGroupTarget>
146 calculateSlaveGroupInjectionTargets_(std::size_t slave_idx, GroupConstraintCalculator<Scalar, IndexTraits>& calculator) const;
147
163 void capAndRedistributeProductionTargets_(
165 std::vector<std::vector<ProductionGroupConstraints>>& all_production_constraints);
166
174 void excludeInactiveSlaveMasterGroupsFromDistribution_();
175
186 Scalar potentialForProductionCmode_(
188 Group::ProductionCMode cmode) const;
189
203 void sendSlaveGroupConstraintsToSlave_(
204 const ReservoirCouplingMaster<Scalar>& rescoup_master,
205 std::size_t slave_idx,
206 const std::vector<InjectionGroupTarget>& injection_targets,
207 const std::vector<ProductionGroupConstraints>& production_constraints
208 ) const;
209
218 void updateGCWAndTargetReductions_();
219
220 GuideRateHandler<Scalar, IndexTraits>& guide_rate_handler_;
221 GroupStateHelper<Scalar, IndexTraits>& group_state_helper_;
222 const WellState<Scalar, IndexTraits>& well_state_;
223 const GroupState<Scalar>& group_state_;
224 const int report_step_idx_;
225 const Schedule& schedule_;
226 const SummaryState& summary_state_;
227 DeferredLogger& deferred_logger_;
228 ReservoirCouplingMaster<Scalar>& reservoir_coupling_master_;
230 const PhaseUsageInfo<IndexTraits>& phase_usage_;
231};
232
233} // namespace Opm
234#endif // OPM_RESCOUP_CONSTRAINTS_CALCULATOR_HPP
Definition: DeferredLogger.hpp:57
Definition: GroupConstraintCalculator.hpp:55
Definition: GroupStateHelper.hpp:56
Definition: GroupState.hpp:41
Handles computation and reporting of guide rates for wells and groups.
Definition: GuideRateHandler.hpp:46
Definition: GasLiftGroupInfo.hpp:38
Computes per-master-group production targets and per-rate-type limits for reservoir coupling,...
Definition: RescoupConstraintsCalculator.hpp:52
void calculateMasterGroupConstraintsAndSendToSlaves()
Run the full master-side target distribution and dispatch the resulting constraints to each activated...
void recalculateInjectionTargetsAndSendToSlaves()
Recompute only the injection targets and send them to each activated slave, replacing the ones sent e...
RescoupConstraintsCalculator(GuideRateHandler< Scalar, IndexTraits > &guide_rate_handler, GroupStateHelper< Scalar, IndexTraits > &group_state_helper)
Construct a calculator bound to the master's per-sync-step state.
Definition: ReservoirCouplingMaster.hpp:38
Definition: WellState.hpp:68
Definition: blackoilbioeffectsmodules.hh:45
Definition: ReservoirCoupling.hpp:262
Definition: ReservoirCoupling.hpp:214
Definition: ReservoirCoupling.hpp:272