deal.II version GIT relicensing-6809-ge913b9bb34 2026-09-25 17:20:01+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\}}\)
Loading...
Searching...
No Matches
tria.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 2010 - 2026 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_distributed_tria_h
14#define dealii_distributed_tria_h
15
16
17#include <deal.II/base/config.h>
18
23
26
27#include <deal.II/grid/tria.h>
28
29#include <boost/range/iterator_range.hpp>
30
31#include <functional>
32#include <list>
33#include <set>
34#include <type_traits>
35#include <utility>
36#include <vector>
37
38#ifdef DEAL_II_WITH_P4EST
39# include <p4est.h>
40# include <p4est_connectivity.h>
41# include <p4est_ghost.h>
42# include <p8est.h>
43# include <p8est_connectivity.h>
44# include <p8est_ghost.h>
45#endif
46
48
49// Forward declarations
50#ifndef DOXYGEN
51
52namespace FETools
53{
54 namespace internal
55 {
56 template <int, int, class>
57 class ExtrapolateImplementation;
58 }
59} // namespace FETools
60
61// forward declaration of the data type for periodic face pairs
62namespace GridTools
63{
64 template <typename CellIterator>
65 struct PeriodicFacePair;
66}
67
68namespace parallel
69{
70 namespace distributed
71 {
72 template <int, int>
73 class TemporarilyMatchRefineFlags;
74 }
75} // namespace parallel
76
77namespace internal
78{
79 namespace parallel
80 {
81 namespace distributed
82 {
83 namespace TriangulationImplementation
84 {
85 template <int dim, int spacedim>
86 void
89 }
90 } // namespace distributed
91 } // namespace parallel
92} // namespace internal
93#endif
94
95
96
97#ifdef DEAL_II_WITH_P4EST
98
99namespace parallel
100{
101 namespace distributed
102 {
298 template <int dim, int spacedim = dim>
301 : public ::parallel::DistributedTriangulationBase<dim, spacedim>
302 {
303 public:
322 typename ::Triangulation<dim, spacedim>::cell_iterator;
323
343 typename ::Triangulation<dim, spacedim>::active_cell_iterator;
344
350 {
354 default_setting = 0x0,
363 mesh_reconstruction_after_repartitioning = 0x1,
369 construct_multigrid_hierarchy = 0x2,
375 no_automatic_repartitioning = 0x4,
382 communicate_vertices_to_p4est = 0x8
383 };
384
385
386
418 explicit Triangulation(
419 const MPI_Comm mpi_communicator,
420 const typename ::Triangulation<dim, spacedim>::MeshSmoothing
422 const Settings settings = default_setting);
423
427 virtual ~Triangulation() override;
428
435 virtual void
436 clear() override;
437
441 bool
442 is_multilevel_hierarchy_constructed() const override;
443
447 bool
448 are_vertices_communicated_to_p4est() const;
449
463 void
464 execute_transfer(
465 const typename ::internal::p4est::types<dim>::forest
466 *parallel_forest,
467 const typename ::internal::p4est::types<dim>::gloidx
468 *previous_global_first_quadrant);
469
477 virtual void
478 copy_triangulation(
479 const ::Triangulation<dim, spacedim> &other_tria) override;
480
490 void
491 copy_triangulation(const ::Triangulation<dim, spacedim> &other_tria,
492 const Settings settings);
493
503 virtual void
504 create_triangulation(const std::vector<Point<spacedim>> &vertices,
505 const std::vector<CellData<dim>> &cells,
506 const SubCellData &subcelldata) override;
507
513 virtual void
514 create_triangulation(
516 &construction_data) override;
517
527 find_point_owner_rank(const Point<dim> &p);
528
545 std::vector<types::subdomain_id>
546 find_point_owner_rank(const std::vector<Point<dim>> &points);
547
580 virtual void
581 execute_coarsening_and_refinement() override;
582
595 virtual bool
596 prepare_coarsening_and_refinement() override;
597
638 void
639 repartition();
640
644 virtual std::size_t
645 memory_consumption() const override;
646
652 virtual std::size_t
653 memory_consumption_p4est() const;
654
667 void
668 write_mesh_vtk(const std::string &file_basename) const;
669
674 unsigned int
675 get_checksum() const;
676
687 virtual void
688 save(const std::string &file_basename) const override;
689
709 virtual void
710 load(const std::string &file_basename) override;
711
717 void
718 load(const typename ::internal::p4est::types<dim>::forest *forest);
719
726 const std::vector<types::global_dof_index> &
727 get_p4est_tree_to_coarse_cell_permutation() const;
728
734 const std::vector<types::global_dof_index> &
735 get_coarse_cell_to_p4est_tree_permutation() const;
736
744 const typename ::internal::p4est::types<dim>::forest *
745 get_p4est() const;
746
766 virtual void
767 add_periodicity(
769 override;
770
771
772 private:
777
782
788 typename ::internal::p4est::types<dim>::connectivity *connectivity;
789
794 typename ::internal::p4est::types<dim>::forest *parallel_forest;
795
800 typename ::internal::p4est::types<dim>::ghost *parallel_ghost;
801
823 void
824 update_cell_relations();
825
839 std::vector<types::global_dof_index>
841 std::vector<types::global_dof_index>
843
848 typename ::internal::p4est::types<dim>::tree *
849 init_tree(const int dealii_coarse_cell_index) const;
850
855 void
856 setup_coarse_cell_to_p4est_tree_permutation();
857
864 void copy_new_triangulation_to_p4est(std::integral_constant<int, 2>);
865 void copy_new_triangulation_to_p4est(std::integral_constant<int, 3>);
866
871 void
872 copy_local_forest_to_triangulation();
873
887 std::vector<unsigned int>
888 get_cell_weights() const;
889
899 std::vector<bool>
900 mark_locally_active_vertices_on_level(const int level) const;
901
902 virtual unsigned int
903 coarse_cell_id_to_coarse_cell_index(
904 const types::coarse_cell_id coarse_cell_id) const override;
905
908 const unsigned int coarse_cell_index) const override;
909
910 template <int, int, class>
911 friend class ::FETools::internal::ExtrapolateImplementation;
912
913 template <int, int>
915 };
916
917
925 template <int spacedim>
927 class Triangulation<1, spacedim>
928 : public ::parallel::DistributedTriangulationBase<1, spacedim>
929 {
930 public:
935 {
936 default_setting = 0x0,
937 mesh_reconstruction_after_repartitioning = 0x1,
938 construct_multigrid_hierarchy = 0x2,
939 no_automatic_repartitioning = 0x4,
940 communicate_vertices_to_p4est = 0x8
941 };
942
948 const MPI_Comm mpi_communicator,
949 const typename ::Triangulation<1, spacedim>::MeshSmoothing
951 const Settings settings = default_setting);
952
956 virtual ~Triangulation() override;
957
964 const std::vector<types::global_dof_index> &
965 get_p4est_tree_to_coarse_cell_permutation() const;
966
971 virtual void
972 load(const std::string &filename) override;
973
978 virtual void
979 save(const std::string &filename) const override;
980
985 virtual bool
986 is_multilevel_hierarchy_constructed() const override;
987
992 bool
993 are_vertices_communicated_to_p4est() const;
994
999 void
1000 update_cell_relations();
1001
1006 std::vector<types::global_dof_index>
1008 std::vector<types::global_dof_index>
1010
1015 virtual std::map<unsigned int, std::set<::types::subdomain_id>>
1016 compute_level_vertices_with_ghost_neighbors(
1017 const unsigned int level) const;
1018
1023 virtual std::vector<bool>
1024 mark_locally_active_vertices_on_level(const unsigned int level) const;
1025
1026 virtual unsigned int
1027 coarse_cell_id_to_coarse_cell_index(
1028 const types::coarse_cell_id coarse_cell_id) const override;
1029
1030 virtual types::coarse_cell_id
1032 const unsigned int coarse_cell_index) const override;
1033
1034 template <int, int>
1036 };
1037 } // namespace distributed
1038} // namespace parallel
1039
1040
1041#else // DEAL_II_WITH_P4EST
1042
1043namespace parallel
1044{
1045 namespace distributed
1046 {
1060 template <int dim, int spacedim = dim>
1062 class Triangulation
1063 : public ::parallel::DistributedTriangulationBase<dim, spacedim>
1064 {
1065 public:
1069 enum Settings
1070 {
1071 default_setting = 0x0,
1076 };
1077
1082 explicit Triangulation(
1083 const MPI_Comm /*mpi_communicator*/,
1084 const typename ::Triangulation<dim, spacedim>::MeshSmoothing
1085 /*smooth_grid*/
1087 const Settings /*settings*/ = default_setting) = delete;
1088
1093 virtual bool
1095 {
1096 return false;
1097 }
1098
1103 bool
1105 {
1106 return false;
1107 }
1108
1113 virtual void
1114 save(const std::string & /*filename*/) const override
1115 {}
1116
1121 virtual void
1122 load(const std::string & /*filename*/) override
1123 {}
1124
1129 void
1131 {}
1132 };
1133 } // namespace distributed
1134} // namespace parallel
1135
1136
1137#endif
1138
1139
1140
1141namespace parallel
1142{
1143 namespace distributed
1144 {
1162 template <int dim, int spacedim = dim>
1205 } // namespace distributed
1206} // namespace parallel
1207
1208
1210
1211#endif
Definition point.h:111
const ObserverPointer< ::parallel::distributed::Triangulation< dim, spacedim > > distributed_tria
Definition tria.h:1191
std::vector< types::global_dof_index > p4est_tree_to_coarse_cell_permutation
Definition tria.h:1009
std::vector< types::global_dof_index > coarse_cell_to_p4est_tree_permutation
Definition tria.h:1007
bool are_vertices_communicated_to_p4est() const
Definition tria.cc:1856
virtual void save(const std::string &file_basename) const override
Definition tria.cc:1986
std::vector< types::global_dof_index > p4est_tree_to_coarse_cell_permutation
Definition tria.h:842
void copy_new_triangulation_to_p4est(std::integral_constant< int, 3 >)
virtual void load(const std::string &file_basename) override
Definition tria.cc:2040
typename::internal::p4est::types< dim >::forest * parallel_forest
Definition tria.h:794
typename::internal::p4est::types< dim >::connectivity * connectivity
Definition tria.h:788
void copy_new_triangulation_to_p4est(std::integral_constant< int, 2 >)
bool is_multilevel_hierarchy_constructed() const override
Definition tria.cc:1845
std::vector< types::global_dof_index > coarse_cell_to_p4est_tree_permutation
Definition tria.h:840
typename::internal::p4est::types< dim >::ghost * parallel_ghost
Definition tria.h:800
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_CXX20_REQUIRES(condition)
Definition config.h:249
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
unsigned int level
Definition grid_out.cc:4642
typename ::Triangulation< dim, spacedim >::cell_iterator cell_iterator
Definition tria.h:322
typename ::Triangulation< dim, spacedim >::active_cell_iterator active_cell_iterator
Definition tria.h:343
void exchange_refinement_flags(::parallel::distributed::Triangulation< dim, spacedim > &tria)
Definition tria.cc:54
std::vector< types::coarse_cell_id > coarse_cell_index_to_coarse_cell_id