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
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
1171 const IndexSet &
1172 locally_owned_dofs() const;
1173
1178 const IndexSet &
1179 locally_owned_mg_dofs(const unsigned int level) const;
1180
1185 const FiniteElement<dim, spacedim> &
1186 get_fe(const types::fe_index index = 0) const;
1187
1192 const hp::FECollection<dim, spacedim> &
1193 get_fe_collection() const;
1194
1198 const Triangulation<dim, spacedim> &
1199 get_triangulation() const;
1200
1204 MPI_Comm
1205 get_mpi_communicator() const;
1206
1223 void
1224 prepare_for_serialization_of_active_fe_indices();
1225
1241 void
1242 deserialize_active_fe_indices();
1243
1252 virtual std::size_t
1253 memory_consumption() const;
1254
1260 template <class Archive>
1261 void
1262 save(Archive &ar, const unsigned int version) const;
1263
1269 template <class Archive>
1270 void
1271 load(Archive &ar, const unsigned int version);
1272
1273#ifdef DOXYGEN
1279 template <class Archive>
1280 void
1281 serialize(Archive &archive, const unsigned int version);
1282#else
1283 // This macro defines the serialize() method that is compatible with
1284 // the templated save() and load() method that have been implemented.
1285 BOOST_SERIALIZATION_SPLIT_MEMBER()
1286#endif
1287
1291 DeclException0(ExcNoFESelected);
1296 DeclException0(ExcInvalidBoundaryIndicator);
1301 DeclException1(ExcInvalidLevel,
1302 int,
1303 << "The given level " << arg1
1304 << " is not in the valid range!");
1309 DeclException1(ExcNewNumbersNotConsecutive,
1311 << "The given list of new dof indices is not consecutive: "
1312 << "the index " << arg1 << " does not exist.");
1316 DeclException2(ExcInvalidFEIndex,
1317 int,
1318 int,
1319 << "The mesh contains a cell with an active FE index of "
1320 << arg1 << ", but the finite element collection only has "
1321 << arg2 << " elements");
1322
1327 DeclExceptionMsg(ExcOnlyAvailableWithHP,
1328 "The current function doesn't make sense when used with a "
1329 "DoFHandler without hp-capabilities.");
1330
1335 DeclExceptionMsg(ExcNotImplementedWithHP,
1336 "The current function has not yet been implemented for a "
1337 "DoFHandler with hp-capabilities.");
1338
1339private:
1347 {
1348 public:
1353
1359 void
1360 init(const unsigned int coarsest_level,
1361 const unsigned int finest_level,
1362 const unsigned int dofs_per_vertex);
1363
1367 unsigned int
1369
1373 unsigned int
1375
1381 access_index(const unsigned int level,
1382 const unsigned int dof_number,
1383 const unsigned int dofs_per_vertex);
1384
1385 private:
1389 unsigned int coarsest_level;
1390
1394 unsigned int finest_level;
1395
1405 std::unique_ptr<types::global_dof_index[]> indices;
1406 };
1407
1415 {
1420 std::vector<std::pair<const cell_iterator, const types::fe_index>>
1422
1427 std::vector<std::pair<const cell_iterator, const types::fe_index>>
1429
1434 std::map<const cell_iterator, const types::fe_index>
1436
1442 std::vector<types::fe_index> active_fe_indices;
1443
1449 std::unique_ptr<
1450 parallel::distributed::
1451 CellDataTransfer<dim, spacedim, std::vector<types::fe_index>>>
1453 };
1454
1458 BlockInfo
1460
1465
1471
1477
1484
1489 std::unique_ptr<::internal::DoFHandlerImplementation::Policy::
1490 PolicyBase<dim, spacedim>>
1492
1501
1505 std::vector<::internal::DoFHandlerImplementation::NumberCache>
1507
1513 mutable std::vector<std::array<std::vector<types::global_dof_index>, dim + 1>>
1515
1524 mutable std::vector<std::array<std::vector<offset_type>, dim + 1>>
1526
1532 mutable std::array<std::vector<types::fe_index>, dim + 1>
1534
1538 mutable std::array<std::vector<offset_type>, dim + 1> hp_object_fe_ptr;
1539
1544 mutable std::vector<std::vector<types::fe_index>> hp_cell_active_fe_indices;
1545
1550 mutable std::vector<std::vector<types::fe_index>> hp_cell_future_fe_indices;
1551
1556 std::vector<MGVertexDoFs> mg_vertex_dofs;
1557
1561 std::vector<
1562 std::unique_ptr<::internal::DoFHandlerImplementation::DoFLevel<dim>>>
1564
1568 std::unique_ptr<::internal::DoFHandlerImplementation::DoFFaces<dim>>
1570
1575 std::unique_ptr<ActiveFEIndexTransfer> active_fe_index_transfer;
1576
1581 std::vector<boost::signals2::connection> tria_listeners;
1582
1588 std::vector<boost::signals2::connection> tria_listeners_for_transfer;
1589
1593 void
1595
1599 void
1601
1605 void
1607
1611 void
1613
1625 void
1627
1640 void
1642
1652 void
1654
1663 void
1665
1674 void
1676
1685 void
1687
1688
1689 // Make accessor objects friends.
1690 template <int, int, int, bool>
1691 friend class ::DoFAccessor;
1692 template <int, int, bool>
1693 friend class ::DoFCellAccessor;
1694 friend struct ::internal::DoFAccessorImplementation::Implementation;
1695 friend struct ::internal::DoFCellAccessorImplementation::Implementation;
1696
1697 // Likewise for DoFLevel objects since they need to access the vertex dofs
1698 // in the functions that set and retrieve vertex dof indices.
1699 friend struct ::internal::DoFHandlerImplementation::Implementation;
1700 friend struct ::internal::hp::DoFHandlerImplementation::Implementation;
1701 friend struct ::internal::DoFHandlerImplementation::Policy::
1702 Implementation;
1703
1704 // explicitly check for sensible template arguments, but not on windows
1705 // because MSVC creates bogus warnings during normal compilation
1706#ifndef DEAL_II_MSVC
1707 static_assert(dim <= spacedim,
1708 "The dimension <dim> of a DoFHandler must be less than or "
1709 "equal to the space dimension <spacedim> in which it lives.");
1710#endif
1711};
1712
1713namespace internal
1714{
1715 namespace hp
1716 {
1717 namespace DoFHandlerImplementation
1718 {
1730 template <int dim, int spacedim>
1731 void
1733
1758 template <int dim, int spacedim = dim>
1759 unsigned int
1761 const typename DoFHandler<dim, spacedim>::cell_iterator &parent);
1762
1768 "No FiniteElement has been found in your FECollection that is "
1769 "dominated by all children of a cell you are trying to coarsen!");
1770 } // namespace DoFHandlerImplementation
1771 } // namespace hp
1772} // namespace internal
1773
1774#ifndef DOXYGEN
1775
1776/* ----------------------- Inline functions ----------------------------------
1777 */
1778
1779
1780template <int dim, int spacedim>
1783{
1784 return hp_capability_enabled;
1785}
1786
1787
1788
1789template <int dim, int spacedim>
1792{
1793 return mg_number_cache.size() > 0;
1794}
1795
1796
1797
1798template <int dim, int spacedim>
1801{
1802 return number_cache.n_global_dofs > 0;
1803}
1804
1805
1806
1807template <int dim, int spacedim>
1810{
1811 return number_cache.n_global_dofs;
1812}
1813
1814
1815
1816template <int dim, int spacedim>
1819 DoFHandler<dim, spacedim>::n_dofs(const unsigned int level) const
1820{
1821 Assert(has_level_dofs(),
1822 ExcMessage(
1823 "n_dofs(level) can only be called after distribute_mg_dofs()"));
1824 Assert(level < mg_number_cache.size(), ExcInvalidLevel(level));
1825 return mg_number_cache[level].n_global_dofs;
1826}
1827
1828
1829
1830template <int dim, int spacedim>
1834{
1835 return number_cache.n_locally_owned_dofs;
1836}
1837
1838
1839
1840template <int dim, int spacedim>
1843{
1844 return number_cache.locally_owned_dofs;
1845}
1846
1847
1848
1849template <int dim, int spacedim>
1852 const unsigned int level) const
1853{
1854 Assert(level < this->get_triangulation().n_global_levels(),
1855 ExcMessage("The given level index exceeds the number of levels "
1856 "present in the triangulation"));
1857 Assert(
1858 mg_number_cache.size() == this->get_triangulation().n_global_levels(),
1859 ExcMessage(
1860 "The level dofs are not set up properly! Did you call distribute_mg_dofs()?"));
1861 return mg_number_cache[level].locally_owned_dofs;
1862}
1863
1864
1865
1866template <int dim, int spacedim>
1869 const types::fe_index number) const
1870{
1871 Assert(fe_collection.size() > 0,
1872 ExcMessage("No finite element collection is associated with "
1873 "this DoFHandler"));
1874 return fe_collection[number];
1875}
1876
1877
1878
1879template <int dim, int spacedim>
1883{
1884 return fe_collection;
1885}
1886
1887
1888
1889template <int dim, int spacedim>
1893{
1894 Assert(tria != nullptr,
1895 ExcMessage("This DoFHandler object has not been associated "
1896 "with a triangulation."));
1897 return *tria;
1898}
1899
1900
1901
1902template <int dim, int spacedim>
1905{
1906 Assert(tria != nullptr,
1907 ExcMessage("This DoFHandler object has not been associated "
1908 "with a triangulation."));
1909 return tria->get_mpi_communicator();
1910}
1911
1912
1913
1914template <int dim, int spacedim>
1917{
1918 return block_info_object.value_or_initialize(
1919 [&, this]() { return this->compute_block_info(); });
1920}
1921
1922
1923
1924template <int dim, int spacedim>
1926template <typename number>
1928 const std::map<types::boundary_id, const Function<spacedim, number> *>
1929 &boundary_ids) const
1930{
1931 Assert(!(dim == 2 && spacedim == 3) || this->hp_capability_enabled == false,
1932 ExcNotImplementedWithHP());
1933
1934 // extract the set of boundary ids and forget about the function object
1935 // pointers
1936 std::set<types::boundary_id> boundary_ids_only;
1937 for (typename std::map<types::boundary_id,
1938 const Function<spacedim, number> *>::const_iterator p =
1939 boundary_ids.begin();
1940 p != boundary_ids.end();
1941 ++p)
1942 boundary_ids_only.insert(p->first);
1943
1944 // then just hand everything over to the other function that does the work
1945 return n_boundary_dofs(boundary_ids_only);
1946}
1947
1948
1949
1950namespace internal
1951{
1959 template <int dim, int spacedim>
1960 std::string
1961 policy_to_string(const ::internal::DoFHandlerImplementation::Policy::
1962 PolicyBase<dim, spacedim> &policy);
1963} // namespace internal
1964
1965
1966
1967template <int dim, int spacedim>
1969template <class Archive>
1970void DoFHandler<dim, spacedim>::save(Archive &ar, const unsigned int) const
1971{
1972 if (this->hp_capability_enabled)
1973 {
1974 ar &this->object_dof_indices;
1975 ar &this->object_dof_ptr;
1976
1977 ar &this->hp_cell_active_fe_indices;
1978 ar &this->hp_cell_future_fe_indices;
1979
1980 ar &hp_object_fe_ptr;
1981 ar &hp_object_fe_indices;
1982
1983 ar &number_cache;
1984
1985 ar &mg_number_cache;
1986
1987 // write out the number of triangulation cells and later check during
1988 // loading that this number is indeed correct; same with something that
1989 // identifies the policy
1990 const unsigned int n_cells = this->tria->n_cells();
1991 std::string policy_name =
1992 ::internal::policy_to_string(*this->policy);
1993
1994 ar &n_cells &policy_name;
1995 }
1996 else
1997 {
1998 // Ignore BlockInfo: it will be recomputed on first access
1999 ar &number_cache;
2000
2001 ar &this->object_dof_indices;
2002 ar &this->object_dof_ptr;
2003
2004 // write out the number of triangulation cells and later check during
2005 // loading that this number is indeed correct; same with something that
2006 // identifies the FE and the policy
2007 unsigned int n_cells = this->tria->n_cells();
2008 std::string fe_name = this->get_fe(0).get_name();
2009 std::string policy_name = internal::policy_to_string(*this->policy);
2010
2011 ar &n_cells &fe_name &policy_name;
2012 }
2013}
2014
2015
2016
2017template <int dim, int spacedim>
2019template <class Archive>
2020void DoFHandler<dim, spacedim>::load(Archive &ar, const unsigned int)
2021{
2022 if (this->hp_capability_enabled)
2023 {
2024 ar &this->object_dof_indices;
2025 ar &this->object_dof_ptr;
2026
2027 ar &this->hp_cell_active_fe_indices;
2028 ar &this->hp_cell_future_fe_indices;
2029
2030 ar &hp_object_fe_ptr;
2031 ar &hp_object_fe_indices;
2032
2033 ar &number_cache;
2034
2035 ar &mg_number_cache;
2036
2037 // these are the checks that correspond to the last block in the save()
2038 // function
2039 unsigned int n_cells;
2040 std::string policy_name;
2041
2042 ar &n_cells &policy_name;
2043
2045 n_cells == this->tria->n_cells(),
2046 ExcMessage(
2047 "The object being loaded into does not match the triangulation "
2048 "that has been stored previously."));
2050 policy_name == ::internal::policy_to_string(*this->policy),
2051 ExcMessage("The policy currently associated with this DoFHandler (" +
2052 ::internal::policy_to_string(*this->policy) +
2053 ") does not match the one that was associated with the "
2054 "DoFHandler previously stored (" +
2055 policy_name + ")."));
2056 }
2057 else
2058 {
2059 // Ignore BlockInfo: it will be recomputed on first access
2060 ar &number_cache;
2061
2062 object_dof_indices.clear();
2063
2064 object_dof_ptr.clear();
2065
2066 ar &this->object_dof_indices;
2067 ar &this->object_dof_ptr;
2068
2069 // these are the checks that correspond to the last block in the save()
2070 // function
2071 unsigned int n_cells;
2072 std::string fe_name;
2073 std::string policy_name;
2074
2075 ar &n_cells &fe_name &policy_name;
2076
2078 n_cells == this->tria->n_cells(),
2079 ExcMessage(
2080 "The object being loaded into does not match the triangulation "
2081 "that has been stored previously."));
2083 fe_name == this->get_fe(0).get_name(),
2084 ExcMessage(
2085 "The finite element associated with this DoFHandler does not match "
2086 "the one that was associated with the DoFHandler previously stored."));
2087 AssertThrow(policy_name == internal::policy_to_string(*this->policy),
2088 ExcMessage(
2089 "The policy currently associated with this DoFHandler (" +
2090 internal::policy_to_string(*this->policy) +
2091 ") does not match the one that was associated with the "
2092 "DoFHandler previously stored (" +
2093 policy_name + ")."));
2094 }
2095}
2096
2097
2098
2099template <int dim, int spacedim>
2103 const unsigned int level,
2104 const unsigned int dof_number,
2105 const unsigned int dofs_per_vertex)
2106{
2109 return indices[dofs_per_vertex * (level - coarsest_level) + dof_number];
2110}
2111
2112
2113
2114// Declare the existence of explicit instantiations of the class
2115// above. This is not strictly necessary, but tells the compiler to
2116// avoid instantiating templates that we know are instantiated in
2117// .cc files and so can be referenced without implicit
2118// instantiations.
2119//
2120// Unfortunately, this does not seem to work when building modules
2121// because the compiler (well, Clang at least) then just doesn't
2122// instantiate these classes at all, even though their members are
2123// defined and explicitly instantiated in a .cc file.
2124# ifndef DEAL_II_BUILDING_CXX20_MODULE
2125extern template class DoFHandler<1, 1>;
2126extern template class DoFHandler<1, 2>;
2127extern template class DoFHandler<1, 3>;
2128extern template class DoFHandler<2, 2>;
2129extern template class DoFHandler<2, 3>;
2130extern template class DoFHandler<3, 3>;
2131# endif
2132
2133#endif // DOXYGEN
2134
2136
2137#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:15808
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