20#ifndef OPM_BLACKOILWELLMODEL_RESCOUP_HEADER_INCLUDED
21#define OPM_BLACKOILWELLMODEL_RESCOUP_HEADER_INCLUDED
25#ifdef RESERVOIR_COUPLING_ENABLED
38 template<
class TypeTag>
class BlackoilWellModel;
39 template<
class Scalar,
class IndexTraits>
class GroupStateHelper;
40 template<
class Scalar,
class IndexTraits>
class WellState;
41 template<
class Scalar>
class ReservoirCouplingMaster;
42 template<
class Scalar>
class ReservoirCouplingSlave;
60template<
typename TypeTag>
61class BlackoilWellModelRescoup {
62 using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
63 using Scalar = GetPropType<TypeTag, Properties::Scalar>;
64 using IndexTraits =
typename FluidSystem::IndexTraitsType;
65 using Simulator = GetPropType<TypeTag, Properties::Simulator>;
66 using ModelParameters = BlackoilModelParameters<Scalar>;
70 explicit BlackoilWellModelRescoup(BlackoilWellModel<TypeTag>& well_model);
74 bool isReservoirCouplingMaster()
const {
return well_model_.isReservoirCouplingMaster(); }
75 bool isReservoirCouplingSlave()
const {
return well_model_.isReservoirCouplingSlave(); }
77 ReservoirCouplingMaster<Scalar>& reservoirCouplingMaster()
78 {
return well_model_.reservoirCouplingMaster(); }
79 const ReservoirCouplingMaster<Scalar>& reservoirCouplingMaster()
const
80 {
return well_model_.reservoirCouplingMaster(); }
82 ReservoirCouplingSlave<Scalar>& reservoirCouplingSlave()
83 {
return well_model_.reservoirCouplingSlave(); }
84 const ReservoirCouplingSlave<Scalar>& reservoirCouplingSlave()
const
85 {
return well_model_.reservoirCouplingSlave(); }
89 GroupStateHelper<Scalar, IndexTraits>& groupStateHelper()
90 {
return well_model_.groupStateHelper(); }
91 const GroupStateHelper<Scalar, IndexTraits>& groupStateHelper()
const
92 {
return well_model_.groupStateHelper(); }
94 WellState<Scalar, IndexTraits>& wellState()
95 {
return well_model_.wellState(); }
96 const WellState<Scalar, IndexTraits>& wellState()
const
97 {
return well_model_.wellState(); }
99 const Schedule& schedule()
const {
return well_model_.schedule(); }
101 std::vector<WellInterfacePtr>& wellContainer()
102 {
return well_model_.wellContainer(); }
111 void evalGroupAndFieldUDQs();
119 bool lastSentMasterGroupNodePressuresIsFinal()
const
120 {
return last_sent_master_group_node_pressures_is_final_; }
131 bool masterNetworkHasMasterGroupLeaves()
const;
138 bool masterIsInCoupledNetworkIteration()
const;
147 void receiveCoupledNetworkActiveStatus();
157 void receiveGroupConstraintsFromMaster();
162 void receiveMasterGroupNodePressuresFromMaster();
171 void receiveSlaveGroupData();
179 void refreshSlaveGroupInjectionTargets();
187 void rescoupSyncSummaryData();
199 void sendCoupledNetworkActiveStatus();
208 void sendMasterGroupConstraintsToSlaves();
218 void sendMasterGroupNodePressuresToSlaves(
bool is_final);
230 void maybeExchangeNetworkSubIterationWithSlaves();
243 void maybeExchangeNetworkOuterIterationWithSlaves(
bool more_network_update);
251 void sendSlaveGroupDataToMaster();
255 std::optional<ReservoirCoupling::ScopedLoggerGuard> setupScopedLogger(DeferredLogger& local_logger);
262 void storeSlaveGroupInjectionTargets();
269 std::optional<Scalar>
270 effectiveSlaveGroupInjectionTarget_(
const std::string& gname,
272 const int reportStepIdx,
273 const ReservoirCoupling::CouplingInfo& rescoup,
274 const SummaryState& summary_state)
const;
282 bool masterNetworkHasMasterGroupLeavesForSlave_(std::size_t slave_idx)
const;
293 void refreshAndSendInjectionTargets_();
299 Scalar scheduleInjectionTarget_(
const std::string& gname,
301 const int reportStepIdx,
302 const SummaryState& summary_state)
const;
307 void sendMasterGroupInjectionTargetsToSlaves_();
318 bool slaveGroupIsFixedPressureNodeInOwnNetwork_(
const std::string& group_name)
const;
320 BlackoilWellModel<TypeTag>& well_model_;
321 BlackoilWellModelNetwork<TypeTag>& network_;
322 Simulator& simulator_;
323 const ModelParameters& param_;
326 bool last_sent_master_group_node_pressures_is_final_{
true};
Defines a type tags and some fundamental properties all models.
std::unique_ptr< WellInterface< TypeTag > > WellInterfacePtr
Definition: BlackoilWellModel.hpp:195
Definition: ReservoirCoupling.hpp:40
Phase
Phase indices for reservoir coupling, we currently only support black-oil phases (oil,...
Definition: ReservoirCoupling.hpp:183
Definition: blackoilbioeffectsmodules.hh:45