preCICE v3.2.0
Loading...
Searching...
No Matches
MPIPortsCommunication.hpp
Go to the documentation of this file.
1#pragma once
2#ifndef PRECICE_NO_MPI
3
4#include <map>
5#include <mpi.h>
6#include <set>
7#include <stddef.h>
8#include <string>
9
11#include "logging/Logger.hpp"
13
14namespace precice::com {
22public:
23 explicit MPIPortsCommunication(std::string addressDirectory = ".");
24
25 ~MPIPortsCommunication() override;
26
27 size_t getRemoteCommunicatorSize() override;
28
29 void acceptConnection(std::string const &acceptorName,
30 std::string const &requesterName,
31 std::string const &tag,
32 int acceptorRank,
33 int rankOffset = 0) override;
34
35 void acceptConnectionAsServer(std::string const &acceptorName,
36 std::string const &requesterName,
37 std::string const &tag,
38 int acceptorRank,
39 int requesterCommunicatorSize) override;
40
41 void requestConnection(std::string const &acceptorName,
42 std::string const &requesterName,
43 std::string const &tag,
44 int requesterRank,
45 int requesterCommunicatorSize) override;
46
47 void requestConnectionAsClient(std::string const &acceptorName,
48 std::string const &requesterName,
49 std::string const &tag,
50 std::set<int> const &acceptorRanks,
51 int requesterRank) override;
52
53 void closeConnection() override;
54
55 void prepareEstablishment(std::string const &acceptorName,
56 std::string const &requesterName) override;
57
58 void cleanupEstablishment(std::string const &acceptorName,
59 std::string const &requesterName) override;
60
61private:
62 MPI_Comm &communicator(Rank rank) override;
63
64 Rank rank(int rank) override;
65
66 logging::Logger _log{"com::MPIPortsCommunication"};
67
69
72
74 std::string _portName = std::string(MPI_MAX_PORT_NAME, '\0');
75
76 bool _isAcceptor = false;
77};
78} // namespace precice::com
79
80#endif // not PRECICE_NO_MPI
std::nullptr_t MPI_Comm
Definition MPI_Mock.hpp:9
void closeConnection() override
Disconnects from communication space, i.e. participant.
void acceptConnection(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int acceptorRank, int rankOffset=0) override
Accepts connection from another communicator, which has to call requestConnection().
void prepareEstablishment(std::string const &acceptorName, std::string const &requesterName) override
Prepare environment used to establish the communication.
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().
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 cleanupEstablishment(std::string const &acceptorName, std::string const &requesterName) override
Clean-up environment used to establish the communication.
std::map< int, MPI_Comm > _communicators
Remote rank -> communicator map.
MPIPortsCommunication(std::string addressDirectory=".")
std::string _portName
Name of the port used for connection.
MPI_Comm & communicator(Rank rank) override
Returns the communicator.
size_t getRemoteCommunicatorSize() override
Returns the number of processes in the remote communicator.
void requestConnection(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int requesterRank, int requesterCommunicatorSize) override
Connects to another communicator, which has to call acceptConnection().
This class provides a lightweight logger.
Definition Logger.hpp:17
contains the data communication abstraction layer.
int Rank
Definition Types.hpp:37