preCICE v3.2.0
Loading...
Searching...
No Matches
MPICommunication.hpp
Go to the documentation of this file.
1#ifndef PRECICE_NO_MPI
2
3#pragma once
4
5#include <mpi.h>
6#include <string>
7
10#include "logging/Logger.hpp"
12
13namespace precice::com {
21public:
23
25 ~MPICommunication() override = default;
26
32 void send(std::string const &itemToSend, Rank rankReceiver) override;
33
35 void send(precice::span<const int> itemsToSend, Rank rankReceiver) override;
36
38 PtrRequest aSend(precice::span<const int> itemsToSend, Rank rankReceiver) override;
39
41 void send(precice::span<const double> itemsToSend, Rank rankReceiver) override;
42
44 PtrRequest aSend(precice::span<const double> itemsToSend, Rank rankReceiver) override;
45
51 void send(double itemToSend, Rank rankReceiver) override;
52
54 PtrRequest aSend(const double &itemToSend, Rank rankReceiver) override;
55
61 void send(int itemToSend, Rank rankReceiver) override;
62
64 PtrRequest aSend(const int &itemToSend, Rank rankReceiver) override;
65
71 void send(bool itemToSend, Rank rankReceiver) override;
72
74 PtrRequest aSend(const bool &itemToSend, Rank rankReceiver) override;
75
81 void receive(std::string &itemToReceive, Rank rankSender) override;
82
84 void receive(precice::span<int> itemsToReceive, Rank rankSender) override;
85
87 void receive(precice::span<double> itemsToReceive, Rank rankSender) override;
88
90 PtrRequest aReceive(precice::span<double> itemsToReceive, int rankSender) override;
91
97 void receive(double &itemToReceive, Rank rankSender) override;
98
100 PtrRequest aReceive(double &itemToReceive, Rank rankSender) override;
101
107 void receive(int &itemToReceive, Rank rankSender) override;
108
110 PtrRequest aReceive(int &itemToReceive, Rank rankSender) override;
111
117 void receive(bool &itemToReceive, Rank rankSender) override;
118
120 PtrRequest aReceive(bool &itemToReceive, Rank rankSender) override;
121
122protected:
125
126 virtual Rank rank(int rank) = 0;
127
128private:
129 logging::Logger _log{"com::MPICommunication"};
130};
131} // namespace precice::com
132
133#endif // not PRECICE_NO_MPI
std::nullptr_t MPI_Comm
Definition MPI_Mock.hpp:9
Interface for all interprocess communication classes.
void receive(std::string &itemToReceive, Rank rankSender) override
Receives a std::string from process with given rank.
PtrRequest aReceive(precice::span< double > itemsToReceive, int rankSender) override
Asynchronously receives an array of double values.
virtual MPI_Comm & communicator(Rank rank)=0
Returns the communicator.
PtrRequest aSend(precice::span< const int > itemsToSend, Rank rankReceiver) override
Asynchronously sends an array of integer values.
void send(std::string const &itemToSend, Rank rankReceiver) override
Sends a std::string to process with given rank.
~MPICommunication() override=default
Destructor, empty.
virtual Rank rank(int rank)=0
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
contains the data communication abstraction layer.
std::shared_ptr< Request > PtrRequest
int Rank
Definition Types.hpp:37