deal.II version 9.8.0
\(\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
25#include <deal.II/base/types.h>
26
33
35
36#include <boost/serialization/split_member.hpp>
37#include <boost/signals2/connection.hpp>
38
39#include <map>
40#include <memory>
41#include <set>
42#include <vector>
43
45
46// Forward declarations
47#ifndef DOXYGEN
48template <int dim, int spacedim>
49class FiniteElement;
50template <int dim, int spacedim>
52class Triangulation;
53
54namespace internal
55{
57 {
58 struct Implementation;
59
60 namespace Policy
61 {
62 template <int dim, int spacedim>
63 class PolicyBase;
64 struct Implementation;
65 } // namespace Policy
66 } // namespace DoFHandlerImplementation
67
69 {
70 struct Implementation;
71 }
72
74 {
75 struct Implementation;
76 }
77
78 namespace hp
79 {
81 {
82 struct Implementation;
83 }
84 } // namespace hp
85} // namespace internal
86
87namespace parallel
88{
89 namespace distributed
90 {
91 template <int dim, int spacedim, typename VectorType>
92 class CellDataTransfer;
93 }
94} // namespace parallel
95
96template <int structdim, int dim, int spacedim, bool level_dof_access>
97class DoFAccessor;
98
99template <int dimension_, int space_dimension_, bool level_dof_access>
100class DoFCellAccessor;
101
102#endif
103
320template <int dim, int spacedim = dim>
323{
328
329public:
342 using cell_accessor = typename ActiveSelector::CellAccessor;
343
356 using face_accessor = typename ActiveSelector::FaceAccessor;
357
365 using line_iterator = typename ActiveSelector::line_iterator;
366
380 using active_line_iterator = typename ActiveSelector::active_line_iterator;
381
389 using quad_iterator = typename ActiveSelector::quad_iterator;
390
404 using active_quad_iterator = typename ActiveSelector::active_quad_iterator;
405
413 using hex_iterator = typename ActiveSelector::hex_iterator;
414
424 using active_hex_iterator = typename ActiveSelector::active_hex_iterator;
425
446 using active_cell_iterator = typename ActiveSelector::active_cell_iterator;
447
474 using cell_iterator = typename ActiveSelector::cell_iterator;
475
492 using face_iterator = typename ActiveSelector::face_iterator;
493
505 using active_face_iterator = typename ActiveSelector::active_face_iterator;
506
507 using level_cell_accessor = typename LevelSelector::CellAccessor;
508 using level_face_accessor = typename LevelSelector::FaceAccessor;
509
510 using level_cell_iterator = typename LevelSelector::cell_iterator;
511 using level_face_iterator = typename LevelSelector::face_iterator;
512
513
517 static constexpr unsigned int dimension = dim;
518
522 static constexpr unsigned int space_dimension = spacedim;
523
528
532 using offset_type = unsigned int;
533
539
544
551 DoFHandler(const DoFHandler &) = delete;
552
556 virtual ~DoFHandler() override;
557
564 DoFHandler &
565 operator=(const DoFHandler &) = delete;
566
581 void
582 set_active_fe_indices(const std::vector<types::fe_index> &active_fe_indices);
583
590 void
591 set_active_fe_indices(const std::vector<unsigned int> &active_fe_indices);
592
606 std::vector<types::fe_index>
608
622 void
623 set_future_fe_indices(const std::vector<types::fe_index> &future_fe_indices);
624
635 std::vector<types::fe_index>
637
645 void
647
677 void
679
683 void
685
691 void
693
697 bool
699
705 bool
707
722 bool
724
731 void
733
737 void
739
792 void
793 renumber_dofs(const std::vector<types::global_dof_index> &new_numbers);
794
799 void
800 renumber_dofs(const unsigned int level,
801 const std::vector<types::global_dof_index> &new_numbers);
802
831 unsigned int
833
846 unsigned int
848
849 /*--------------------------------------*/
850
854
856
861 begin(const unsigned int level = 0) const;
862
880 begin_active(const unsigned int level = 0) const;
881
887 end() const;
888
894 end(const unsigned int level) const;
895
902 end_active(const unsigned int level) const;
903
909 begin_mg(const unsigned int level = 0) const;
910
916 end_mg(const unsigned int level) const;
917
923 end_mg() const;
925
929
943
986
1000
1017 cell_iterators_on_level(const unsigned int level) const;
1018
1035 active_cell_iterators_on_level(const unsigned int level) const;
1036
1053 mg_cell_iterators_on_level(const unsigned int level) const;
1054
1056
1057
1058 /*---------------------------------------*/
1059
1060
1085 n_dofs() const;
1086
1095 n_dofs(const unsigned int level) const;
1096
1103
1115 template <typename number>
1118 const std::map<types::boundary_id, const Function<spacedim, number> *>
1119 &boundary_ids) const;
1120
1126 n_boundary_dofs(const std::set<types::boundary_id> &boundary_ids) const;
1127
1143 const BlockInfo &
1144 block_info() const;
1145
1167
1173 const IndexSet &
1175
1180 const IndexSet &
1181 locally_owned_mg_dofs(const unsigned int level) const;
1182
1188 get_fe(const types::fe_index index = 0) const;
1189
1196
1202
1206 MPI_Comm
1208
1215 "Access the MPI communicator with get_mpi_communicator() instead.")
1216 MPI_Comm
1218
1235 void
1237
1253 void
1255
1264 virtual std::size_t
1266
1272 template <class Archive>
1273 void
1274 save(Archive &ar, const unsigned int version) const;
1275
1281 template <class Archive>
1282 void
1283 load(Archive &ar, const unsigned int version);
1284
1285#ifdef DOXYGEN
1291 template <class Archive>
1292 void
1293 serialize(Archive &archive, const unsigned int version);
1294#else
1295 // This macro defines the serialize() method that is compatible with
1296 // the templated save() and load() method that have been implemented.
1297 BOOST_SERIALIZATION_SPLIT_MEMBER()
1298#endif
1299
1314 int,
1315 << "The given level " << arg1
1316 << " is not in the valid range!");
1323 << "The given list of new dof indices is not consecutive: "
1324 << "the index " << arg1 << " does not exist.");
1329 int,
1330 int,
1331 << "The mesh contains a cell with an active FE index of "
1332 << arg1 << ", but the finite element collection only has "
1333 << arg2 << " elements");
1334
1340 "The current function doesn't make sense when used with a "
1341 "DoFHandler without hp-capabilities.");
1342
1348 "The current function has not yet been implemented for a "
1349 "DoFHandler with hp-capabilities.");
1350
1351private:
1359 {
1360 public:
1365
1371 void
1372 init(const unsigned int coarsest_level,
1373 const unsigned int finest_level,
1374 const unsigned int dofs_per_vertex);
1375
1379 unsigned int
1381
1385 unsigned int
1387
1393 access_index(const unsigned int level,
1394 const unsigned int dof_number,
1395 const unsigned int dofs_per_vertex);
1396
1397 private:
1401 unsigned int coarsest_level;
1402
1406 unsigned int finest_level;
1407
1417 std::unique_ptr<types::global_dof_index[]> indices;
1418 };
1419
1427 {
1432 std::vector<std::pair<const cell_iterator, const types::fe_index>>
1434
1439 std::vector<std::pair<const cell_iterator, const types::fe_index>>
1441
1446 std::map<const cell_iterator, const types::fe_index>
1448
1454 std::vector<types::fe_index> active_fe_indices;
1455
1461 std::unique_ptr<
1462 parallel::distributed::
1463 CellDataTransfer<dim, spacedim, std::vector<types::fe_index>>>
1465 };
1466
1471
1477
1483
1490
1495 std::unique_ptr<::internal::DoFHandlerImplementation::Policy::
1496 PolicyBase<dim, spacedim>>
1498
1507
1511 std::vector<::internal::DoFHandlerImplementation::NumberCache>
1513
1519 mutable std::vector<std::array<std::vector<types::global_dof_index>, dim + 1>>
1521
1530 mutable std::vector<std::array<std::vector<offset_type>, dim + 1>>
1532
1538 mutable std::array<std::vector<types::fe_index>, dim + 1>
1540
1544 mutable std::array<std::vector<offset_type>, dim + 1> hp_object_fe_ptr;
1545
1550 mutable std::vector<std::vector<types::fe_index>> hp_cell_active_fe_indices;
1551
1556 mutable std::vector<std::vector<types::fe_index>> hp_cell_future_fe_indices;
1557
1562 std::vector<MGVertexDoFs> mg_vertex_dofs;
1563
1567 std::vector<
1568 std::unique_ptr<::internal::DoFHandlerImplementation::DoFLevel<dim>>>
1570
1574 std::unique_ptr<::internal::DoFHandlerImplementation::DoFFaces<dim>>
1576
1581 std::unique_ptr<ActiveFEIndexTransfer> active_fe_index_transfer;
1582
1587 std::vector<boost::signals2::connection> tria_listeners;
1588
1594 std::vector<boost::signals2::connection> tria_listeners_for_transfer;
1595
1599 void
1601
1605 void
1607
1611 void
1613
1617 void
1619
1631 void
1633
1646 void
1648
1658 void
1660
1669 void
1671
1680 void
1682
1691 void
1693
1694
1695 // Make accessor objects friends.
1696 template <int, int, int, bool>
1697 friend class ::DoFAccessor;
1698 template <int, int, bool>
1699 friend class ::DoFCellAccessor;
1700 friend struct ::internal::DoFAccessorImplementation::Implementation;
1701 friend struct ::internal::DoFCellAccessorImplementation::Implementation;
1702
1703 // Likewise for DoFLevel objects since they need to access the vertex dofs
1704 // in the functions that set and retrieve vertex dof indices.
1705 friend struct ::internal::DoFHandlerImplementation::Implementation;
1706 friend struct ::internal::hp::DoFHandlerImplementation::Implementation;
1707 friend struct ::internal::DoFHandlerImplementation::Policy::
1708 Implementation;
1709
1710 // explicitly check for sensible template arguments, but not on windows
1711 // because MSVC creates bogus warnings during normal compilation
1712#ifndef DEAL_II_MSVC
1713 static_assert(dim <= spacedim,
1714 "The dimension <dim> of a DoFHandler must be less than or "
1715 "equal to the space dimension <spacedim> in which it lives.");
1716#endif
1717};
1718
1719namespace internal
1720{
1721 namespace hp
1722 {
1724 {
1736 template <int dim, int spacedim>
1737 void
1739
1764 template <int dim, int spacedim = dim>
1765 unsigned int
1767 const typename DoFHandler<dim, spacedim>::cell_iterator &parent);
1768
1774 "No FiniteElement has been found in your FECollection that is "
1775 "dominated by all children of a cell you are trying to coarsen!");
1776 } // namespace DoFHandlerImplementation
1777 } // namespace hp
1778} // namespace internal
1779
1780#ifndef DOXYGEN
1781
1782/* ----------------------- Inline functions ----------------------------------
1783 */
1784
1785
1786template <int dim, int spacedim>
1789{
1790 return hp_capability_enabled;
1791}
1792
1793
1794
1795template <int dim, int spacedim>
1798{
1799 return mg_number_cache.size() > 0;
1800}
1801
1802
1803
1804template <int dim, int spacedim>
1807{
1808 return number_cache.n_global_dofs > 0;
1809}
1810
1811
1812
1813template <int dim, int spacedim>
1816{
1817 return number_cache.n_global_dofs;
1818}
1819
1820
1821
1822template <int dim, int spacedim>
1825 DoFHandler<dim, spacedim>::n_dofs(const unsigned int level) const
1826{
1827 Assert(has_level_dofs(),
1828 ExcMessage(
1829 "n_dofs(level) can only be called after distribute_mg_dofs()"));
1830 Assert(level < mg_number_cache.size(), ExcInvalidLevel(level));
1831 return mg_number_cache[level].n_global_dofs;
1832}
1833
1834
1835
1836template <int dim, int spacedim>
1839{
1840 return number_cache.n_locally_owned_dofs;
1841}
1842
1843
1844
1845template <int dim, int spacedim>
1848{
1849 return number_cache.locally_owned_dofs;
1850}
1851
1852
1853
1854template <int dim, int spacedim>
1857 const unsigned int level) const
1858{
1859 Assert(level < this->get_triangulation().n_global_levels(),
1860 ExcMessage("The given level index exceeds the number of levels "
1861 "present in the triangulation"));
1862 Assert(
1863 mg_number_cache.size() == this->get_triangulation().n_global_levels(),
1864 ExcMessage(
1865 "The level dofs are not set up properly! Did you call distribute_mg_dofs()?"));
1866 return mg_number_cache[level].locally_owned_dofs;
1867}
1868
1869
1870
1871template <int dim, int spacedim>
1874 const types::fe_index number) const
1875{
1876 Assert(fe_collection.size() > 0,
1877 ExcMessage("No finite element collection is associated with "
1878 "this DoFHandler"));
1879 return fe_collection[number];
1880}
1881
1882
1883
1884template <int dim, int spacedim>
1888{
1889 return fe_collection;
1890}
1891
1892
1893
1894template <int dim, int spacedim>
1898{
1899 Assert(tria != nullptr,
1900 ExcMessage("This DoFHandler object has not been associated "
1901 "with a triangulation."));
1902 return *tria;
1903}
1904
1905
1906
1907template <int dim, int spacedim>
1910{
1911 Assert(tria != nullptr,
1912 ExcMessage("This DoFHandler object has not been associated "
1913 "with a triangulation."));
1914 return tria->get_mpi_communicator();
1915}
1916
1917
1918
1919template <int dim, int spacedim>
1922{
1923 return get_mpi_communicator();
1924}
1925
1926
1927
1928template <int dim, int spacedim>
1931{
1932 Assert(this->hp_capability_enabled == false, ExcNotImplementedWithHP());
1933
1934 return block_info_object;
1935}
1936
1937
1938
1939template <int dim, int spacedim>
1941template <typename number>
1943 const std::map<types::boundary_id, const Function<spacedim, number> *>
1944 &boundary_ids) const
1945{
1946 Assert(!(dim == 2 && spacedim == 3) || this->hp_capability_enabled == false,
1947 ExcNotImplementedWithHP());
1948
1949 // extract the set of boundary ids and forget about the function object
1950 // pointers
1951 std::set<types::boundary_id> boundary_ids_only;
1952 for (typename std::map<types::boundary_id,
1954 boundary_ids.begin();
1955 p != boundary_ids.end();
1956 ++p)
1957 boundary_ids_only.insert(p->first);
1958
1959 // then just hand everything over to the other function that does the work
1960 return n_boundary_dofs(boundary_ids_only);
1961}
1962
1963
1964
1965namespace internal
1966{
1974 template <int dim, int spacedim>
1975 std::string
1976 policy_to_string(const ::internal::DoFHandlerImplementation::Policy::
1977 PolicyBase<dim, spacedim> &policy);
1978} // namespace internal
1979
1980
1981
1982template <int dim, int spacedim>
1984template <class Archive>
1985void DoFHandler<dim, spacedim>::save(Archive &ar, const unsigned int) const
1986{
1987 if (this->hp_capability_enabled)
1988 {
1989 ar &this->object_dof_indices;
1990 ar &this->object_dof_ptr;
1991
1992 ar &this->hp_cell_active_fe_indices;
1993 ar &this->hp_cell_future_fe_indices;
1994
1995 ar &hp_object_fe_ptr;
1996 ar &hp_object_fe_indices;
1997
1998 ar &number_cache;
1999
2000 ar &mg_number_cache;
2001
2002 // write out the number of triangulation cells and later check during
2003 // loading that this number is indeed correct; same with something that
2004 // identifies the policy
2005 const unsigned int n_cells = this->tria->n_cells();
2006 std::string policy_name =
2007 ::internal::policy_to_string(*this->policy);
2008
2009 ar &n_cells &policy_name;
2010 }
2011 else
2012 {
2013 ar &this->block_info_object;
2014 ar &number_cache;
2015
2016 ar &this->object_dof_indices;
2017 ar &this->object_dof_ptr;
2018
2019 // write out the number of triangulation cells and later check during
2020 // loading that this number is indeed correct; same with something that
2021 // identifies the FE and the policy
2022 unsigned int n_cells = this->tria->n_cells();
2023 std::string fe_name = this->get_fe(0).get_name();
2024 std::string policy_name = internal::policy_to_string(*this->policy);
2025
2026 ar &n_cells &fe_name &policy_name;
2027 }
2028}
2029
2030
2031
2032template <int dim, int spacedim>
2034template <class Archive>
2035void DoFHandler<dim, spacedim>::load(Archive &ar, const unsigned int)
2036{
2037 if (this->hp_capability_enabled)
2038 {
2039 ar &this->object_dof_indices;
2040 ar &this->object_dof_ptr;
2041
2042 ar &this->hp_cell_active_fe_indices;
2043 ar &this->hp_cell_future_fe_indices;
2044
2045 ar &hp_object_fe_ptr;
2046 ar &hp_object_fe_indices;
2047
2048 ar &number_cache;
2049
2050 ar &mg_number_cache;
2051
2052 // these are the checks that correspond to the last block in the save()
2053 // function
2054 unsigned int n_cells;
2055 std::string policy_name;
2056
2057 ar &n_cells &policy_name;
2058
2060 n_cells == this->tria->n_cells(),
2061 ExcMessage(
2062 "The object being loaded into does not match the triangulation "
2063 "that has been stored previously."));
2065 policy_name == ::internal::policy_to_string(*this->policy),
2066 ExcMessage("The policy currently associated with this DoFHandler (" +
2067 ::internal::policy_to_string(*this->policy) +
2068 ") does not match the one that was associated with the "
2069 "DoFHandler previously stored (" +
2070 policy_name + ")."));
2071 }
2072 else
2073 {
2074 ar &this->block_info_object;
2075 ar &number_cache;
2076
2077 object_dof_indices.clear();
2078
2079 object_dof_ptr.clear();
2080
2081 ar &this->object_dof_indices;
2082 ar &this->object_dof_ptr;
2083
2084 // these are the checks that correspond to the last block in the save()
2085 // function
2086 unsigned int n_cells;
2087 std::string fe_name;
2088 std::string policy_name;
2089
2090 ar &n_cells &fe_name &policy_name;
2091
2093 n_cells == this->tria->n_cells(),
2094 ExcMessage(
2095 "The object being loaded into does not match the triangulation "
2096 "that has been stored previously."));
2098 fe_name == this->get_fe(0).get_name(),
2099 ExcMessage(
2100 "The finite element associated with this DoFHandler does not match "
2101 "the one that was associated with the DoFHandler previously stored."));
2102 AssertThrow(policy_name == internal::policy_to_string(*this->policy),
2103 ExcMessage(
2104 "The policy currently associated with this DoFHandler (" +
2105 internal::policy_to_string(*this->policy) +
2106 ") does not match the one that was associated with the "
2107 "DoFHandler previously stored (" +
2108 policy_name + ")."));
2109 }
2110}
2111
2112
2113
2114template <int dim, int spacedim>
2118 const unsigned int level,
2119 const unsigned int dof_number,
2120 const unsigned int dofs_per_vertex)
2121{
2122 Assert((level >= coarsest_level) && (level <= finest_level),
2123 ExcInvalidLevel(level));
2124 return indices[dofs_per_vertex * (level - coarsest_level) + dof_number];
2125}
2126
2127
2128
2129// Declare the existence of explicit instantiations of the class
2130// above. This is not strictly necessary, but tells the compiler to
2131// avoid instantiating templates that we know are instantiated in
2132// .cc files and so can be referenced without implicit
2133// instantiations.
2134//
2135// Unfortunately, this does not seem to work when building modules
2136// because the compiler (well, Clang at least) then just doesn't
2137// instantiate these classes at all, even though their members are
2138// defined and explicitly instantiated in a .cc file.
2139# ifndef DEAL_II_BUILDING_CXX20_MODULE
2140extern template class DoFHandler<1, 1>;
2141extern template class DoFHandler<1, 2>;
2142extern template class DoFHandler<1, 3>;
2143extern template class DoFHandler<2, 2>;
2144extern template class DoFHandler<2, 3>;
2145extern template class DoFHandler<3, 3>;
2146# endif
2147
2148#endif // DOXYGEN
2149
2151
2152#endif
*  *  const_iterator()=default
A small class collecting the different BlockIndices involved in global, multilevel and local computat...
Definition block_info.h:94
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
cell_iterator end() const
void pre_distributed_transfer_action()
void post_transfer_action()
::internal::DoFHandlerImplementation::Iterators< dim, spacedim, true > LevelSelector
virtual std::size_t memory_consumption() const
std::vector< types::fe_index > get_future_fe_indices() const
unsigned int max_couplings_between_dofs() 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()
static constexpr unsigned int dimension
static const types::fe_index default_fe_index
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
void set_active_fe_indices(const std::vector< unsigned int > &active_fe_indices)
bool has_active_dofs() const
std::vector< boost::signals2::connection > tria_listeners_for_transfer
level_cell_iterator end_mg() const
void renumber_dofs(const std::vector< types::global_dof_index > &new_numbers)
const FiniteElement< dim, spacedim > & get_fe(const types::fe_index index=0) const
static constexpr unsigned int space_dimension
const IndexSet & locally_owned_mg_dofs(const unsigned int level) const
void renumber_dofs(const unsigned int level, const std::vector< types::global_dof_index > &new_numbers)
level_cell_iterator begin_mg(const unsigned int level=0) 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()
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
active_cell_iterator begin_active(const unsigned int level=0) const
std::vector< types::fe_index > get_active_fe_indices() const
void distribute_mg_dofs()
active_cell_iterator end_active(const unsigned int level) const
bool has_hp_capabilities() const
void initialize_local_block_info()
types::global_dof_index n_dofs() const
void update_active_fe_table()
level_cell_iterator end_mg(const unsigned int level) const
cell_iterator end(const unsigned int level) const
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
cell_iterator begin(const unsigned int level=0) const
MPI_Comm get_mpi_communicator() const
std::array< std::vector< offset_type >, dim+1 > hp_object_fe_ptr
void clear()
void distribute_dofs(const hp::FECollection< dim, spacedim > &fe)
types::global_dof_index n_boundary_dofs(const std::map< types::boundary_id, const Function< spacedim, number > * > &boundary_ids) const
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
types::global_dof_index n_dofs(const unsigned int level) const
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)
unsigned int max_couplings_between_boundary_dofs() const
void setup_policy()
types::global_dof_index n_locally_owned_dofs() const
::internal::DoFHandlerImplementation::Iterators< dim, spacedim, false > ActiveSelector
types::global_dof_index n_boundary_dofs(const std::set< types::boundary_id > &boundary_ids) 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
#define DEAL_II_DEPRECATED
Definition config.h:286
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_DEPRECATED_WITH_COMMENT(comment)
Definition config.h:287
#define DEAL_II_CXX20_REQUIRES(condition)
Definition config.h:246
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
IteratorRange< active_cell_iterator > active_cell_iterators() const
IteratorRange< level_cell_iterator > mg_cell_iterators() const
IteratorRange< cell_iterator > cell_iterators_on_level(const unsigned int level) const
IteratorRange< cell_iterator > cell_iterators() const
IteratorRange< active_cell_iterator > active_cell_iterators_on_level(const unsigned int level) const
IteratorRange< level_cell_iterator > mg_cell_iterators_on_level(const unsigned int level) const
#define DeclException0(Exception0)
static ::ExceptionBase & ExcInvalidBoundaryIndicator()
static ::ExceptionBase & ExcOnlyAvailableWithHP()
#define Assert(cond, exc)
static ::ExceptionBase & ExcNotImplementedWithHP()
static ::ExceptionBase & ExcNewNumbersNotConsecutive(types::global_dof_index arg1)
static ::ExceptionBase & ExcInvalidFEIndex(int arg1, int arg2)
#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 & ExcNoFESelected()
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:15817
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.
unsigned int boundary_id
Definition types.h:159
unsigned short int fe_index
Definition types.h:70
unsigned int global_dof_index
Definition types.h:92
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