ryujin 2.1.1 revision 955e869188d49b3c97ca7b1cf4fd9ceb0e6f46ef
mpi_ensemble.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2020 - 2024 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
10#include "convenience_macros.h"
11
12#include <deal.II/base/mpi.h>
13#include <deal.II/base/utilities.h>
14
15namespace ryujin
16{
28 class MPIEnsemble final
29 {
30 public:
42 MPIEnsemble(const MPI_Comm &mpi_communicator,
43 const int n_ensembles = 1,
44 const bool global_synchronization = true);
45
47
52
57
62
67
73
78
83
88
95
101 DEAL_II_ALWAYS_INLINE inline const MPI_Comm &
103 {
104 if (global_synchronization_)
105 return world_communicator_;
106 else
107 return ensemble_communicator_;
108 }
109
116
124
125 private:
126 const MPI_Comm &world_communicator_;
127
128 bool global_synchronization_;
129
130 int world_rank_;
131 int n_world_ranks_;
132 int ensemble_;
133 int n_ensembles_;
134 int ensemble_rank_;
135 int n_ensemble_ranks_;
136
137 MPI_Group world_group_;
138 std::vector<MPI_Group> ensemble_groups_;
139 MPI_Group ensemble_leader_group_;
140
141 MPI_Comm ensemble_communicator_;
142 MPI_Comm ensemble_leader_communicator_;
143 MPI_Comm peer_communicator_;
144 };
145} /* namespace ryujin */
const auto & n_world_ranks() const
Definition: mpi_ensemble.h:66
const auto & n_ensembles() const
Definition: mpi_ensemble.h:77
const auto & ensemble_communicator() const
Definition: mpi_ensemble.h:94
const auto & world_rank() const
Definition: mpi_ensemble.h:61
const auto & ensemble_leader_communicator() const
Definition: mpi_ensemble.h:115
const auto & world_communicator() const
Definition: mpi_ensemble.h:51
const auto & peer_communicator() const
Definition: mpi_ensemble.h:123
MPIEnsemble(const MPI_Comm &mpi_communicator, const int n_ensembles=1, const bool global_synchronization=true)
DEAL_II_ALWAYS_INLINE const MPI_Comm & synchronization_communicator() const
Definition: mpi_ensemble.h:102
const auto & ensemble_rank() const
Definition: mpi_ensemble.h:82
const auto & n_ensemble_ranks() const
Definition: mpi_ensemble.h:87
const auto & global_synchronization() const
Definition: mpi_ensemble.h:56
const auto & ensemble() const
Definition: mpi_ensemble.h:72
#define ACCESSOR_READ_ONLY(member)
#define ACCESSOR_READ_ONLY_NO_DEREFERENCE(member)