opm-simulators
RescoupConstraintsCalculator.hpp
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>
24 #include <opm/simulators/flow/rescoup/ReservoirCoupling.hpp>
25 #include <opm/simulators/flow/rescoup/ReservoirCouplingMaster.hpp>
26 #include <opm/simulators/utils/DeferredLogger.hpp>
27 #include <opm/simulators/wells/BlackoilWellModelGeneric.hpp>
28 #include <opm/simulators/wells/GroupState.hpp>
29 #include <opm/simulators/wells/GroupStateHelper.hpp>
30 #include <opm/simulators/wells/GroupConstraintCalculator.hpp>
31 #include <opm/simulators/wells/GuideRateHandler.hpp>
32 #include <opm/simulators/wells/WellState.hpp>
33 
34 namespace Opm {
35 
51 template<class Scalar, class IndexTraits>
53 public:
56 
66  GuideRateHandler<Scalar, IndexTraits>& guide_rate_handler,
67  GroupStateHelper<Scalar, IndexTraits>& group_state_helper
68  );
69 
82 private:
100  std::tuple<std::vector<InjectionGroupTarget>, std::vector<ProductionGroupConstraints>>
101  calculateSlaveGroupConstraints_(std::size_t slave_idx, GroupConstraintCalculator<Scalar, IndexTraits>& calculator) const;
102 
118  void capAndRedistributeProductionTargets_(
120  std::vector<std::vector<ProductionGroupConstraints>>& all_production_constraints);
121 
129  void excludeInactiveSlaveMasterGroupsFromDistribution_();
130 
141  Scalar potentialForProductionCmode_(
142  const ReservoirCoupling::Potentials<Scalar>& potentials,
143  Group::ProductionCMode cmode) const;
144 
153  void restoreMasterGroupControlsFromSchedule_();
154 
168  void sendSlaveGroupConstraintsToSlave_(
169  const ReservoirCouplingMaster<Scalar>& rescoup_master,
170  std::size_t slave_idx,
171  const std::vector<InjectionGroupTarget>& injection_targets,
172  const std::vector<ProductionGroupConstraints>& production_constraints
173  ) const;
174 
183  void updateGCWAndTargetReductions_();
184 
185  GuideRateHandler<Scalar, IndexTraits>& guide_rate_handler_;
186  GroupStateHelper<Scalar, IndexTraits>& group_state_helper_;
187  const WellState<Scalar, IndexTraits>& well_state_;
188  const GroupState<Scalar>& group_state_;
189  const int report_step_idx_;
190  const Schedule& schedule_;
191  const SummaryState& summary_state_;
192  DeferredLogger& deferred_logger_;
193  ReservoirCouplingMaster<Scalar>& reservoir_coupling_master_;
195  const PhaseUsageInfo<IndexTraits>& phase_usage_;
196 };
197 
198 } // namespace Opm
199 #endif // OPM_RESCOUP_CONSTRAINTS_CALCULATOR_HPP
RescoupConstraintsCalculator(GuideRateHandler< Scalar, IndexTraits > &guide_rate_handler, GroupStateHelper< Scalar, IndexTraits > &group_state_helper)
Construct a calculator bound to the master&#39;s per-sync-step state.
Definition: RescoupConstraintsCalculator.cpp:37
Definition: BlackoilWellModelConstraints.hpp:34
Structs needed for tpfalinearizer and its gpuparams struct extracted to be defined in one place that ...
Definition: blackoilbioeffectsmodules.hh:45
Definition: BlackoilWellModelConstraints.hpp:37
Definition: ReservoirCoupling.hpp:196
Definition: DeferredLogger.hpp:56
Handles computation and reporting of guide rates for wells and groups.
Definition: GuideRateHandler.hpp:46
Definition: GasLiftGroupInfo.hpp:38
Definition: ReservoirCoupling.hpp:254
Definition: ReservoirCouplingMaster.hpp:38
Calculate group-level constraints for production and injection.
Definition: GroupConstraintCalculator.hpp:55
Definition: ReservoirCoupling.hpp:244
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...
Definition: RescoupConstraintsCalculator.cpp:198
The state of a set of wells, tailored for use by the fully implicit blackoil simulator.
Definition: TemperatureModel.hpp:65