preCICE v3.2.0
Loading...
Searching...
No Matches
MPIDirectCommunication.hpp
Go to the documentation of this file.
1#ifndef PRECICE_NO_MPI
2
3#pragma once
4
5#include <mpi.h>
6#include <set>
7#include <stddef.h>
8#include <string>
9
11#include "logging/Logger.hpp"
13#include "utils/Parallel.hpp"
14#include "utils/assertion.hpp"
15
16namespace precice::com {
29public:
33
34 ~MPIDirectCommunication() override;
35
41 size_t getRemoteCommunicatorSize() override;
42
47 void acceptConnection(std::string const &acceptorName,
48 std::string const &requesterName,
49 std::string const &tag,
50 int acceptorRank,
51 int rankOffset = 0) override;
52
53 void acceptConnectionAsServer(std::string const &acceptorName,
54 std::string const &requesterName,
55 std::string const &tag,
56 int acceptorRank,
57 int requesterCommunicatorSize) override
58 {
59 PRECICE_ASSERT(false, "Not implemented!");
60 }
61
66 void requestConnection(std::string const &acceptorName,
67 std::string const &requesterName,
68 std::string const &tag,
69 int requesterRank,
70 int requesterCommunicatorSize) override;
71
72 void requestConnectionAsClient(std::string const &acceptorName,
73 std::string const &requesterName,
74 std::string const &tag,
75 std::set<int> const &acceptorRanks,
76 int requesterRank) override
77 {
78 PRECICE_ASSERT(false, "Not implemented!");
79 }
80
82 void closeConnection() override;
83
84 void reduceSum(precice::span<double const> itemsToSend, precice::span<double> itemsToReceive, Rank primaryRank) override;
85
86 void reduceSum(precice::span<double const> itemsToSend, precice::span<double> itemsToReceive) override;
87
88 void reduceSum(int itemToSend, int &itemsToReceive, Rank primaryRank) override;
89
90 void reduceSum(int itemToSend, int &itemsToReceive) override;
91
92 void allreduceSum(precice::span<double const> itemsToSend, precice::span<double> itemsToReceive, Rank primaryRank) override;
93
94 void allreduceSum(precice::span<double const> itemsToSend, precice::span<double> itemsToReceive) override;
95
96 void allreduceSum(double itemToSend, double &itemsToReceive, Rank primaryRank) override;
97
98 void allreduceSum(double itemToSend, double &itemsToReceive) override;
99
100 void allreduceSum(int itemToSend, int &itemsToReceive, Rank primaryRank) override;
101
102 void allreduceSum(int itemToSend, int &itemsToReceive) override;
103
104 void broadcast(precice::span<const int> itemsToSend) override;
105
106 void broadcast(precice::span<int> itemsToReceive, Rank rankBroadcaster) override;
107
108 void broadcast(int itemToSend) override;
109
110 void broadcast(int &itemToReceive, Rank rankBroadcaster) override;
111
112 void broadcast(precice::span<const double> itemsToSend) override;
113
114 void broadcast(precice::span<double> itemsToReceive, Rank rankBroadcaster) override;
115
116 void broadcast(double itemToSend) override;
117
118 void broadcast(double &itemToReceive, Rank rankBroadcaster) override;
119
120 void broadcast(bool itemToSend) override;
121
122 void broadcast(bool &itemToReceive, Rank rankBroadcaster) override;
123
124private:
125 MPI_Comm &communicator(Rank rank = 0) override;
126
127 Rank rank(int rank) override;
128
129 logging::Logger _log{"com::MPIDirectCommunication"};
130
133
134protected:
136 int adjustRank(Rank rank) const override;
137};
138
139} // namespace precice::com
140
141#endif // not PRECICE_NO_MPI
std::nullptr_t MPI_Comm
Definition MPI_Mock.hpp:9
#define PRECICE_ASSERT(...)
Definition assertion.hpp:85
void acceptConnection(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int acceptorRank, int rankOffset=0) override
void requestConnectionAsClient(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, std::set< int > const &acceptorRanks, int requesterRank) override
Connects to another communicator, which has to call acceptConnectionAsServer().
void requestConnection(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int requesterRank, int requesterCommunicatorSize) override
size_t getRemoteCommunicatorSize() override
Returns the number of processes in the remote communicator.
void broadcast(precice::span< const int > itemsToSend) override
int adjustRank(Rank rank) const override
Turn the rank adjustment into a noop for direct communication.
utils::Parallel::CommStatePtr _commState
CommState to use.
void closeConnection() override
See precice::com::Communication::closeConnection().
void allreduceSum(precice::span< double const > itemsToSend, precice::span< double > itemsToReceive, Rank primaryRank) override
MPI_Comm & communicator(Rank rank=0) override
Returns the communicator.
void reduceSum(precice::span< double const > itemsToSend, precice::span< double > itemsToReceive, Rank primaryRank) override
Performs a reduce summation on the rank given by primaryRank.
void acceptConnectionAsServer(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int acceptorRank, int requesterCommunicatorSize) override
Accepts connection from another communicator, which has to call requestConnectionAsClient().
This class provides a lightweight logger.
Definition Logger.hpp:17
A C++ 11 implementation of the non-owning C++20 std::span type.
Definition span.hpp:284
std::shared_ptr< CommState > CommStatePtr
Definition Parallel.hpp:35
contains the data communication abstraction layer.
int Rank
Definition Types.hpp:37