deal.II version GIT relicensing-7040-g409d9ea789 2026-11-06 04:40: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
697 virtual void
698 save(const std::string &file_basename) const override;
699
722 virtual void
723 load(const std::string &file_basename) override;
724
730 void
731 load(const typename ::internal::p4est::types<dim>::forest *forest);
732
739 const std::vector<types::global_dof_index> &
740 get_p4est_tree_to_coarse_cell_permutation() const;
741
747 const std::vector<types::global_dof_index> &
748 get_coarse_cell_to_p4est_tree_permutation() const;
749
757 const typename ::internal::p4est::types<dim>::forest *
758 get_p4est() const;
759
779 virtual void
780 add_periodicity(
782 override;
783
784
785 private:
790
795
801 typename ::internal::p4est::types<dim>::connectivity *connectivity;
802
807 typename ::internal::p4est::types<dim>::forest *parallel_forest;
808
813 typename ::internal::p4est::types<dim>::ghost *parallel_ghost;
814
836 void
837 update_cell_relations();
838
852 std::vector<types::global_dof_index>
854 std::vector<types::global_dof_index>
856
861 typename ::internal::p4est::types<dim>::tree *
862 init_tree(const int dealii_coarse_cell_index) const;
863
868 void
869 setup_coarse_cell_to_p4est_tree_permutation();
870
877 void copy_new_triangulation_to_p4est(std::integral_constant<int, 2>);
878 void copy_new_triangulation_to_p4est(std::integral_constant<int, 3>);
879
884 void
885 copy_local_forest_to_triangulation();
886
900 std::vector<unsigned int>
901 get_cell_weights() const;
902
912 std::vector<bool>
913 mark_locally_active_vertices_on_level(const int level) const;
914
915 virtual unsigned int
916 coarse_cell_id_to_coarse_cell_index(
917 const types::coarse_cell_id coarse_cell_id) const override;
918
921 const unsigned int coarse_cell_index) const override;
922
923 template <int, int, class>
924 friend class ::FETools::internal::ExtrapolateImplementation;
925
926 template <int, int>
928 };
929
930
938 template <int spacedim>
940 class Triangulation<1, spacedim>
941 : public ::parallel::DistributedTriangulationBase<1, spacedim>
942 {
943 public:
948 {
949 default_setting = 0x0,
950 mesh_reconstruction_after_repartitioning = 0x1,
951 construct_multigrid_hierarchy = 0x2,
952 no_automatic_repartitioning = 0x4,
953 communicate_vertices_to_p4est = 0x8
954 };
955
961 const MPI_Comm mpi_communicator,
962 const typename ::Triangulation<1, spacedim>::MeshSmoothing
964 const Settings settings = default_setting);
965
969 virtual ~Triangulation() override;
970
977 const std::vector<types::global_dof_index> &
978 get_p4est_tree_to_coarse_cell_permutation() const;
979
984 virtual void
985 load(const std::string &filename) override;
986
991 virtual void
992 save(const std::string &filename) const override;
993
998 virtual bool
999 is_multilevel_hierarchy_constructed() const override;
1000
1005 bool
1006 are_vertices_communicated_to_p4est() const;
1007
1012 void
1013 update_cell_relations();
1014
1019 std::vector<types::global_dof_index>
1021 std::vector<types::global_dof_index>
1023
1028 virtual std::map<unsigned int, std::set<::types::subdomain_id>>
1029 compute_level_vertices_with_ghost_neighbors(
1030 const unsigned int level) const;
1031
1036 virtual std::vector<bool>
1037 mark_locally_active_vertices_on_level(const unsigned int level) const;
1038
1039 virtual unsigned int
1040 coarse_cell_id_to_coarse_cell_index(
1041 const types::coarse_cell_id coarse_cell_id) const override;
1042
1043 virtual types::coarse_cell_id
1045 const unsigned int coarse_cell_index) const override;
1046
1047 template <int, int>
1049 };
1050 } // namespace distributed
1051} // namespace parallel
1052
1053
1054#else // DEAL_II_WITH_P4EST
1055
1056namespace parallel
1057{
1058 namespace distributed
1059 {
1073 template <int dim, int spacedim = dim>
1075 class Triangulation
1076 : public ::parallel::DistributedTriangulationBase<dim, spacedim>
1077 {
1078 public:
1082 enum Settings
1083 {
1084 default_setting = 0x0,
1089 };
1090
1095 explicit Triangulation(
1096 const MPI_Comm /*mpi_communicator*/,
1097 const typename ::Triangulation<dim, spacedim>::MeshSmoothing
1098 /*smooth_grid*/
1100 const Settings /*settings*/ = default_setting) = delete;
1101
1106 virtual bool
1108 {
1109 return false;
1110 }
1111
1116 bool
1118 {
1119 return false;
1120 }
1121
1126 virtual void
1127 save(const std::string & /*filename*/) const override
1128 {}
1129
1134 virtual void
1135 load(const std::string & /*filename*/) override
1136 {}
1137
1142 void
1144 {}
1145 };
1146 } // namespace distributed
1147} // namespace parallel
1148
1149
1150#endif
1151
1152
1153
1154namespace parallel
1155{
1156 namespace distributed
1157 {
1175 template <int dim, int spacedim = dim>
1218 } // namespace distributed
1219} // namespace parallel
1220
1221
1223
1224#endif
Definition point.h:111
const ObserverPointer< ::parallel::distributed::Triangulation< dim, spacedim > > distributed_tria
Definition tria.h:1204
std::vector< types::global_dof_index > p4est_tree_to_coarse_cell_permutation
Definition tria.h:1022
std::vector< types::global_dof_index > coarse_cell_to_p4est_tree_permutation
Definition tria.h:1020
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:855
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:807
typename::internal::p4est::types< dim >::connectivity * connectivity
Definition tria.h:801
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:853
typename::internal::p4est::types< dim >::ghost * parallel_ghost
Definition tria.h:813
#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