33 #ifdef DEAL_II_WITH_MPI 38 template <
int dim,
int spacedim>
40 MPI_Comm mpi_communicator,
41 const typename ::Triangulation<dim, spacedim>::MeshSmoothing
43 const bool allow_artificial_cells,
49 , allow_artificial_cells(allow_artificial_cells)
51 const auto partition_settings =
55 (void)partition_settings;
61 ExcMessage(
"Settings must contain exactly one type of the active " 62 "cell partitioning scheme."));
65 Assert(allow_artificial_cells,
66 ExcMessage(
"construct_multigrid_hierarchy requires " 67 "allow_artificial_cells to be set to true."));
72 template <
int dim,
int spacedim>
81 template <
int dim,
int spacedim>
88 const unsigned int max_active_cells =
93 "A parallel::shared::Triangulation needs to be refined in the same " 94 "way on all processors, but the participating processors don't " 95 "agree on the number of active cells."));
102 # ifdef DEAL_II_TRILINOS_WITH_ZOLTAN 104 # elif defined DEAL_II_WITH_METIS 112 # ifndef DEAL_II_TRILINOS_WITH_ZOLTAN 115 "Choosing 'partition_zoltan' requires the library " 116 "to be compiled with support for Zoltan! " 117 "Instead, you might use 'partition_auto' to select " 118 "a partitioning algorithm that is supported " 119 "by your current configuration."));
127 # ifndef DEAL_II_WITH_METIS 130 "Choosing 'partition_metis' requires the library " 131 "to be compiled with support for METIS! " 132 "Instead, you might use 'partition_auto' to select " 133 "a partitioning algorithm that is supported " 134 "by your current configuration."));
180 active_halo_layer_vector =
183 std::set<typename parallel::shared::Triangulation<dim, spacedim>::
184 active_cell_iterator>
185 active_halo_layer(active_halo_layer_vector.begin(),
186 active_halo_layer_vector.end());
188 for (
unsigned int index = 0; cell != endc; cell++, index++)
193 if (cell->is_locally_owned() ==
false &&
194 active_halo_layer.find(cell) == active_halo_layer.end())
199 if (
settings & construct_multigrid_hierarchy)
207 for (
unsigned int lvl = 0; lvl < this->
n_levels(); ++lvl)
215 level_halo_layer_vector =
217 *
this, predicate, lvl);
220 level_halo_layer(level_halo_layer_vector.begin(),
221 level_halo_layer_vector.end());
224 cell_iterator cell = this->
begin(lvl),
225 endc = this->
end(lvl);
226 for (
unsigned int index = 0; cell != endc; cell++, index++)
231 cell->level_subdomain_id();
240 if (cell->is_active() &&
241 cell->subdomain_id() !=
246 if (cell->has_children())
248 bool keep_cell =
false;
249 for (
unsigned int c = 0;
250 c < GeometryInfo<dim>::max_children_per_cell;
252 if (cell->child(c)->level_subdomain_id() ==
264 if (!cell->is_locally_owned_on_level() &&
265 level_halo_layer.find(cell) != level_halo_layer.end())
269 cell->set_level_subdomain_id(
278 for (
unsigned int index = 0; cell != endc; cell++, index++)
285 unsigned int n_my_cells = 0;
290 for (; cell != endc; ++cell)
291 if (cell->is_locally_owned())
294 const unsigned int total_cells =
297 ExcMessage(
"Not all cells are assigned to a processor."));
302 if (
settings & construct_multigrid_hierarchy)
304 unsigned int n_my_cells = 0;
306 cell = this->
begin(),
308 for (; cell != endc; ++cell)
309 if (cell->is_locally_owned_on_level())
312 const unsigned int total_cells =
315 ExcMessage(
"Not all cells are assigned to a processor."));
322 template <
int dim,
int spacedim>
331 template <
int dim,
int spacedim>
332 const std::vector<types::subdomain_id> &
340 template <
int dim,
int spacedim>
341 const std::vector<types::subdomain_id> &
343 const unsigned int level)
const 355 template <
int dim,
int spacedim>
366 template <
int dim,
int spacedim>
379 const typename ::Triangulation<dim, spacedim>::DistortedCellList
392 template <
int dim,
int spacedim>
398 (void)construction_data;
405 template <
int dim,
int spacedim>
408 const ::Triangulation<dim, spacedim> &other_tria)
412 const ::parallel::distributed::Triangulation<dim, spacedim> *
>(
413 &other_tria) ==
nullptr),
415 "Cannot use this function on parallel::distributed::Triangulation."));
431 template <
int dim,
int spacedim>
439 template <
int dim,
int spacedim>
446 template <
int dim,
int spacedim>
447 const std::vector<unsigned int> &
456 template <
int dim,
int spacedim>
457 const std::vector<unsigned int> &
459 const unsigned int)
const 472 #include "shared_tria.inst" unsigned int n_active_cells() const
std::vector< std::vector< types::subdomain_id > > true_level_subdomain_ids_of_cells
virtual void copy_triangulation(const ::Triangulation< dim, spacedim > &old_tria) override
unsigned int n_cells() const
virtual bool is_multilevel_hierarchy_constructed() const override
std::vector< Point< spacedim > > vertices
const std::vector< types::subdomain_id > & get_true_subdomain_ids_of_cells() const
Triangulation(MPI_Comm mpi_communicator, const typename ::Triangulation< dim, spacedim >::MeshSmoothing=(::Triangulation< dim, spacedim >::none), const bool allow_artificial_cells=false, const Settings settings=partition_auto)
active_cell_iterator begin_active(const unsigned int level=0) const
virtual void execute_coarsening_and_refinement() override
#define AssertThrow(cond, exc)
const std::vector< types::subdomain_id > & get_true_level_subdomain_ids_of_cells(const unsigned int level) const
cell_iterator begin(const unsigned int level=0) const
unsigned int n_levels() const
typename ::Triangulation< dim, spacedim >::cell_iterator cell_iterator
cell_iterator end() const
virtual void execute_coarsening_and_refinement()
static ::ExceptionBase & ExcMessage(std::string arg1)
T sum(const T &t, const MPI_Comm &mpi_communicator)
virtual void create_triangulation(const std::vector< Point< spacedim >> &vertices, const std::vector< CellData< dim >> &cells, const SubCellData &subcelldata)
#define Assert(cond, exc)
const bool allow_artificial_cells
#define DEAL_II_NAMESPACE_CLOSE
virtual const MPI_Comm & get_communicator() const
const types::subdomain_id artificial_subdomain_id
__global__ void set(Number *val, const Number s, const size_type N)
virtual void update_number_cache()
std::vector< types::subdomain_id > true_subdomain_ids_of_cells
typename ::Triangulation< dim, spacedim >::active_cell_iterator active_cell_iterator
#define DEAL_II_NAMESPACE_OPEN
virtual void create_triangulation(const std::vector< Point< spacedim >> &vertices, const std::vector< CellData< dim >> &cells, const SubCellData &subcelldata) override
bool with_artificial_cells() const
static ::ExceptionBase & ExcNotImplemented()
types::subdomain_id my_subdomain
virtual void copy_triangulation(const ::Triangulation< dim, spacedim > &other_tria) override
T max(const T &t, const MPI_Comm &mpi_communicator)
types::subdomain_id n_subdomains
static ::ExceptionBase & ExcInternalError()