8#include "boost/range/irange.hpp"
54 Communication &operator=(Communication &&) =
delete;
57 virtual ~Communication() =
default;
63 virtual bool isConnected()
102 std::string
const &requesterName,
103 std::string
const &tag,
105 int rankOffset = 0) = 0;
123 std::string
const &requesterName,
124 std::string
const &tag,
126 int requesterCommunicatorSize) = 0;
144 std::string
const &requesterName,
145 std::string
const &tag,
147 int requesterCommunicatorSize) = 0;
164 std::string
const &requesterName,
165 std::string
const &tag,
166 std::set<int>
const &acceptorRanks,
167 int requesterRank) = 0;
178 std::string
const &tag,
196 std::string
const &requesterName) {}
205 std::string
const &requesterName) {}
217 virtual void reduceSum(
int itemToSend,
int &itemToReceive,
Rank primaryRank);
218 virtual void reduceSum(
int itemsToSend,
int &itemsToReceive);
261 virtual void send(std::string
const &itemToSend,
Rank rankReceiver) = 0;
278 virtual void send(
double itemToSend,
Rank rankReceiver) = 0;
285 virtual void send(
int itemToSend,
Rank rankReceiver) = 0;
292 virtual void send(
bool itemToSend,
Rank rankReceiver) = 0;
304 virtual void receive(std::string &itemToReceive,
Rank rankSender) = 0;
342 template <
typename T>
381inline constexpr auto asVector = Communication::AsVectorTag<T>{};
389 std::string
const &participantName,
390 std::string
const &tag,
393 com::Communication &left,
394 com::Communication &right);
This class provides a lightweight logger.
A C++ 11 implementation of the non-owning C++20 std::span type.
contains the data communication abstraction layer.
virtual void send(std::string const &itemToSend, Rank rankReceiver)=0
Sends a std::string to process with given rank.
virtual int adjustRank(Rank rank) const
Adjusts the given rank bases on the _rankOffset.
void setRankOffset(Rank rankOffset)
Set rank offset.
virtual PtrRequest aSend(precice::span< const int > itemsToSend, Rank rankReceiver)=0
Asynchronously sends an array of integer values.
virtual void acceptConnectionAsServer(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int acceptorRank, int requesterCommunicatorSize)=0
Accepts connection from another communicator, which has to call requestConnectionAsClient().
std::vector< int > receiveRange(Rank rankSender, AsVectorTag< int >)
Receives a range of ints as a vector<int>.
void connectIntraComm(std::string const &participantName, std::string const &tag, int rank, int size)
constexpr auto asVector
Allows to use Communication::AsVectorTag in a less verbose way.
std::shared_ptr< Request > PtrRequest
virtual void reduceSum(precice::span< double const > itemsToSend, precice::span< double > itemsToReceive, Rank primaryRank)
Performs a reduce summation on the rank given by primaryRank.
virtual void closeConnection()=0
Disconnects from communication space, i.e. participant.
virtual void requestConnectionAsClient(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, std::set< int > const &acceptorRanks, int requesterRank)=0
Connects to another communicator, which has to call acceptConnectionAsServer().
void sendRange(precice::span< const double > itemsToSend, Rank rankReceiver)
Sends a range of doubles (size + content).
virtual void prepareEstablishment(std::string const &acceptorName, std::string const &requesterName)
Prepare environment used to establish the communication.
virtual void broadcast(precice::span< const int > itemsToSend)
virtual void receive(std::string &itemToReceive, Rank rankSender)=0
Receives a std::string from process with given rank.
virtual void acceptConnection(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int acceptorRank, int rankOffset=0)=0
Accepts connection from another communicator, which has to call requestConnection().
virtual PtrRequest aReceive(precice::span< double > itemsToReceive, int rankSender)=0
Asynchronously receives an array of double values.
virtual size_t getRemoteCommunicatorSize()=0
void connectCircularComm(std::string const &participantName, std::string const &tag, int rank, int size, com::Communication &left, com::Communication &right)
auto remoteCommunicatorRanks()
Returns a range over all valid remote ranks.
virtual void requestConnection(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int requesterRank, int requesterCommunicatorSize)=0
Connects to another communicator, which has to call acceptConnection().
virtual void cleanupEstablishment(std::string const &acceptorName, std::string const &requesterName)
Clean-up environment used to establish the communication.
virtual void allreduceSum(precice::span< double const > itemsToSend, precice::span< double > itemsToReceive, Rank primaryRank)
int _rankOffset
Rank offset for primaries-secondary communication, since ranks are from 0 to size-2.