preCICE
Loading...
Searching...
No Matches
precice::com::MPIDirectCommunication Class Reference

Provides connection methods for processes located in one communicator. More...

#include <MPIDirectCommunication.hpp>

Inheritance diagram for precice::com::MPIDirectCommunication:
[legend]
Collaboration diagram for precice::com::MPIDirectCommunication:
[legend]

Public Member Functions

 MPIDirectCommunication ()
 ~MPIDirectCommunication () override
size_t getRemoteCommunicatorSize () override
 Returns the number of processes in the remote communicator.
void acceptConnection (std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int acceptorRank, int rankOffset=0) override
void acceptConnectionAsServer (std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int acceptorRank, int requesterCommunicatorSize) override
void requestConnection (std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int requesterRank, int requesterCommunicatorSize) override
void requestConnectionAsClient (std::string const &acceptorName, std::string const &requesterName, std::string const &tag, std::set< int > const &acceptorRanks, int requesterRank) override
void closeConnection () override
 See precice::com::Communication::closeConnection().
void reduceSum (precice::span< double const > itemsToSend, precice::span< double > itemsToReceive, Rank primaryRank) override
void reduceSum (precice::span< double const > itemsToSend, precice::span< double > itemsToReceive) override
void reduceSum (int itemToSend, int &itemsToReceive, Rank primaryRank) override
void reduceSum (int itemToSend, int &itemsToReceive) override
void allreduceSum (precice::span< double const > itemsToSend, precice::span< double > itemsToReceive, Rank primaryRank) override
void allreduceSum (precice::span< double const > itemsToSend, precice::span< double > itemsToReceive) override
void allreduceSum (double itemToSend, double &itemsToReceive, Rank primaryRank) override
void allreduceSum (double itemToSend, double &itemsToReceive) override
void allreduceSum (int itemToSend, int &itemsToReceive, Rank primaryRank) override
void allreduceSum (int itemToSend, int &itemsToReceive) override
void broadcast (precice::span< const int > itemsToSend) override
void broadcast (precice::span< int > itemsToReceive, Rank rankBroadcaster) override
void broadcast (int itemToSend) override
void broadcast (int &itemToReceive, Rank rankBroadcaster) override
void broadcast (precice::span< const double > itemsToSend) override
void broadcast (precice::span< double > itemsToReceive, Rank rankBroadcaster) override
void broadcast (double itemToSend) override
void broadcast (double &itemToReceive, Rank rankBroadcaster) override
void broadcast (bool itemToSend) override
void broadcast (bool &itemToReceive, Rank rankBroadcaster) override
Public Member Functions inherited from precice::com::MPICommunication
 MPICommunication ()
 ~MPICommunication () override=default
 Destructor, empty.
void send (std::string const &itemToSend, Rank rankReceiver) override
 Sends a std::string to process with given rank.
void send (precice::span< const int > itemsToSend, Rank rankReceiver) override
 Sends an array of integer values.
PtrRequest aSend (precice::span< const int > itemsToSend, Rank rankReceiver) override
 Asynchronously sends an array of integer values.
void send (precice::span< const double > itemsToSend, Rank rankReceiver) override
 Sends an array of double values.
PtrRequest aSend (precice::span< const double > itemsToSend, Rank rankReceiver) override
 Asynchronously sends an array of double values.
void send (double itemToSend, Rank rankReceiver) override
 Sends a double to process with given rank.
PtrRequest aSend (const double &itemToSend, Rank rankReceiver) override
 Asynchronously sends a double to process with given rank.
void send (int itemToSend, Rank rankReceiver) override
 Sends an int to process with given rank.
PtrRequest aSend (const int &itemToSend, Rank rankReceiver) override
 Asynchronously sends an int to process with given rank.
void send (bool itemToSend, Rank rankReceiver) override
 Sends a bool to process with given rank.
PtrRequest aSend (const bool &itemToSend, Rank rankReceiver) override
 Asynchronously sends a bool to process with given rank.
void receive (std::string &itemToReceive, Rank rankSender) override
 Receives a std::string from process with given rank.
void receive (precice::span< int > itemsToReceive, Rank rankSender) override
 Receives an array of integer values.
void receive (precice::span< double > itemsToReceive, Rank rankSender) override
 Receives an array of double values.
PtrRequest aReceive (precice::span< double > itemsToReceive, int rankSender) override
 Asynchronously receives an array of double values.
void receive (double &itemToReceive, Rank rankSender) override
 Receives a double from process with given rank.
PtrRequest aReceive (double &itemToReceive, Rank rankSender) override
 Asynchronously receives a double from process with given rank.
void receive (int &itemToReceive, Rank rankSender) override
 Receives an int from process with given rank.
PtrRequest aReceive (int &itemToReceive, Rank rankSender) override
 Asynchronously receives an int from process with given rank.
void receive (bool &itemToReceive, Rank rankSender) override
 Receives a bool from process with given rank.
PtrRequest aReceive (bool &itemToReceive, Rank rankSender) override
 Asynchronously receives a bool from process with given rank.

Protected Member Functions

int adjustRank (Rank rank) const override
 Turn the rank adjustment into a noop for direct communication.

Private Member Functions

MPI_Commcommunicator (Rank rank=0) override
 Returns the communicator.
Rank rank (int rank) override

Private Attributes

logging::Logger _log {"com::MPIDirectCommunication"}
utils::Parallel::CommStatePtr _commState = nullptr
 CommState to use.

Detailed Description

Provides connection methods for processes located in one communicator.

This communication class can be used when the communicating participants are either compiled into one executable or, are started by one mpi execution call on the command line.

It is important, that all processes in the used communicator have to participate in the communication. If one of the processes does not call either acceptConnection(), or closeConnection(), a deadlock is achieved.

Definition at line 28 of file MPIDirectCommunication.hpp.

Constructor & Destructor Documentation

◆ MPIDirectCommunication()

precice::com::MPIDirectCommunication::MPIDirectCommunication ( )

Creates a MPI Direct communication based on the current global communicator.

Definition at line 14 of file MPIDirectCommunication.cpp.

◆ ~MPIDirectCommunication()

precice::com::MPIDirectCommunication::~MPIDirectCommunication ( )
override

Definition at line 19 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

Member Function Documentation

◆ acceptConnection()

void precice::com::MPIDirectCommunication::acceptConnection ( std::string const & acceptorName,
std::string const & requesterName,
std::string const & tag,
int acceptorRank,
int rankOffset = 0 )
override

See precice::com::Communication::acceptConnection().

Attention
Calls precice::utils::Parallel::splitCommunicator() if local and global communicators are equal.

Definition at line 34 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ acceptConnectionAsServer()

void precice::com::MPIDirectCommunication::acceptConnectionAsServer ( std::string const & acceptorName,
std::string const & requesterName,
std::string const & tag,
int acceptorRank,
int requesterCommunicatorSize )
inlineoverride

Definition at line 53 of file MPIDirectCommunication.hpp.

◆ adjustRank()

int precice::com::MPIDirectCommunication::adjustRank ( Rank rank) const
overrideprotected

Turn the rank adjustment into a noop for direct communication.

Definition at line 220 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ allreduceSum() [1/6]

void precice::com::MPIDirectCommunication::allreduceSum ( double itemToSend,
double & itemsToReceive )
override

Definition at line 122 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ allreduceSum() [2/6]

void precice::com::MPIDirectCommunication::allreduceSum ( double itemToSend,
double & itemsToReceive,
Rank primaryRank )
override

Definition at line 128 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ allreduceSum() [3/6]

void precice::com::MPIDirectCommunication::allreduceSum ( int itemToSend,
int & itemsToReceive )
override

Definition at line 134 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ allreduceSum() [4/6]

void precice::com::MPIDirectCommunication::allreduceSum ( int itemToSend,
int & itemsToReceive,
Rank primaryRank )
override

Definition at line 140 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ allreduceSum() [5/6]

void precice::com::MPIDirectCommunication::allreduceSum ( precice::span< double const > itemsToSend,
precice::span< double > itemsToReceive )
override

Definition at line 108 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ allreduceSum() [6/6]

void precice::com::MPIDirectCommunication::allreduceSum ( precice::span< double const > itemsToSend,
precice::span< double > itemsToReceive,
Rank primaryRank )
override

Definition at line 115 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [1/10]

void precice::com::MPIDirectCommunication::broadcast ( bool & itemToReceive,
Rank rankBroadcaster )
override

Definition at line 201 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [2/10]

void precice::com::MPIDirectCommunication::broadcast ( bool itemToSend)
override

Definition at line 194 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [3/10]

void precice::com::MPIDirectCommunication::broadcast ( double & itemToReceive,
Rank rankBroadcaster )
override

Definition at line 188 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [4/10]

void precice::com::MPIDirectCommunication::broadcast ( double itemToSend)
override

Definition at line 182 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [5/10]

void precice::com::MPIDirectCommunication::broadcast ( int & itemToReceive,
Rank rankBroadcaster )
override

Definition at line 164 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [6/10]

void precice::com::MPIDirectCommunication::broadcast ( int itemToSend)
override

Definition at line 158 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [7/10]

void precice::com::MPIDirectCommunication::broadcast ( precice::span< const double > itemsToSend)
override

Definition at line 170 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [8/10]

void precice::com::MPIDirectCommunication::broadcast ( precice::span< const int > itemsToSend)
override

Definition at line 146 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [9/10]

void precice::com::MPIDirectCommunication::broadcast ( precice::span< double > itemsToReceive,
Rank rankBroadcaster )
override

Definition at line 176 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ broadcast() [10/10]

void precice::com::MPIDirectCommunication::broadcast ( precice::span< int > itemsToReceive,
Rank rankBroadcaster )
override

Definition at line 152 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ closeConnection()

void precice::com::MPIDirectCommunication::closeConnection ( )
override

See precice::com::Communication::closeConnection().

Definition at line 53 of file MPIDirectCommunication.cpp.

◆ communicator()

MPI_Comm & precice::com::MPIDirectCommunication::communicator ( Rank rank = 0)
overrideprivatevirtual

Returns the communicator.

Implements precice::com::MPICommunication.

Definition at line 209 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ getRemoteCommunicatorSize()

size_t precice::com::MPIDirectCommunication::getRemoteCommunicatorSize ( )
override

Returns the number of processes in the remote communicator.

Precondition
A connection to the remote participant has been setup.

Definition at line 25 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ rank()

int precice::com::MPIDirectCommunication::rank ( int rank)
overrideprivatevirtual

Implements precice::com::MPICommunication.

Definition at line 214 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ reduceSum() [1/4]

void precice::com::MPIDirectCommunication::reduceSum ( int itemToSend,
int & itemsToReceive )
override

Definition at line 95 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ reduceSum() [2/4]

void precice::com::MPIDirectCommunication::reduceSum ( int itemToSend,
int & itemsToReceive,
Rank primaryRank )
override

Definition at line 102 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ reduceSum() [3/4]

void precice::com::MPIDirectCommunication::reduceSum ( precice::span< double const > itemsToSend,
precice::span< double > itemsToReceive )
override

Definition at line 80 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ reduceSum() [4/4]

void precice::com::MPIDirectCommunication::reduceSum ( precice::span< double const > itemsToSend,
precice::span< double > itemsToReceive,
Rank primaryRank )
override

Definition at line 88 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ requestConnection()

void precice::com::MPIDirectCommunication::requestConnection ( std::string const & acceptorName,
std::string const & requesterName,
std::string const & tag,
int requesterRank,
int requesterCommunicatorSize )
override

See precice::com::Communication::requestConnection().

Attention
Calls precice::utils::Parallel::splitCommunicator() if local and global communicators are equal.

Definition at line 63 of file MPIDirectCommunication.cpp.

Here is the call graph for this function:

◆ requestConnectionAsClient()

void precice::com::MPIDirectCommunication::requestConnectionAsClient ( std::string const & acceptorName,
std::string const & requesterName,
std::string const & tag,
std::set< int > const & acceptorRanks,
int requesterRank )
inlineoverride

Definition at line 72 of file MPIDirectCommunication.hpp.

Member Data Documentation

◆ _commState

utils::Parallel::CommStatePtr precice::com::MPIDirectCommunication::_commState = nullptr
private

CommState to use.

Definition at line 132 of file MPIDirectCommunication.hpp.

◆ _log

logging::Logger precice::com::MPIDirectCommunication::_log {"com::MPIDirectCommunication"}
private

Definition at line 129 of file MPIDirectCommunication.hpp.


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