30 template <
int dim,
int spacedim>
40 namespace fullydistributed
42 template <
int dim,
int spacedim>
47 const unsigned
int n_partitions) {
57 template <
int dim,
int spacedim>
65 Assert(construction_data.
comm == this->mpi_communicator,
66 ExcMessage(
"MPI communicators do not match!"));
76 typename ::Triangulation<dim, spacedim>::MeshSmoothing
>(
82 typename ::Triangulation<dim, spacedim>::MeshSmoothing
>(
100 auto cell = this->
begin();
102 cell->set_level_subdomain_id(
119 std::map<types::coarse_cell_id, unsigned int>
121 for (
unsigned int i = 0;
124 coarse_cell_id_to_coarse_cell_index_vector
127 for (
auto i : coarse_cell_id_to_coarse_cell_index_vector)
128 this->coarse_cell_id_to_coarse_cell_index_vector.emplace_back(i);
141 auto cell_infos = construction_data.
cell_infos;
145 for (
auto &cell_info : cell_infos)
146 std::sort(cell_info.begin(),
153 const auto a_coarse_cell_index =
156 const auto b_coarse_cell_index =
165 if (a_coarse_cell_index != b_coarse_cell_index)
166 return a_coarse_cell_index < b_coarse_cell_index;
173 for (
auto cell = this->
begin(); cell != this->
end(); ++cell)
175 if (cell->is_active())
176 cell->set_subdomain_id(
179 cell->set_level_subdomain_id(
187 auto cell_info = cell_infos[
level].begin();
188 for (; cell_info != cell_infos[
level].end(); ++cell_info)
191 while (cell_info->id != cell->id().template to_binary<dim>())
195 if (cell->is_active())
196 cell->set_subdomain_id(cell_info->subdomain_id);
201 cell->set_level_subdomain_id(cell_info->level_subdomain_id);
211 template <
int dim,
int spacedim>
221 "Use the other create_triangulation() function to create triangulations of type parallel::fullydistributed::Triangulation.!"));
230 template <
int dim,
int spacedim>
233 const ::Triangulation<dim, spacedim> &other_tria)
239 const ::Triangulation<dim, spacedim> *other_tria_ptr = &other_tria;
246 std::unique_ptr<::Triangulation<dim, spacedim>> serial_tria;
250 if (
dynamic_cast<const ::parallel::TriangulationBase<dim, spacedim>
251 *
>(&other_tria) ==
nullptr)
254 std_cxx14::make_unique<::Triangulation<dim, spacedim>>();
257 serial_tria->copy_triangulation(other_tria);
269 other_tria_ptr = serial_tria.get();
284 template <
int dim,
int spacedim>
297 template <
int dim,
int spacedim>
306 template <
int dim,
int spacedim>
312 ExcMessage(
"No coarsening and refinement is supported!"));
314 return ::Triangulation<dim, spacedim>::
315 prepare_coarsening_and_refinement();
320 template <
int dim,
int spacedim>
330 template <
int dim,
int spacedim>
334 const std::size_t mem =
346 template <
int dim,
int spacedim>
357 template <
int dim,
int spacedim>
366 [](
const std::pair<types::coarse_cell_id, unsigned int> &pair,
368 Assert(coarse_cell_index !=
371 return coarse_cell_index->second;
376 template <
int dim,
int spacedim>
379 const unsigned int coarse_cell_index)
const 387 ExcMessage(
"You are trying to access a dummy cell!"));
399 #include "fully_distributed_tria.inst" Iterator lower_bound(Iterator first, Iterator last, const T &val)
virtual void execute_coarsening_and_refinement() override
const types::coarse_cell_id invalid_coarse_cell_id
types::coarse_cell_id get_coarse_cell_id() const
void set_partitioner(const std::function< void(::Triangulation< dim, spacedim > &, const unsigned int)> &partitioner, const TriangulationDescription::Settings &settings)
MPI_Comm mpi_communicator
std::vector< Point< spacedim > > vertices
virtual bool prepare_coarsening_and_refinement() override
#define AssertIndexRange(index, range)
std::vector< types::coarse_cell_id > coarse_cell_index_to_coarse_cell_id
virtual bool is_multilevel_hierarchy_constructed() const override
#define AssertThrow(cond, exc)
std::function< void(::Triangulation< dim, spacedim > &, const unsigned int)> partitioner
cell_iterator begin(const unsigned int level=0) const
std::vector< types::coarse_cell_id > coarse_cell_index_to_coarse_cell_id_vector
Triangulation< dim, spacedim >::MeshSmoothing smoothing
cell_iterator end() const
void copy_triangulation(const ::Triangulation< dim, spacedim > &other_tria) override
bool currently_processing_prepare_coarsening_and_refinement_for_internal_usage
virtual std::size_t memory_consumption() const override
static ::ExceptionBase & ExcMessage(std::string arg1)
Triangulation(const MeshSmoothing smooth_grid=none, const bool check_for_distorted_cells=false)
virtual std::size_t memory_consumption() const override
Description< dim, spacedim > create_description_from_triangulation(const ::Triangulation< dim, spacedim > &tria, const MPI_Comm comm, const TriangulationDescription::Settings settings=TriangulationDescription::Settings::default_setting, const unsigned int my_rank_in=numbers::invalid_unsigned_int)
virtual void create_triangulation(const std::vector< Point< spacedim >> &vertices, const std::vector< CellData< dim >> &cells, const SubCellData &subcelldata)
#define Assert(cond, exc)
virtual types::coarse_cell_id coarse_cell_index_to_coarse_cell_id(const unsigned int coarse_cell_index) const override
#define DEAL_II_NAMESPACE_CLOSE
virtual void set_mesh_smoothing(const MeshSmoothing mesh_smoothing)
std::vector< std::pair< types::coarse_cell_id, unsigned int > > coarse_cell_id_to_coarse_cell_index_vector
void create_triangulation(const TriangulationDescription::Description< dim, spacedim > &construction_data) override
unsigned int n_mpi_processes(const MPI_Comm &mpi_communicator)
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
virtual bool has_hanging_nodes() const override
const types::subdomain_id artificial_subdomain_id
virtual void update_number_cache()
std::vector< std::vector< CellData< dim > > > cell_infos
#define DEAL_II_NAMESPACE_OPEN
bool currently_processing_create_triangulation_for_internal_usage
void hyper_cube(Triangulation< dim, spacedim > &tria, const double left=0., const double right=1., const bool colorize=false)
static ::ExceptionBase & ExcNotImplemented()
virtual unsigned int coarse_cell_id_to_coarse_cell_index(const types::coarse_cell_id coarse_cell_id) const override
global_cell_index coarse_cell_id
TriangulationDescription::Settings settings
std::vector< Point< spacedim > > coarse_cell_vertices
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)