Opm::ReservoirCouplingSlave< Scalar > Class Template Reference

#include <ReservoirCouplingSlave.hpp>

Public Types

using MessageTag = ReservoirCoupling::MessageTag
 
using Potentials = ReservoirCoupling::Potentials< Scalar >
 
using SlaveGroupInjectionData = ReservoirCoupling::SlaveGroupInjectionData< Scalar >
 
using SlaveGroupProductionData = ReservoirCoupling::SlaveGroupProductionData< Scalar >
 
using InjectionGroupTarget = ReservoirCoupling::InjectionGroupTarget< Scalar >
 
using ProductionGroupTarget = ReservoirCoupling::ProductionGroupTarget< Scalar >
 

Public Member Functions

 ReservoirCouplingSlave (const Parallel::Communication &comm, const Schedule &schedule, const SimulatorTimer &timer)
 
bool activated () const
 
void clearDeferredLogger ()
 
const Parallel::CommunicationgetComm () const
 
MPI_Comm getMasterComm () const
 
const std::string & getSlaveName () const
 
const std::map< std::string, std::string > & getSlaveToMasterGroupNameMap () const
 
void initTimeStepping ()
 
bool isFirstSubstepOfSyncTimestep () const
 
bool isSlaveGroup (const std::string &group_name) const
 
ReservoirCoupling::Loggerlogger ()
 
ReservoirCoupling::Loggerlogger () const
 
void maybeActivate (int report_step)
 
std::size_t numSlaveGroups () const
 
double receiveNextTimeStepFromMaster ()
 
std::pair< std::size_t, std::size_t > receiveNumGroupTargetsFromMaster () const
 
void receiveInjectionGroupTargetsFromMaster (std::size_t num_targets) const
 
void receiveProductionGroupTargetsFromMaster (std::size_t num_targets) const
 
void sendAndReceiveInitialData ()
 
void sendInjectionDataToMaster (const std::vector< SlaveGroupInjectionData > &injection_data) const
 
void sendNextReportDateToMasterProcess () const
 
void sendProductionDataToMaster (const std::vector< SlaveGroupProductionData > &production_data) const
 
void setDeferredLogger (DeferredLogger *deferred_logger)
 
void setFirstSubstepOfSyncTimestep (bool value)
 
const std::string & slaveGroupIdxToGroupName (std::size_t group_idx) const
 
bool terminated () const
 
bool maybeReceiveTerminateSignalFromMaster ()
 Blocking receive for terminate/continue signal from master. More...
 
void receiveTerminateAndDisconnect ()
 Receive terminate signal from master and disconnect the intercommunicator. More...
 

Member Typedef Documentation

◆ InjectionGroupTarget

template<class Scalar >
using Opm::ReservoirCouplingSlave< Scalar >::InjectionGroupTarget = ReservoirCoupling::InjectionGroupTarget<Scalar>

◆ MessageTag

template<class Scalar >
using Opm::ReservoirCouplingSlave< Scalar >::MessageTag = ReservoirCoupling::MessageTag

◆ Potentials

template<class Scalar >
using Opm::ReservoirCouplingSlave< Scalar >::Potentials = ReservoirCoupling::Potentials<Scalar>

◆ ProductionGroupTarget

template<class Scalar >
using Opm::ReservoirCouplingSlave< Scalar >::ProductionGroupTarget = ReservoirCoupling::ProductionGroupTarget<Scalar>

◆ SlaveGroupInjectionData

template<class Scalar >
using Opm::ReservoirCouplingSlave< Scalar >::SlaveGroupInjectionData = ReservoirCoupling::SlaveGroupInjectionData<Scalar>

◆ SlaveGroupProductionData

template<class Scalar >
using Opm::ReservoirCouplingSlave< Scalar >::SlaveGroupProductionData = ReservoirCoupling::SlaveGroupProductionData<Scalar>

Constructor & Destructor Documentation

◆ ReservoirCouplingSlave()

template<class Scalar >
Opm::ReservoirCouplingSlave< Scalar >::ReservoirCouplingSlave ( const Parallel::Communication comm,
const Schedule &  schedule,
const SimulatorTimer timer 
)

Member Function Documentation

◆ activated()

template<class Scalar >
bool Opm::ReservoirCouplingSlave< Scalar >::activated ( ) const
inline

◆ clearDeferredLogger()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::clearDeferredLogger ( )
inline

◆ getComm()

template<class Scalar >
const Parallel::Communication & Opm::ReservoirCouplingSlave< Scalar >::getComm ( ) const
inline

◆ getMasterComm()

template<class Scalar >
MPI_Comm Opm::ReservoirCouplingSlave< Scalar >::getMasterComm ( ) const
inline

◆ getSlaveName()

template<class Scalar >
const std::string & Opm::ReservoirCouplingSlave< Scalar >::getSlaveName ( ) const
inline

◆ getSlaveToMasterGroupNameMap()

template<class Scalar >
const std::map< std::string, std::string > & Opm::ReservoirCouplingSlave< Scalar >::getSlaveToMasterGroupNameMap ( ) const
inline

◆ initTimeStepping()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::initTimeStepping ( )

◆ isFirstSubstepOfSyncTimestep()

template<class Scalar >
bool Opm::ReservoirCouplingSlave< Scalar >::isFirstSubstepOfSyncTimestep ( ) const

◆ isSlaveGroup()

template<class Scalar >
bool Opm::ReservoirCouplingSlave< Scalar >::isSlaveGroup ( const std::string &  group_name) const

◆ logger() [1/2]

template<class Scalar >
ReservoirCoupling::Logger & Opm::ReservoirCouplingSlave< Scalar >::logger ( )
inline

◆ logger() [2/2]

template<class Scalar >
ReservoirCoupling::Logger & Opm::ReservoirCouplingSlave< Scalar >::logger ( ) const
inline

◆ maybeActivate()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::maybeActivate ( int  report_step)

◆ maybeReceiveTerminateSignalFromMaster()

template<class Scalar >
bool Opm::ReservoirCouplingSlave< Scalar >::maybeReceiveTerminateSignalFromMaster ( )

Blocking receive for terminate/continue signal from master.

This method is called at the start of each timestep iteration in the slave's substep loop. Master sends 0 (continue) or 1 (terminate) at each iteration. If terminate signal (value != 0) is received, disconnects the intercommunicator, sets the terminated flag, and returns true.

Returns
true if terminate signal received and disconnect completed, false to continue.

◆ numSlaveGroups()

template<class Scalar >
std::size_t Opm::ReservoirCouplingSlave< Scalar >::numSlaveGroups ( ) const
inline

◆ receiveInjectionGroupTargetsFromMaster()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::receiveInjectionGroupTargetsFromMaster ( std::size_t  num_targets) const

◆ receiveNextTimeStepFromMaster()

template<class Scalar >
double Opm::ReservoirCouplingSlave< Scalar >::receiveNextTimeStepFromMaster ( )

◆ receiveNumGroupTargetsFromMaster()

template<class Scalar >
std::pair< std::size_t, std::size_t > Opm::ReservoirCouplingSlave< Scalar >::receiveNumGroupTargetsFromMaster ( ) const

◆ receiveProductionGroupTargetsFromMaster()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::receiveProductionGroupTargetsFromMaster ( std::size_t  num_targets) const

◆ receiveTerminateAndDisconnect()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::receiveTerminateAndDisconnect ( )

Receive terminate signal from master and disconnect the intercommunicator.

This method must be called at the end of the simulation to cleanly shut down the MPI intercommunicator created when the slave was spawned. It performs two steps:

  1. Receives a terminate signal from master (only on rank 0, then broadcast)
  2. Disconnects the intercommunicator (collective operation)

Both master and slaves must call their respective disconnect methods for MPI_Comm_disconnect() to complete - it is a collective operation.

◆ sendAndReceiveInitialData()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::sendAndReceiveInitialData ( )

◆ sendInjectionDataToMaster()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::sendInjectionDataToMaster ( const std::vector< SlaveGroupInjectionData > &  injection_data) const

◆ sendNextReportDateToMasterProcess()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::sendNextReportDateToMasterProcess ( ) const

◆ sendProductionDataToMaster()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::sendProductionDataToMaster ( const std::vector< SlaveGroupProductionData > &  production_data) const

◆ setDeferredLogger()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::setDeferredLogger ( DeferredLogger deferred_logger)
inline

◆ setFirstSubstepOfSyncTimestep()

template<class Scalar >
void Opm::ReservoirCouplingSlave< Scalar >::setFirstSubstepOfSyncTimestep ( bool  value)

◆ slaveGroupIdxToGroupName()

template<class Scalar >
const std::string & Opm::ReservoirCouplingSlave< Scalar >::slaveGroupIdxToGroupName ( std::size_t  group_idx) const
inline

◆ terminated()

template<class Scalar >
bool Opm::ReservoirCouplingSlave< Scalar >::terminated ( ) const
inline

The documentation for this class was generated from the following file: