BioCMAMC-ST
iteration_payload.hpp
1#ifndef __ITERATION_PAYLOAD_HPP__
2#define __ITERATION_PAYLOAD_HPP__
3
4#include "cma_read/reactorstate.hpp"
5#include <cma_read/flow_iterator.hpp>
6#include <cma_read/neighbors.hpp>
7#include <mpi.h>
8#include <span>
9#include <vector>
10
11namespace WrapMPI
12{
21 {
22 public:
24 std::vector<double> liquid_flows;
25
27 std::vector<double> liquid_volumes;
28
30 std::vector<double> gas_volumes;
31
33 std::vector<size_t> raw_neighbors;
34
36 CmaRead::Neighbors::Neighbors_const_view_t neighbors;
37
45 explicit IterationPayload(size_t size_flows, size_t volumes);
46
60 bool recv(size_t source, MPI_Status* status) noexcept;
61 };
62
70 {
71 public:
73 std::span<const double> liquid_flows;
75 std::span<const double> liquid_volumes;
77 std::span<const double> gas_volumes;
79 CmaRead::Neighbors::Neighbors_const_view_t neighbors;
80
81 void fill(const CmaRead::ReactorState& current_reactor_state);
82
83 [[nodiscard]] bool sendAll(std::size_t n_rank) noexcept;
84 private:
96 [[nodiscard]] bool send(size_t rank) noexcept;
97
98 static constexpr std::size_t n_vector_send = 4;
99 std::array<MPI_Request,n_vector_send> requests;
100 };
101
102} // namespace WrapMPI
103
104#endif //__ITERATION_PAYLOAD_HPP__
Represents the payload of data on the host side for an iteration.
Definition iteration_payload.hpp:70
std::array< MPI_Request, n_vector_send > requests
Definition iteration_payload.hpp:99
std::span< const double > gas_volumes
View gas flow values to be sent for the current iteration.
Definition iteration_payload.hpp:77
bool send(size_t rank) noexcept
Sends this payload to a specified MPI rank.
Definition iteration_payload.cpp:43
std::span< const double > liquid_flows
View liquid flow values to be sent for the current iteration.
Definition iteration_payload.hpp:73
CmaRead::Neighbors::Neighbors_const_view_t neighbors
View neighbors values to be sent for the current iteration.
Definition iteration_payload.hpp:79
void fill(const CmaRead::ReactorState &current_reactor_state)
Definition iteration_payload.cpp:76
std::span< const double > liquid_volumes
View liquid volmes values to be sent for the current iteration.
Definition iteration_payload.hpp:75
bool sendAll(std::size_t n_rank) noexcept
Definition iteration_payload.cpp:17
static constexpr std::size_t n_vector_send
Definition iteration_payload.hpp:98
Represents the payload of data exchanged during an iteration.
Definition iteration_payload.hpp:21
bool recv(size_t source, MPI_Status *status) noexcept
Receives data for this payload from a specified source.
Definition iteration_payload.cpp:57
IterationPayload(size_t size_flows, size_t volumes)
Constructs an IterationPayload with specified sizes for flows and volumes.
Definition iteration_payload.cpp:10
std::vector< double > liquid_flows
Vector containing liquid flow values for the current iteration.
Definition iteration_payload.hpp:24
std::vector< double > gas_volumes
Vector containing gas volume values for the current iteration.
Definition iteration_payload.hpp:30
CmaRead::Neighbors::Neighbors_const_view_t neighbors
Constant view of neighbor data for the current iteration.
Definition iteration_payload.hpp:36
std::vector< size_t > raw_neighbors
Vector containing raw neighbor indices for the current iteration.
Definition iteration_payload.hpp:33
std::vector< double > liquid_volumes
Vector containing liquid volume values for the current iteration.
Definition iteration_payload.hpp:27
Namespace to correclty wrap MPI C API for modern C++.
Definition impl_async.hpp:19