NeoN
A framework for CFD software
Loading...
Searching...
No Matches
fullDuplexCommBuffer.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2023 - 2025 NeoN authors
2//
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
7#include <vector>
8#include <string>
9
12#include "NeoN/core/view.hpp"
13
14namespace NeoN
15{
16
17#ifdef NF_WITH_MPI_SUPPORT
18
19namespace mpi
20{
21
30class FullDuplexCommBuffer
31{
32public:
33
37 FullDuplexCommBuffer() = default;
38
45 FullDuplexCommBuffer(
46 MPIEnvironment mpiEnviron,
47 std::vector<std::size_t> sendSize,
48 std::vector<std::size_t> receiveSize
49 )
50 : send_(mpiEnviron, sendSize), receive_(mpiEnviron, receiveSize) {};
51
56 inline bool isCommInit() const { return send_.isCommInit() && receive_.isCommInit(); }
57
63 template<typename valueType>
64 void initComm(std::string commName)
65 {
66 send_.initComm<valueType>(commName);
67 receive_.initComm<valueType>(commName);
68 }
69
76 template<typename valueType>
77 View<valueType> getSend(const size_t rank)
78 {
79 return send_.get<valueType>(rank);
80 }
81
88 template<typename valueType>
89 View<const valueType> getSend(const size_t rank) const
90 {
91 return send_.get<valueType>(rank);
92 }
93
100 template<typename valueType>
101 View<valueType> getReceive(const size_t rank)
102 {
103 return receive_.get<valueType>(rank);
104 }
105
112 template<typename valueType>
113 View<const valueType> getReceive(const size_t rank) const
114 {
115 return receive_.get<valueType>(rank);
116 }
117
121 inline void startComm()
122 {
123 send_.send();
124 receive_.receive();
125 }
126
131 inline bool isComplete() { return send_.isComplete() && receive_.isComplete(); }
132
136 inline void waitComplete()
137 {
138 send_.waitComplete();
139 receive_.waitComplete();
140 }
141
145 inline void finaliseComm()
146 {
147 send_.finaliseComm();
148 receive_.finaliseComm();
149 }
150
151private:
152
153 HalfDuplexCommBuffer send_;
154 HalfDuplexCommBuffer receive_;
155};
156
157} // namespace mpi
158
159#endif
160
161}
Definition array.hpp:20