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
dof_handler.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) 1998 - 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_dof_handler_h
14#define dealii_dof_handler_h
15
16
17
18#include <deal.II/base/config.h>
19
24#include <deal.II/base/lazy.h>
26#include <deal.II/base/types.h>
27
34
36
37#include <boost/serialization/split_member.hpp>
38#include <boost/signals2/connection.hpp>
39
40#include <map>
41#include <memory>
42#include <set>
43#include <vector>
44
46
47// Forward declarations
48#ifndef DOXYGEN
49template <int dim, int spacedim>
50class FiniteElement;
51template <int dim, int spacedim>
53class Triangulation;
54
55namespace internal
56{
57 namespace DoFHandlerImplementation
58 {
59 struct Implementation;
60
61 namespace Policy
62 {
63 template <int dim, int spacedim>
64 class PolicyBase;
65 struct Implementation;
66 } // namespace Policy
67 } // namespace DoFHandlerImplementation
68
69 namespace DoFAccessorImplementation
70 {
71 struct Implementation;
72 }
73
74 namespace DoFCellAccessorImplementation
75 {
76 struct Implementation;
77 }
78
79 namespace hp
80 {
81 namespace DoFHandlerImplementation
82 {
83 struct Implementation;
84 }
85 } // namespace hp
86} // namespace internal
87
88namespace parallel
89{
90 namespace distributed
91 {
92 template <int dim, int spacedim, typename VectorType>
93 class CellDataTransfer;
94 }
95} // namespace parallel
96
97template <int structdim, int dim, int spacedim, bool level_dof_access>
98class DoFAccessor;
99
100template <int dimension_, int space_dimension_, bool level_dof_access>
101class DoFCellAccessor;
102
103#endif
104
321template <int dim, int spacedim = dim>
324{
329
330public:
343 using cell_accessor = typename ActiveSelector::CellAccessor;
344
357 using face_accessor = typename ActiveSelector::FaceAccessor;
358
366 using line_iterator = typename ActiveSelector::line_iterator;
367
381 using active_line_iterator = typename ActiveSelector::active_line_iterator;
382
390 using quad_iterator = typename ActiveSelector::quad_iterator;
391
405 using active_quad_iterator = typename ActiveSelector::active_quad_iterator;
406
414 using hex_iterator = typename ActiveSelector::hex_iterator;
415
425 using active_hex_iterator = typename ActiveSelector::active_hex_iterator;
426
447 using active_cell_iterator = typename ActiveSelector::active_cell_iterator;
448
475 using cell_iterator = typename ActiveSelector::cell_iterator;
476
493 using face_iterator = typename ActiveSelector::face_iterator;
494
506 using active_face_iterator = typename ActiveSelector::active_face_iterator;
507
508 using level_cell_accessor = typename LevelSelector::CellAccessor;
509 using level_face_accessor = typename LevelSelector::FaceAccessor;
510
511 using level_cell_iterator = typename LevelSelector::cell_iterator;
512 using level_face_iterator = typename LevelSelector::face_iterator;
513
514
518 static constexpr unsigned int dimension = dim;
519
523 static constexpr unsigned int space_dimension = spacedim;
524
528 static const types::fe_index default_fe_index = 0;
529
533 using offset_type = unsigned int;
534
540
545
552 DoFHandler(const DoFHandler &) = delete;
553
557 virtual ~DoFHandler() override;
558
565 DoFHandler &
566 operator=(const DoFHandler &) = delete;
567
582 void
583 set_active_fe_indices(const std::vector<types::fe_index> &active_fe_indices);
584
598 std::vector<types::fe_index>
600
614 void
615 set_future_fe_indices(const std::vector<types::fe_index> &future_fe_indices);
616
627 std::vector<types::fe_index>
629
637 void
639
669 void
671
675 void
677
683 void
685
689 bool
691
697 bool
699
714 bool
716
725 DEAL_II_DEPRECATED_EARLY_WITH_COMMENT("Use an external BlockInfo instead.")
726 void
727 initialize_local_block_info();
728
732 void
733 clear();
734
787 void
788 renumber_dofs(const std::vector<types::global_dof_index> &new_numbers);
789
794 void
795 renumber_dofs(const unsigned int level,
796 const std::vector<types::global_dof_index> &new_numbers);
797
826 unsigned int
827 max_couplings_between_dofs() const;
828
841 unsigned int
842 max_couplings_between_boundary_dofs() const;
843
844 /*--------------------------------------*/
845
856 begin(const unsigned int level = 0) const;
857
875 begin_active(const unsigned int level = 0) const;
876
882 end() const;
883
889 end(const unsigned int level) const;
890
897 end_active(const unsigned int level) const;
898
904 begin_mg(const unsigned int level = 0) const;
905
911 end_mg(const unsigned int level) const;
912
918 end_mg() const;
937 cell_iterators() const;
938
980 active_cell_iterators() const;
981
994 mg_cell_iterators() const;
995
1012 cell_iterators_on_level(const unsigned int level) const;
1013
1030 active_cell_iterators_on_level(const unsigned int level) const;
1031
1048 mg_cell_iterators_on_level(const unsigned int level) const;
1049
1053 /*---------------------------------------*/
1054
1055
1079 types::global_dof_index
1080 n_dofs() const;
1081
1089 types::global_dof_index
1090 n_dofs(const unsigned int level) const;
1091
1096 types::global_dof_index
1097 n_boundary_dofs() const;
1098
1110 template <typename number>
1111 types::global_dof_index
1112 n_boundary_dofs(
1113 const std::map<types::boundary_id, const Function<spacedim, number> *>
1114 &boundary_ids) const;
1115
1120 types::global_dof_index
1121 n_boundary_dofs(const std::set<types::boundary_id> &boundary_ids) const;
1122
1140 DEAL_II_DEPRECATED_EARLY_WITH_COMMENT("Use an external BlockInfo instead.")
1141 const BlockInfo &
1142 block_info() const;
1143
1163 types::global_dof_index
1164 n_locally_owned_dofs() const;
1165
1178 const IndexSet &
1179 locally_owned_dofs() const;
1180
1185 const IndexSet &
1186 locally_owned_mg_dofs(const unsigned int level) const;
1187
1192 const FiniteElement<dim, spacedim> &
1193 get_fe(const types::fe_index index = 0) const;
1194
1199 const hp::FECollection<dim, spacedim> &
1200 get_fe_collection() const;
1201
1205 const Triangulation<dim, spacedim> &
1206 get_triangulation() const;
1207
1211 MPI_Comm
1212 get_mpi_communicator() const;
1213
1230 void
1231 prepare_for_serialization_of_active_fe_indices();
1232
1248 void
1249 deserialize_active_fe_indices();
1250
1259 virtual std::size_t
1260 memory_consumption() const;
1261
1267 template <class Archive>
1268 void
1269 save(Archive &ar, const unsigned int version) const;
1270
1276 template <class Archive>
1277 void
1278 load(Archive &ar, const unsigned int version);
1279
1280#ifdef DOXYGEN
1286 template <class Archive>
1287 void
1288 serialize(Archive &archive, const unsigned int version);
1289#else
1290 // This macro defines the serialize() method that is compatible with
1291 // the templated save() and load() method that have been implemented.
1292 BOOST_SERIALIZATION_SPLIT_MEMBER()
1293#endif
1294
1298 DeclException0(ExcNoFESelected);
1303 DeclException0(ExcInvalidBoundaryIndicator);
1308 DeclException1(ExcInvalidLevel,
1309 int,
1310 << "The given level " << arg1
1311 << " is not in the valid range!");
1316 DeclException1(ExcNewNumbersNotConsecutive,
1318 << "The given list of new dof indices is not consecutive: "
1319 << "the index " << arg1 << " does not exist.");
1323 DeclException2(ExcInvalidFEIndex,
1324 int,
1325 int,
1326 << "The mesh contains a cell with an active FE index of "
1327 << arg1 << ", but the finite element collection only has "
1328 << arg2 << " elements");
1329
1334 DeclExceptionMsg(ExcOnlyAvailableWithHP,
1335 "The current function doesn't make sense when used with a "
1336 "DoFHandler without hp-capabilities.");
1337
1342 DeclExceptionMsg(ExcNotImplementedWithHP,
1343 "The current function has not yet been implemented for a "
1344 "DoFHandler with hp-capabilities.");
1345
1346private:
1354 {
1355 public:
1360
1366 void
1367 init(const unsigned int coarsest_level,
1368 const unsigned int finest_level,
1369 const unsigned int dofs_per_vertex);
1370
1374 unsigned int
1376
1380 unsigned int
1382
1388 access_index(const unsigned int level,
1389 const unsigned int dof_number,
1390 const unsigned int dofs_per_vertex);
1391
1392 private:
1396 unsigned int coarsest_level;
1397
1401 unsigned int finest_level;
1402
1412 std::unique_ptr<types::global_dof_index[]> indices;
1413 };
1414
1422 {
1427 std::vector<std::pair<const cell_iterator, const types::fe_index>>
1429
1434 std::vector<std::pair<const cell_iterator, const types::fe_index>>
1436
1441 std::map<const cell_iterator, const types::fe_index>
1443
1449 std::vector<types::fe_index> active_fe_indices;
1450
1456 std::unique_ptr<
1457 parallel::distributed::
1458 CellDataTransfer<dim, spacedim, std::vector<types::fe_index>>>
1460 };
1461
1465 BlockInfo
1467
1472
1478
1484
1491
1496 std::unique_ptr<::internal::DoFHandlerImplementation::Policy::
1497 PolicyBase<dim, spacedim>>
1499
1508
1512 std::vector<::internal::DoFHandlerImplementation::NumberCache>
1514
1520 mutable std::vector<std::array<std::vector<types::global_dof_index>, dim + 1>>
1522
1531 mutable std::vector<std::array<std::vector<offset_type>, dim + 1>>
1533
1539 mutable std::array<std::vector<types::fe_index>, dim + 1>
1541
1545 mutable std::array<std::vector<offset_type>, dim + 1> hp_object_fe_ptr;
1546
1551 mutable std::vector<std::vector<types::fe_index>> hp_cell_active_fe_indices;
1552
1557 mutable std::vector<std::vector<types::fe_index>> hp_cell_future_fe_indices;
1558
1563 std::vector<MGVertexDoFs> mg_vertex_dofs;
1564
1568 std::vector<
1569 std::unique_ptr<::internal::DoFHandlerImplementation::DoFLevel<dim>>>
1571
1575 std::unique_ptr<::internal::DoFHandlerImplementation::DoFFaces<dim>>
1577
1582 std::unique_ptr<ActiveFEIndexTransfer> active_fe_index_transfer;
1583
1588 std::vector<boost::signals2::connection> tria_listeners;
1589
1595 std::vector<boost::signals2::connection> tria_listeners_for_transfer;
1596
1600 void
1602
1606 void
1608
1612 void
1614
1618 void
1620
1632 void
1634
1647 void
1649
1659 void
1661
1670 void
1672
1681 void
1683
1692 void
1694
1695
1696 // Make accessor objects friends.
1697 template <int, int, int, bool>
1698 friend class ::DoFAccessor;
1699 template <int, int, bool>
1700 friend class ::DoFCellAccessor;
1701 friend struct ::internal::DoFAccessorImplementation::Implementation;
1702 friend struct ::internal::DoFCellAccessorImplementation::Implementation;
1703
1704 // Likewise for DoFLevel objects since they need to access the vertex dofs
1705 // in the functions that set and retrieve vertex dof indices.
1706 friend struct ::internal::DoFHandlerImplementation::Implementation;
1707 friend struct ::internal::hp::DoFHandlerImplementation::Implementation;
1708 friend struct ::internal::DoFHandlerImplementation::Policy::
1709 Implementation;
1710
1711 // explicitly check for sensible template arguments, but not on windows
1712 // because MSVC creates bogus warnings during normal compilation
1713#ifndef DEAL_II_MSVC
1714 static_assert(dim <= spacedim,
1715 "The dimension <dim> of a DoFHandler must be less than or "
1716 "equal to the space dimension <spacedim> in which it lives.");
1717#endif
1718};
1719
1720namespace internal
1721{
1722 namespace hp
1723 {
1724 namespace DoFHandlerImplementation
1725 {
1737 template <int dim, int spacedim>
1738 void
1740
1765 template <int dim, int spacedim = dim>
1766 unsigned int
1768 const typename DoFHandler<dim, spacedim>::cell_iterator &parent);
1769
1775 "No FiniteElement has been found in your FECollection that is "
1776 "dominated by all children of a cell you are trying to coarsen!");
1777 } // namespace DoFHandlerImplementation
1778 } // namespace hp
1779} // namespace internal
1780
1781#ifndef DOXYGEN
1782
1783/* ----------------------- Inline functions ----------------------------------
1784 */
1785
1786
1787template <int dim, int spacedim>
1790{
1791 return hp_capability_enabled;
1792}
1793
1794
1795
1796template <int dim, int spacedim>
1799{
1800 return mg_number_cache.size() > 0;
1801}
1802
1803
1804
1805template <int dim, int spacedim>
1808{
1809 return number_cache.n_global_dofs > 0;
1810}
1811
1812
1813
1814template <int dim, int spacedim>
1817{
1818 return number_cache.n_global_dofs;
1819}
1820
1821
1822
1823template <int dim, int spacedim>
1826 DoFHandler<dim, spacedim>::n_dofs(const unsigned int level) const
1827{
1828 Assert(has_level_dofs(),
1829 ExcMessage(
1830 "n_dofs(level) can only be called after distribute_mg_dofs()"));
1831 Assert(level < mg_number_cache.size(), ExcInvalidLevel(level));
1832 return mg_number_cache[level].n_global_dofs;
1833}
1834
1835
1836
1837template <int dim, int spacedim>
1841{
1842 return number_cache.n_locally_owned_dofs;
1843}
1844
1845
1846
1847template <int dim, int spacedim>
1850{
1851 return number_cache.locally_owned_dofs;
1852}
1853
1854
1855
1856template <int dim, int spacedim>
1859 const unsigned int level) const
1860{
1861 Assert(level < this->get_triangulation().n_global_levels(),
1862 ExcMessage("The given level index exceeds the number of levels "
1863 "present in the triangulation"));
1864 Assert(
1865 mg_number_cache.size() == this->get_triangulation().n_global_levels(),
1866 ExcMessage(
1867 "The level dofs are not set up properly! Did you call distribute_mg_dofs()?"));
1868 return mg_number_cache[level].locally_owned_dofs;
1869}
1870
1871
1872
1873template <int dim, int spacedim>
1876 const types::fe_index number) const
1877{
1878 Assert(fe_collection.size() > 0,
1879 ExcMessage("No finite element collection is associated with "
1880 "this DoFHandler"));
1881 return fe_collection[number];
1882}
1883
1884
1885
1886template <int dim, int spacedim>
1890{
1891 return fe_collection;
1892}
1893
1894
1895
1896template <int dim, int spacedim>
1900{
1901 Assert(tria != nullptr,
1902 ExcMessage("This DoFHandler object has not been associated "
1903 "with a triangulation."));
1904 return *tria;
1905}
1906
1907
1908
1909template <int dim, int spacedim>
1912{
1913 Assert(tria != nullptr,
1914 ExcMessage("This DoFHandler object has not been associated "
1915 "with a triangulation."));
1916 return tria->get_mpi_communicator();
1917}
1918
1919
1920
1921template <int dim, int spacedim>
1924{
1925 return block_info_object.value_or_initialize(
1926 [&, this]() { return this->compute_block_info(); });
1927}
1928
1929
1930
1931template <int dim, int spacedim>
1933template <typename number>
1935 const std::map<types::boundary_id, const Function<spacedim, number> *>
1936 &boundary_ids) const
1937{
1938 Assert(!(dim == 2 && spacedim == 3) || this->hp_capability_enabled == false,
1939 ExcNotImplementedWithHP());
1940
1941 // extract the set of boundary ids and forget about the function object
1942 // pointers
1943 std::set<types::boundary_id> boundary_ids_only;
1944 for (typename std::map<types::boundary_id,
1945 const Function<spacedim, number> *>::const_iterator p =
1946 boundary_ids.begin();
1947 p != boundary_ids.end();
1948 ++p)
1949 boundary_ids_only.insert(p->first);
1950
1951 // then just hand everything over to the other function that does the work
1952 return n_boundary_dofs(boundary_ids_only);
1953}
1954
1955
1956
1957namespace internal
1958{
1966 template <int dim, int spacedim>
1967 std::string
1968 policy_to_string(const ::internal::DoFHandlerImplementation::Policy::
1969 PolicyBase<dim, spacedim> &policy);
1970} // namespace internal
1971
1972
1973
1974template <int dim, int spacedim>
1976template <class Archive>
1977void DoFHandler<dim, spacedim>::save(Archive &ar, const unsigned int) const
1978{
1979 if (this->hp_capability_enabled)
1980 {
1981 ar &this->object_dof_indices;
1982 ar &this->object_dof_ptr;
1983
1984 ar &this->hp_cell_active_fe_indices;
1985 ar &this->hp_cell_future_fe_indices;
1986
1987 ar &hp_object_fe_ptr;
1988 ar &hp_object_fe_indices;
1989
1990 ar &number_cache;
1991
1992 ar &mg_number_cache;
1993
1994 // write out the number of triangulation cells and later check during
1995 // loading that this number is indeed correct; same with something that
1996 // identifies the policy
1997 const unsigned int n_cells = this->tria->n_cells();
1998 std::string policy_name =
1999 ::internal::policy_to_string(*this->policy);
2000
2001 ar &n_cells &policy_name;
2002 }
2003 else
2004 {
2005 // Ignore BlockInfo: it will be recomputed on first access
2006 ar &number_cache;
2007
2008 ar &this->object_dof_indices;
2009 ar &this->object_dof_ptr;
2010
2011 // write out the number of triangulation cells and later check during
2012 // loading that this number is indeed correct; same with something that
2013 // identifies the FE and the policy
2014 unsigned int n_cells = this->tria->n_cells();
2015 std::string fe_name = this->get_fe(0).get_name();
2016 std::string policy_name = internal::policy_to_string(*this->policy);
2017
2018 ar &n_cells &fe_name &policy_name;
2019 }
2020}
2021
2022
2023
2024template <int dim, int spacedim>
2026template <class Archive>
2027void DoFHandler<dim, spacedim>::load(Archive &ar, const unsigned int)
2028{
2029 if (this->hp_capability_enabled)
2030 {
2031 ar &this->object_dof_indices;
2032 ar &this->object_dof_ptr;
2033
2034 ar &this->hp_cell_active_fe_indices;
2035 ar &this->hp_cell_future_fe_indices;
2036
2037 ar &hp_object_fe_ptr;
2038 ar &hp_object_fe_indices;
2039
2040 ar &number_cache;
2041
2042 ar &mg_number_cache;
2043
2044 // these are the checks that correspond to the last block in the save()
2045 // function
2046 unsigned int n_cells;
2047 std::string policy_name;
2048
2049 ar &n_cells &policy_name;
2050
2052 n_cells == this->tria->n_cells(),
2053 ExcMessage(
2054 "The object being loaded into does not match the triangulation "
2055 "that has been stored previously."));
2057 policy_name == ::internal::policy_to_string(*this->policy),
2058 ExcMessage("The policy currently associated with this DoFHandler (" +
2059 ::internal::policy_to_string(*this->policy) +
2060 ") does not match the one that was associated with the "
2061 "DoFHandler previously stored (" +
2062 policy_name + ")."));
2063 }
2064 else
2065 {
2066 // Ignore BlockInfo: it will be recomputed on first access
2067 ar &number_cache;
2068
2069 object_dof_indices.clear();
2070
2071 object_dof_ptr.clear();
2072
2073 ar &this->object_dof_indices;
2074 ar &this->object_dof_ptr;
2075
2076 // these are the checks that correspond to the last block in the save()
2077 // function
2078 unsigned int n_cells;
2079 std::string fe_name;
2080 std::string policy_name;
2081
2082 ar &n_cells &fe_name &policy_name;
2083
2085 n_cells == this->tria->n_cells(),
2086 ExcMessage(
2087 "The object being loaded into does not match the triangulation "
2088 "that has been stored previously."));
2090 fe_name == this->get_fe(0).get_name(),
2091 ExcMessage(
2092 "The finite element associated with this DoFHandler does not match "
2093 "the one that was associated with the DoFHandler previously stored."));
2094 AssertThrow(policy_name == internal::policy_to_string(*this->policy),
2095 ExcMessage(
2096 "The policy currently associated with this DoFHandler (" +
2097 internal::policy_to_string(*this->policy) +
2098 ") does not match the one that was associated with the "
2099 "DoFHandler previously stored (" +
2100 policy_name + ")."));
2101 }
2102}
2103
2104
2105
2106template <int dim, int spacedim>
2110 const unsigned int level,
2111 const unsigned int dof_number,
2112 const unsigned int dofs_per_vertex)
2113{
2116 return indices[dofs_per_vertex * (level - coarsest_level) + dof_number];
2117}
2118
2119
2120
2121// Declare the existence of explicit instantiations of the class
2122// above. This is not strictly necessary, but tells the compiler to
2123// avoid instantiating templates that we know are instantiated in
2124// .cc files and so can be referenced without implicit
2125// instantiations.
2126//
2127// Unfortunately, this does not seem to work when building modules
2128// because the compiler (well, Clang at least) then just doesn't
2129// instantiate these classes at all, even though their members are
2130// defined and explicitly instantiated in a .cc file.
2131# ifndef DEAL_II_BUILDING_CXX20_MODULE
2132extern template class DoFHandler<1, 1>;
2133extern template class DoFHandler<1, 2>;
2134extern template class DoFHandler<1, 3>;
2135extern template class DoFHandler<2, 2>;
2136extern template class DoFHandler<2, 3>;
2137extern template class DoFHandler<3, 3>;
2138# endif
2139
2140#endif // DOXYGEN
2141
2143
2144#endif
*  iterator end()
*  *  iterator begin()
*  x_component_mask set(0, true)
A small class collecting the different BlockIndices involved in global, multilevel and local computat...
Definition block_info.h:94
const FiniteElement< dimension_, space_dimension_ > & get_fe() const
static const unsigned int dim
static const unsigned int spacedim
types::global_dof_index & access_index(const unsigned int level, const unsigned int dof_number, const unsigned int dofs_per_vertex)
void init(const unsigned int coarsest_level, const unsigned int finest_level, const unsigned int dofs_per_vertex)
unsigned int get_finest_level() const
std::unique_ptr< types::global_dof_index[]> indices
unsigned int get_coarsest_level() const
void pre_distributed_transfer_action()
void post_transfer_action()
std::vector< types::fe_index > get_future_fe_indices() const
std::vector< std::unique_ptr<::internal::DoFHandlerImplementation::DoFLevel< dim > > > mg_levels
std::unique_ptr< ActiveFEIndexTransfer > active_fe_index_transfer
hp::FECollection< dim, spacedim > fe_collection
void create_active_fe_table()
std::vector< std::vector< types::fe_index > > hp_cell_future_fe_indices
const hp::FECollection< dim, spacedim > & get_fe_collection() const
void save(Archive &ar, const unsigned int version) const
bool has_active_dofs() const
std::vector< boost::signals2::connection > tria_listeners_for_transfer
const FiniteElement< dim, spacedim > & get_fe(const types::fe_index index=0) const
const IndexSet & locally_owned_mg_dofs(const unsigned int level) const
void distribute_dofs(const FiniteElement< dim, spacedim > &fe)
types::global_dof_index n_boundary_dofs() const
DoFHandler(const Triangulation< dim, spacedim > &tria)
void clear_mg_space()
void connect_to_triangulation_signals()
std::vector< std::vector< types::fe_index > > hp_cell_active_fe_indices
std::vector< MGVertexDoFs > mg_vertex_dofs
std::vector< boost::signals2::connection > tria_listeners
void post_distributed_transfer_action()
std::vector< std::array< std::vector< types::global_dof_index >, dim+1 > > object_dof_indices
const Triangulation< dim, spacedim > & get_triangulation() const
typename LevelSelector::CellAccessor level_cell_accessor
void pre_transfer_action()
void clear_space()
BlockInfo compute_block_info() const
const IndexSet & locally_owned_dofs() const
void reinit(const Triangulation< dim, spacedim > &tria)
std::vector< std::array< std::vector< offset_type >, dim+1 > > object_dof_ptr
std::unique_ptr<::internal::DoFHandlerImplementation::DoFFaces< dim > > mg_faces
void serialize(Archive &archive, const unsigned int version)
DoFHandler & operator=(const DoFHandler &)=delete
DoFHandler(const DoFHandler &)=delete
std::vector< types::fe_index > get_active_fe_indices() const
void distribute_mg_dofs()
bool hp_capability_enabled
bool has_hp_capabilities() const
types::global_dof_index n_dofs() const
void update_active_fe_table()
Lazy< BlockInfo > block_info_object
typename LevelSelector::cell_iterator level_cell_iterator
std::vector<::internal::DoFHandlerImplementation::NumberCache > mg_number_cache
void load(Archive &ar, const unsigned int version)
typename LevelSelector::face_iterator level_face_iterator
MPI_Comm get_mpi_communicator() const
std::array< std::vector< offset_type >, dim+1 > hp_object_fe_ptr
void distribute_dofs(const hp::FECollection< dim, spacedim > &fe)
ObserverPointer< const Triangulation< dim, spacedim >, DoFHandler< dim, spacedim > > tria
bool has_level_dofs() const
std::unique_ptr<::internal::DoFHandlerImplementation::Policy::PolicyBase< dim, spacedim > > policy
typename LevelSelector::FaceAccessor level_face_accessor
std::array< std::vector< types::fe_index >, dim+1 > hp_object_fe_indices
void set_active_fe_indices(const std::vector< types::fe_index > &active_fe_indices)
void setup_policy()
types::global_dof_index n_locally_owned_dofs() const
const BlockInfo & block_info() const
::internal::DoFHandlerImplementation::NumberCache number_cache
void set_future_fe_indices(const std::vector< types::fe_index > &future_fe_indices)
virtual ~DoFHandler() override
Definition lazy.h:133
#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
#define DeclException0(Exception0)
#define Assert(cond, exc)
#define DeclException2(Exception2, type1, type2, outsequence)
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcNoDominatedFiniteElementOnChildren()
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcInvalidLevel(int arg1)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
typename ActiveSelector::FaceAccessor face_accessor
typename ActiveSelector::cell_iterator cell_iterator
typename ActiveSelector::line_iterator line_iterator
typename ActiveSelector::face_iterator face_iterator
typename ActiveSelector::active_line_iterator active_line_iterator
typename ActiveSelector::active_cell_iterator active_cell_iterator
typename ActiveSelector::CellAccessor cell_accessor
typename ActiveSelector::quad_iterator quad_iterator
typename ActiveSelector::active_hex_iterator active_hex_iterator
typename ActiveSelector::active_quad_iterator active_quad_iterator
typename ActiveSelector::hex_iterator hex_iterator
typename ActiveSelector::active_face_iterator active_face_iterator
Definition hp.h:115
unsigned int n_cells(const internal::TriangulationImplementation::NumberCache< 1 > &c)
Definition tria.cc:15827
unsigned int dominated_future_fe_on_children(const typename DoFHandler< dim, spacedim >::cell_iterator &parent)
void communicate_future_fe_indices(DoFHandler< dim, spacedim > &dof_handler)
std::string policy_to_string(const ::internal::DoFHandlerImplementation::Policy::PolicyBase< dim, spacedim > &policy)
STL namespace.
Definition types.h:30
unsigned short int fe_index
Definition types.h:70
std::vector< std::pair< const cell_iterator, const types::fe_index > > refined_cells_fe_index
std::vector< std::pair< const cell_iterator, const types::fe_index > > persisting_cells_fe_index
std::vector< types::fe_index > active_fe_indices
std::map< const cell_iterator, const types::fe_index > coarsened_cells_fe_index
std::unique_ptr< parallel::distributed::CellDataTransfer< dim, spacedim, std::vector< types::fe_index > > > cell_data_transfer