20 #ifndef OPM_RESERVOIR_COUPLING_SLAVE_REPORT_STEP_HPP 21 #define OPM_RESERVOIR_COUPLING_SLAVE_REPORT_STEP_HPP 23 #include <opm/simulators/flow/rescoup/ReservoirCoupling.hpp> 24 #include <opm/input/eclipse/EclipseState/Phase.hpp> 25 #include <opm/input/eclipse/Schedule/Group/Group.hpp> 34 template <
class Scalar>
class ReservoirCouplingSlave;
54 template <
class Scalar>
55 class ReservoirCouplingSlaveReportStep {
57 using InjectionGroupTarget = ReservoirCoupling::InjectionGroupTarget<Scalar>;
58 using ProductionGroupConstraints = ReservoirCoupling::ProductionGroupConstraints<Scalar>;
59 using MessageTag = ReservoirCoupling::MessageTag;
60 using MasterProductionLimits = ReservoirCoupling::MasterProductionLimits<Scalar>;
61 using SlaveGroupInjectionData = ReservoirCoupling::SlaveGroupInjectionData<Scalar>;
62 using SlaveGroupProductionData = ReservoirCoupling::SlaveGroupProductionData<Scalar>;
67 ReservoirCouplingSlave<Scalar> &slave
72 const Parallel::Communication &
comm()
const {
return this->slave_.getComm(); }
120 const std::string& gname,
const Phase phase)
const;
181 const std::string&
slaveName()
const {
return this->slave_.getSlaveName(); }
189 const std::string& gname,
const Phase phase,
const Scalar target,
const Group::InjectionCMode cmode);
220 template <
class DataType>
221 void sendDataToMaster_(
222 const std::vector<DataType>& data,
224 const std::string& data_type_name
231 bool is_first_substep_of_sync_timestep_{
true};
235 bool is_last_substep_of_sync_timestep_{
false};
242 std::map<std::string, std::pair<Scalar, Group::ProductionCMode>> master_production_targets_;
244 std::map<std::pair<Phase, std::string>, std::pair<Scalar, Group::InjectionCMode>> master_injection_targets_;
247 std::map<std::string, MasterProductionLimits> master_production_limits_;
250 #endif // OPM_RESERVOIR_COUPLING_SLAVE_REPORT_STEP_HPP void sendProductionDataToMaster(const std::vector< SlaveGroupProductionData > &production_data) const
Send production data to the master process.
Definition: ReservoirCouplingSlaveReportStep.cpp:229
void setFirstSubstepOfSyncTimestep(bool value)
Set whether this is the first substep within a "sync" timestep.
Definition: ReservoirCouplingSlaveReportStep.hpp:172
Definition: ReservoirCoupling.hpp:42
void setLastSubstepOfSyncTimestep(bool value)
Set whether this is the last substep within a "sync" timestep.
Definition: ReservoirCouplingSlaveReportStep.hpp:177
bool hasMasterInjectionTarget(const std::string &gname, const Phase phase) const
Check if a master-imposed injection target exists for a group and phase.
Definition: ReservoirCouplingSlaveReportStep.cpp:55
const MasterProductionLimits & masterProductionLimits(const std::string &gname) const
Get the master-imposed per-rate-type production limits for a group.
Definition: ReservoirCouplingSlaveReportStep.cpp:87
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
ReservoirCoupling::Logger & logger() const
Get the logger for reservoir coupling operations.
Definition: ReservoirCouplingSlaveReportStep.hpp:112
const Parallel::Communication & comm() const
Get the MPI communicator for intra-slave communication.
Definition: ReservoirCouplingSlaveReportStep.hpp:72
MPI_Comm getSlaveMasterComm() const
Get the MPI communicator for slave-master communication.
Definition: ReservoirCouplingSlaveReportStep.hpp:76
std::pair< std::size_t, std::size_t > receiveNumGroupConstraintsFromMaster() const
Receive the number of injection and production constraints from master.
Definition: ReservoirCouplingSlaveReportStep.cpp:144
std::pair< Scalar, Group::InjectionCMode > masterInjectionTarget(const std::string &gname, const Phase phase) const
Get the master-imposed injection target and control mode for a group and phase.
Definition: ReservoirCouplingSlaveReportStep.cpp:79
void receiveProductionGroupConstraintsFromMaster(std::size_t num_targets)
Receive production group constraints from master and store them locally.
Definition: ReservoirCouplingSlaveReportStep.cpp:172
bool isLastSubstepOfSyncTimestep() const
Check if this is the last substep within a "sync" timestep.
Definition: ReservoirCouplingSlaveReportStep.hpp:108
void setMasterInjectionTarget(const std::string &gname, const Phase phase, const Scalar target, const Group::InjectionCMode cmode)
Store a master-imposed injection target for a group and phase.
Definition: ReservoirCouplingSlaveReportStep.cpp:239
bool hasMasterProductionLimits(const std::string &gname) const
Check if master-imposed per-rate-type production limits exist for a group.
Definition: ReservoirCouplingSlaveReportStep.cpp:63
const std::string & slaveName() const
Get the name of this slave process.
Definition: ReservoirCouplingSlaveReportStep.hpp:181
void setMasterProductionLimits(const std::string &gname, const MasterProductionLimits &limits)
Store master-imposed per-rate-type production limits for a group.
Definition: ReservoirCouplingSlaveReportStep.cpp:249
bool hasMasterProductionTarget(const std::string &gname) const
Check if a master-imposed production target exists for a group.
Definition: ReservoirCouplingSlaveReportStep.cpp:71
void receiveInjectionGroupTargetsFromMaster(std::size_t num_targets)
Receive injection group targets from master and store them locally.
Definition: ReservoirCouplingSlaveReportStep.cpp:103
Definition: ReservoirCouplingSlave.hpp:40
void setMasterProductionTarget(const std::string &gname, const Scalar target, const Group::ProductionCMode cmode)
Store a master-imposed production target for a group.
Definition: ReservoirCouplingSlaveReportStep.cpp:257
void sendInjectionDataToMaster(const std::vector< SlaveGroupInjectionData > &injection_data) const
Send injection data to the master process.
Definition: ReservoirCouplingSlaveReportStep.cpp:219
std::pair< Scalar, Group::ProductionCMode > masterProductionTarget(const std::string &gname) const
Get the master-imposed production target and control mode for a group.
Definition: ReservoirCouplingSlaveReportStep.cpp:95
bool isFirstSubstepOfSyncTimestep() const
Check if this is the first substep within a "sync" timestep.
Definition: ReservoirCouplingSlaveReportStep.hpp:99
ReservoirCouplingSlaveReportStep(ReservoirCouplingSlave< Scalar > &slave)
Construct a report step manager for the slave process.
Definition: ReservoirCouplingSlaveReportStep.cpp:41