Reference documentation for deal.II version GIT 49863513f1 2023-10-02 19:40:02+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
shared_tria.h
Go to the documentation of this file.
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2008 - 2023 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_distributed_shared_tria_h
17 #define dealii_distributed_shared_tria_h
18 
19 
20 #include <deal.II/base/config.h>
21 
22 #include <deal.II/base/mpi_stub.h>
26 
28 
29 #include <deal.II/grid/tria.h>
30 
31 #include <functional>
32 #include <list>
33 #include <utility>
34 #include <vector>
35 
37 
38 namespace parallel
39 {
40 #ifdef DEAL_II_WITH_MPI
41 
42 
43  namespace shared
44  {
107  template <int dim, int spacedim = dim>
108  DEAL_II_CXX20_REQUIRES((concepts::is_valid_dim_spacedim<dim, spacedim>))
110  : public ::parallel::TriangulationBase<dim, spacedim>
111  {
112  public:
114  typename ::Triangulation<dim, spacedim>::active_cell_iterator;
116  typename ::Triangulation<dim, spacedim>::cell_iterator;
117 
131  enum Settings
132  {
142  partition_auto = 0x0,
143 
147  partition_metis = 0x1,
148 
166  partition_zorder = 0x2,
167 
171  partition_zoltan = 0x3,
172 
222  partition_custom_signal = 0x4,
223 
233  };
234 
235 
260  const MPI_Comm mpi_communicator,
261  const typename ::Triangulation<dim, spacedim>::MeshSmoothing =
263  const bool allow_artificial_cells = false,
264  const Settings settings = partition_auto);
265 
269  virtual ~Triangulation() override = default;
270 
274  virtual bool
275  is_multilevel_hierarchy_constructed() const override;
276 
285  virtual void
286  execute_coarsening_and_refinement() override;
287 
294  virtual void
295  create_triangulation(const std::vector<Point<spacedim>> &vertices,
296  const std::vector<CellData<dim>> &cells,
297  const SubCellData &subcelldata) override;
298 
304  virtual void
307  &construction_data) override;
308 
319  virtual void
320  copy_triangulation(
321  const ::Triangulation<dim, spacedim> &other_tria) override;
322 
331 
338 
347  template <class Archive>
348  void
349  load(Archive &ar, const unsigned int version);
350 
359  const std::vector<types::subdomain_id> &
360  get_true_subdomain_ids_of_cells() const;
361 
370  const std::vector<types::subdomain_id> &
371  get_true_level_subdomain_ids_of_cells(const unsigned int level) const;
372 
377  bool
378  with_artificial_cells() const;
379 
380  private:
385 
390 
395  void
396  partition();
397 
410  std::vector<types::subdomain_id> true_subdomain_ids_of_cells;
411 
420  std::vector<std::vector<types::subdomain_id>>
422  };
423 
424 
425 
426  template <int dim, int spacedim>
427  DEAL_II_CXX20_REQUIRES((concepts::is_valid_dim_spacedim<dim, spacedim>))
428  template <class Archive>
430  const unsigned int version)
431  {
433  partition();
434  this->update_number_cache();
435  }
436  } // namespace shared
437 #else
438 
439  namespace shared
440  {
454  template <int dim, int spacedim = dim>
455  DEAL_II_CXX20_REQUIRES((concepts::is_valid_dim_spacedim<dim, spacedim>))
456  class Triangulation
457  : public ::parallel::TriangulationBase<dim, spacedim>
458  {
459  public:
464  Triangulation() = delete;
465 
469  virtual bool
470  is_multilevel_hierarchy_constructed() const override;
471 
475  const std::vector<types::subdomain_id> &
477 
481  const std::vector<types::subdomain_id> &
482  get_true_level_subdomain_ids_of_cells(const unsigned int level) const;
483 
487  bool
488  with_artificial_cells() const;
489 
490  private:
494  std::vector<types::subdomain_id> true_subdomain_ids_of_cells;
495 
499  std::vector<types::subdomain_id> true_level_subdomain_ids_of_cells;
500  };
501  } // namespace shared
502 
503 
504 #endif
505 } // namespace parallel
506 
507 
508 namespace internal
509 {
510  namespace parallel
511  {
512  namespace shared
513  {
533  template <int dim, int spacedim = dim>
535  {
536  public:
547 
555 
556  private:
560  const SmartPointer<
561  const ::parallel::shared::Triangulation<dim, spacedim>>
563 
569  std::vector<unsigned int> saved_subdomain_ids;
570  };
571  } // namespace shared
572  } // namespace parallel
573 } // namespace internal
574 
576 
577 #endif
void load(Archive &ar, const unsigned int version)
const SmartPointer< const ::parallel::shared::Triangulation< dim, spacedim > > shared_tria
Definition: shared_tria.h:562
TemporarilyRestoreSubdomainIds(const Triangulation< dim, spacedim > &tria)
Definition: shared_tria.cc:549
std::vector< types::subdomain_id > true_subdomain_ids_of_cells
Definition: shared_tria.h:410
typename ::Triangulation< dim, spacedim >::active_cell_iterator active_cell_iterator
Definition: shared_tria.h:114
const std::vector< types::subdomain_id > & get_true_subdomain_ids_of_cells() const
Definition: shared_tria.cc:334
std::vector< std::vector< types::subdomain_id > > true_level_subdomain_ids_of_cells
Definition: shared_tria.h:421
typename ::Triangulation< dim, spacedim >::cell_iterator cell_iterator
Definition: shared_tria.h:116
const std::vector< types::subdomain_id > & get_true_level_subdomain_ids_of_cells(const unsigned int level) const
Definition: shared_tria.cc:344
virtual ~Triangulation() override=default
Triangulation(const 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)
Definition: shared_tria.cc:43
virtual bool is_multilevel_hierarchy_constructed() const override
Definition: shared_tria.cc:78
void load(Archive &ar, const unsigned int version)
Definition: shared_tria.h:429
#define DEAL_II_NAMESPACE_OPEN
Definition: config.h:477
#define DEAL_II_CXX20_REQUIRES(condition)
Definition: config.h:166
#define DEAL_II_NAMESPACE_CLOSE
Definition: config.h:478
Point< 3 > vertices[4]
unsigned int level
Definition: grid_out.cc:4617
void create_triangulation(Triangulation< dim, dim > &tria, const AdditionalData &additional_data=AdditionalData())
void partition(const SparsityPattern &sparsity_pattern, const unsigned int n_partitions, std::vector< unsigned int > &partition_indices, const Partitioner partitioner=Partitioner::metis)
const TriangulationDescription::Settings settings
const ::Triangulation< dim, spacedim > & tria