include/meltpooldg/utilities/triangulation_utils.hpp Source File

Developer Documentation: include/meltpooldg/utilities/triangulation_utils.hpp Source File
Developer Documentation
triangulation_utils.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/mpi.h>
4
5#include <deal.II/distributed/tria.h>
6
7#include <deal.II/grid/cell_id.h>
8#include <deal.II/grid/tria.h>
9#include <deal.II/grid/tria_accessor.h>
10
11#include <map>
12#include <set>
13#include <utility>
14#include <vector>
15
16namespace MeltPoolDG
17{
25
26 template <int dim, int spacedim = dim>
28 get_triangulation_type(const dealii::Triangulation<dim, spacedim> &tria);
29
41 template <int dim>
43 {
44 using tria_iterator = dealii::TriaIterator<dealii::CellAccessor<dim>>;
45
46 public:
53 void
54 build_cache(const dealii::Triangulation<dim> &tria, const unsigned int level);
55
65 const std::set<dealii::TriaIterator<dealii::CellAccessor<dim>>> &
66 get_adjacent_cells(const tria_iterator &cell) const;
67
71 unsigned int
73
74 private:
76 unsigned int n_global_level_cells = 0;
77
80 std::map<tria_iterator, std::set<tria_iterator>> adjacent_cells_cache;
81
84 bool is_cache_built = false;
85
87 unsigned int cache_level = 0;
88
93 void
94 assert_cache_built() const;
95
103 void
104 cache_adjacent_cells(const dealii::Triangulation<dim> &tria, const unsigned int level);
105
112 void
113 compute_global_cell_count(const dealii::Triangulation<dim> &tria, const unsigned int level);
114 };
115
116
157 template <int dim>
159 {
160 public:
161 LevelCommunicationPattern(const dealii::Triangulation<dim> &tria);
162
172 void
173 build_pattern(const unsigned int level);
174
179 std::map<unsigned int, std::vector<dealii::CellId>>
180 cells_to_send() const;
181
186 std::map<unsigned int, std::vector<dealii::CellId>>
187 cells_to_receive() const;
188
192 unsigned
194 {
195 return rank_to_cells_send.size();
196 }
197
201 unsigned
203 {
204 return rank_to_cells_receive.size();
205 }
206
210 unsigned int
211 n_send_ranks() const;
212
216 unsigned int
217 n_receive_ranks() const;
218
222 std::vector<unsigned int>
223 send_ranks() const;
224
228 std::vector<unsigned int>
229 receive_ranks() const;
230
231 private:
242 std::vector<dealii::CellId>
244
254 std::vector<std::pair<unsigned, std::vector<dealii::CellId>>>
255 gather_ancestors(const std::vector<dealii::CellId> &local_ancestor_cells) const;
256
270 std::vector<dealii::CellId>
271 adjacent_relevant_cells(const dealii::CellId &cell_id,
272 const std::vector<dealii::CellId> &owned_active_cell_ancestors,
273 const LevelAdjacentCellsCache<dim> &adjacent_cells_cache) const;
274
288 std::vector<std::pair<unsigned, std::vector<dealii::CellId>>>
290 const std::vector<std::pair<unsigned, std::vector<dealii::CellId>>> &requested_cells_by_rank,
291 const std::vector<dealii::CellId> &owned_active_cell_ancestors) const;
292
306 std::vector<std::pair<unsigned, std::vector<dealii::CellId>>>
308 const std::vector<std::pair<unsigned, std::vector<dealii::CellId>>> &cells_to_send) const;
309
313 void
315 const std::vector<std::pair<unsigned, std::vector<dealii::CellId>>> &data_to_receive,
316 const std::vector<std::pair<unsigned, std::vector<dealii::CellId>>> &data_to_send);
317
321 void
323
328 void
329 assert_pattern_built() const;
330
333 std::map<unsigned int, std::vector<dealii::CellId>> rank_to_cells_send;
334
337 std::map<unsigned int, std::vector<dealii::CellId>> rank_to_cells_receive;
338
340 const dealii::Triangulation<dim> &triangulation;
341
343 unsigned int partition_level = 0;
344
348 const MPI_Comm mpi_communicator;
349
351 // the build_pattern() function has been called.
352 bool is_pattern_built = false;
353 };
354} // namespace MeltPoolDG
Definition triangulation_utils.hpp:43
void build_cache(const dealii::Triangulation< dim > &tria, const unsigned int level)
Definition triangulation_utils.cpp:40
const std::set< dealii::TriaIterator< dealii::CellAccessor< dim > > > & get_adjacent_cells(const tria_iterator &cell) const
Definition triangulation_utils.cpp:51
void assert_cache_built() const
Definition triangulation_utils.cpp:78
unsigned int n_global_cells_on_level() const
Definition triangulation_utils.cpp:69
bool is_cache_built
Definition triangulation_utils.hpp:84
std::map< tria_iterator, std::set< tria_iterator > > adjacent_cells_cache
Definition triangulation_utils.hpp:80
dealii::TriaIterator< dealii::CellAccessor< dim > > tria_iterator
Definition triangulation_utils.hpp:44
void compute_global_cell_count(const dealii::Triangulation< dim > &tria, const unsigned int level)
Definition triangulation_utils.cpp:149
unsigned int n_global_level_cells
The total number of cells on the specified level across all MPI ranks.
Definition triangulation_utils.hpp:76
unsigned int cache_level
The level for which the adjacency cache has been built.
Definition triangulation_utils.hpp:87
void cache_adjacent_cells(const dealii::Triangulation< dim > &tria, const unsigned int level)
Definition triangulation_utils.cpp:88
Computes and stores the MPI communication pattern for a given level of a distributed triangulation.
Definition triangulation_utils.hpp:159
unsigned n_processes_to_send_to() const
Definition triangulation_utils.hpp:193
std::vector< dealii::CellId > owned_active_cells_ancestors() const
Definition triangulation_utils.cpp:258
std::vector< std::pair< unsigned, std::vector< dealii::CellId > > > relevant_cells_for_ranks(const std::vector< std::pair< unsigned, std::vector< dealii::CellId > > > &requested_cells_by_rank, const std::vector< dealii::CellId > &owned_active_cell_ancestors) const
Definition triangulation_utils.cpp:327
std::map< unsigned int, std::vector< dealii::CellId > > rank_to_cells_send
Definition triangulation_utils.hpp:333
std::map< unsigned int, std::vector< dealii::CellId > > cells_to_send() const
Definition triangulation_utils.cpp:198
std::map< unsigned int, std::vector< dealii::CellId > > rank_to_cells_receive
Definition triangulation_utils.hpp:337
unsigned int n_send_ranks() const
Definition triangulation_utils.cpp:214
std::vector< std::pair< unsigned, std::vector< dealii::CellId > > > exchange_relevant_cells(const std::vector< std::pair< unsigned, std::vector< dealii::CellId > > > &cells_to_send) const
Definition triangulation_utils.cpp:368
void build_pattern(const unsigned int level)
Definition triangulation_utils.cpp:170
bool is_pattern_built
A boolean indicating whether the communication pattern has been built, i.e., whether.
Definition triangulation_utils.hpp:352
const dealii::Triangulation< dim > & triangulation
Reference to the triangulation for which the communication pattern is built.
Definition triangulation_utils.hpp:340
std::vector< unsigned int > receive_ranks() const
Definition triangulation_utils.cpp:244
void build_communication_pattern()
Definition triangulation_utils.cpp:453
unsigned int n_receive_ranks() const
Definition triangulation_utils.cpp:222
unsigned int partition_level
The cell level on which the communication pattern is built.
Definition triangulation_utils.hpp:343
const MPI_Comm mpi_communicator
Definition triangulation_utils.hpp:348
std::vector< unsigned int > send_ranks() const
Definition triangulation_utils.cpp:230
unsigned n_processes_to_receive_from() const
Definition triangulation_utils.hpp:202
std::map< unsigned int, std::vector< dealii::CellId > > cells_to_receive() const
Definition triangulation_utils.cpp:206
std::vector< dealii::CellId > adjacent_relevant_cells(const dealii::CellId &cell_id, const std::vector< dealii::CellId > &owned_active_cell_ancestors, const LevelAdjacentCellsCache< dim > &adjacent_cells_cache) const
Definition triangulation_utils.cpp:296
std::vector< std::pair< unsigned, std::vector< dealii::CellId > > > gather_ancestors(const std::vector< dealii::CellId > &local_ancestor_cells) const
Definition triangulation_utils.cpp:282
void assert_pattern_built() const
Definition triangulation_utils.cpp:188
void store_rank_cell_maps(const std::vector< std::pair< unsigned, std::vector< dealii::CellId > > > &data_to_receive, const std::vector< std::pair< unsigned, std::vector< dealii::CellId > > > &data_to_send)
Definition triangulation_utils.cpp:428
Interface for a general preconditioner.
Definition boundary_condition_functions.hpp:17
TriangulationType get_triangulation_type(const dealii::Triangulation< dim, spacedim > &tria)
Definition triangulation_utils.cpp:23
TriangulationType
Definition triangulation_utils.hpp:19
@ parallel_fullydistributed
Definition triangulation_utils.hpp:22
@ shared
Definition triangulation_utils.hpp:20
@ serial
Definition triangulation_utils.hpp:23
@ parallel_distributed
Definition triangulation_utils.hpp:21