Reference documentation for deal.II version 9.1.1
\(\newcommand{\dealcoloneq}{\mathrel{\vcenter{:}}=}\)
dof_handler.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2005 - 2019 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_hp_dof_handler_h
17 #define dealii_hp_dof_handler_h
18 
19 
20 
21 #include <deal.II/base/config.h>
22 
23 #include <deal.II/base/exceptions.h>
24 #include <deal.II/base/function.h>
25 #include <deal.II/base/iterator_range.h>
26 #include <deal.II/base/smartpointer.h>
27 #include <deal.II/base/template_constraints.h>
28 
29 #include <deal.II/distributed/cell_data_transfer.templates.h>
30 
31 #include <deal.II/dofs/deprecated_function_map.h>
32 #include <deal.II/dofs/dof_accessor.h>
33 #include <deal.II/dofs/dof_iterator_selector.h>
34 #include <deal.II/dofs/number_cache.h>
35 
36 #include <deal.II/hp/dof_faces.h>
37 #include <deal.II/hp/dof_level.h>
38 #include <deal.II/hp/fe_collection.h>
39 
40 #include <map>
41 #include <memory>
42 #include <set>
43 #include <vector>
44 
45 DEAL_II_NAMESPACE_OPEN
46 
47 template <int dim, int spacedim>
48 class Triangulation;
49 
50 namespace internal
51 {
52  namespace DoFHandlerImplementation
53  {
54  struct Implementation;
55 
56  namespace Policy
57  {
58  template <int dim, int spacedim>
59  class PolicyBase;
60  struct Implementation;
61  } // namespace Policy
62  } // namespace DoFHandlerImplementation
63 
64  namespace hp
65  {
66  class DoFLevel;
67 
68  namespace DoFHandlerImplementation
69  {
70  struct Implementation;
71  }
72  } // namespace hp
73 } // namespace internal
74 
75 namespace internal
76 {
77  namespace DoFAccessorImplementation
78  {
79  struct Implementation;
80  }
81 
82  namespace DoFCellAccessorImplementation
83  {
84  struct Implementation;
85  }
86 } // namespace internal
87 
88 
89 
90 namespace hp
91 {
193  template <int dim, int spacedim = dim>
194  class DoFHandler : public Subscriptor
195  {
196  using ActiveSelector = ::internal::DoFHandlerImplementation::
197  Iterators<DoFHandler<dim, spacedim>, false>;
198  using LevelSelector = ::internal::DoFHandlerImplementation::
199  Iterators<DoFHandler<dim, spacedim>, true>;
200 
201  public:
214  using cell_accessor = typename ActiveSelector::CellAccessor;
215 
228  using face_accessor = typename ActiveSelector::FaceAccessor;
229 
237  using line_iterator = typename ActiveSelector::line_iterator;
238 
252  using active_line_iterator = typename ActiveSelector::active_line_iterator;
253 
261  using quad_iterator = typename ActiveSelector::quad_iterator;
262 
276  using active_quad_iterator = typename ActiveSelector::active_quad_iterator;
277 
285  using hex_iterator = typename ActiveSelector::hex_iterator;
286 
296  using active_hex_iterator = typename ActiveSelector::active_hex_iterator;
297 
302 #ifndef _MSC_VER
303  using active_cell_iterator = typename ActiveSelector::active_cell_iterator;
304 #else
307 #endif
308 
309  using level_cell_iterator = typename LevelSelector::cell_iterator;
310 
315 #ifndef _MSC_VER
316  using cell_iterator = typename ActiveSelector::cell_iterator;
317 #else
318  using cell_iterator =
320 #endif
321 
326  using face_iterator = typename ActiveSelector::face_iterator;
327 
332  using active_face_iterator = typename ActiveSelector::active_face_iterator;
333 
334  using level_cell_accessor = typename LevelSelector::CellAccessor;
335  using level_face_accessor = typename LevelSelector::FaceAccessor;
336 
337  using level_face_iterator = typename LevelSelector::face_iterator;
338 
342  static const unsigned int dimension = dim;
343 
347  static const unsigned int space_dimension = spacedim;
348 
352  static const bool is_hp_dof_handler = true;
353 
365  DEAL_II_DEPRECATED
368 
379  static const unsigned int default_fe_index = numbers::invalid_unsigned_int;
380 
381 
385  DoFHandler();
386 
391 
398  DoFHandler(const DoFHandler &) = delete;
399 
403  virtual ~DoFHandler() override;
404 
411  DoFHandler &
412  operator=(const DoFHandler &) = delete;
413 
418  void
421 
438  virtual void
440 
466  virtual void
468 
473  void
474  set_active_fe_indices(const std::vector<unsigned int> &active_fe_indices);
475 
481  void
482  get_active_fe_indices(std::vector<unsigned int> &active_fe_indices) const;
483 
489  virtual void
490  clear();
491 
544  void
545  renumber_dofs(const std::vector<types::global_dof_index> &new_numbers);
546 
564  unsigned int
566 
579  unsigned int
581 
590  begin(const unsigned int level = 0) const;
591 
609  begin_active(const unsigned int level = 0) const;
610 
616  end() const;
617 
623  end(const unsigned int level) const;
624 
631  end_active(const unsigned int level) const;
632 
648  cell_iterators() const;
649 
691  active_cell_iterators() const;
692 
709  cell_iterators_on_level(const unsigned int level) const;
710 
727  active_cell_iterators_on_level(const unsigned int level) const;
728 
729  /*
730  * @}
731  */
732 
733  /*---------------------------------------*/
734 
735 
761  n_dofs() const;
762 
769  n_dofs(const unsigned int level) const;
770 
775  n_boundary_dofs() const;
776 
787  template <typename number>
790  const std::map<types::boundary_id, const Function<spacedim, number> *>
791  &boundary_ids) const;
792 
798  n_boundary_dofs(const std::set<types::boundary_id> &boundary_ids) const;
799 
818  n_locally_owned_dofs() const;
819 
825  const IndexSet &
826  locally_owned_dofs() const;
827 
841  const std::vector<IndexSet> &
843 
860  const std::vector<types::global_dof_index> &
862 
869  const IndexSet &
870  locally_owned_mg_dofs(const unsigned int level) const;
871 
878  const std::vector<IndexSet> &
879  locally_owned_mg_dofs_per_processor(const unsigned int level) const;
880 
887  DEAL_II_DEPRECATED
889  get_fe() const;
890 
896  get_fe(const unsigned int index) const;
897 
903  get_fe_collection() const;
904 
910  get_triangulation() const;
911 
920  virtual std::size_t
921  memory_consumption() const;
922 
939  void
941 
957  void
959 
964  template <class Archive>
965  void
966  save(Archive &ar, const unsigned int version) const;
967 
972  template <class Archive>
973  void
974  load(Archive &ar, const unsigned int version);
975 
976  BOOST_SERIALIZATION_SPLIT_MEMBER()
977 
978 
994  int,
995  << "The matrix has the wrong dimension " << arg1);
1004  types::global_dof_index,
1005  << "The given list of new dof indices is not consecutive: "
1006  << "the index " << arg1 << " does not exist.");
1011  int,
1012  int,
1013  << "The mesh contains a cell with an active_fe_index of "
1014  << arg1 << ", but the finite element collection only has "
1015  << arg2 << " elements");
1020  int,
1021  << "The given level " << arg1
1022  << " is not in the valid range!");
1031  int,
1032  << "You tried to do something on level " << arg1
1033  << ", but this level is empty.");
1034 
1035  private:
1039  SmartPointer<const Triangulation<dim, spacedim>, DoFHandler<dim, spacedim>>
1041 
1045  hp::FECollection<dim, spacedim> fe_collection;
1046 
1051  std::unique_ptr<::internal::DoFHandlerImplementation::Policy::
1052  PolicyBase<dim, spacedim>>
1054 
1055 
1059  void
1061 
1065  void
1066  clear_space();
1067 
1068  template <int structdim>
1069  types::global_dof_index
1070  get_dof_index(const unsigned int obj_level,
1071  const unsigned int obj_index,
1072  const unsigned int fe_index,
1073  const unsigned int local_index) const;
1074 
1075  template <int structdim>
1076  void
1077  set_dof_index(const unsigned int obj_level,
1078  const unsigned int obj_index,
1079  const unsigned int fe_index,
1080  const unsigned int local_index,
1081  const types::global_dof_index global_index) const;
1082 
1090  void
1092 
1101  void
1103 
1111  void
1113 
1123  void
1125 
1134  void
1136 
1145  void
1147 
1156  void
1158 
1167  void
1169 
1174  std::vector<std::unique_ptr<::internal::hp::DoFLevel>> levels;
1175 
1180  std::unique_ptr<::internal::hp::DoFIndicesOnFaces<dim>> faces;
1181 
1189  ::internal::DoFHandlerImplementation::NumberCache number_cache;
1190 
1196  std::vector<::internal::DoFHandlerImplementation::NumberCache>
1198 
1211  std::vector<types::global_dof_index> vertex_dofs;
1212 
1225  std::vector<unsigned int> vertex_dof_offsets;
1226 
1234  {
1239  std::map<const cell_iterator, const unsigned int>
1241 
1246  std::map<const cell_iterator, const unsigned int> refined_cells_fe_index;
1247 
1252  std::map<const cell_iterator, const unsigned int>
1254 
1260  std::vector<unsigned int> active_fe_indices;
1261 
1267  std::unique_ptr<
1268  parallel::distributed::
1269  CellDataTransfer<dim, spacedim, std::vector<unsigned int>>>
1271  };
1272 
1277  std::unique_ptr<ActiveFEIndexTransfer> active_fe_index_transfer;
1278 
1283  std::vector<boost::signals2::connection> tria_listeners;
1284 
1288  template <int, class, bool>
1289  friend class ::DoFAccessor;
1290  template <class, bool>
1291  friend class ::DoFCellAccessor;
1292  friend struct ::internal::DoFAccessorImplementation::Implementation;
1293  friend struct ::internal::DoFCellAccessorImplementation::
1294  Implementation;
1295 
1300  template <int>
1301  friend class ::internal::hp::DoFIndicesOnFacesOrEdges;
1302  friend struct ::internal::hp::DoFHandlerImplementation::
1303  Implementation;
1304  friend struct ::internal::DoFHandlerImplementation::Policy::
1305  Implementation;
1306  };
1307 
1308 
1309 
1310 #ifndef DOXYGEN
1311 
1312 
1313  /* ----------------------- Inline functions ----------------------------------
1314  */
1315 
1316 
1317  template <int dim, int spacedim>
1318  template <typename number>
1321  const std::map<types::boundary_id, const Function<spacedim, number> *>
1322  &boundary_ids) const
1323  {
1324  // extract the set of boundary ids and forget about the function object
1325  // pointers
1326  std::set<types::boundary_id> boundary_ids_only;
1327  for (typename std::map<types::boundary_id,
1328  const Function<spacedim, number> *>::const_iterator
1329  p = boundary_ids.begin();
1330  p != boundary_ids.end();
1331  ++p)
1332  boundary_ids_only.insert(p->first);
1333 
1334  // then just hand everything over to the other function that does the work
1335  return n_boundary_dofs(boundary_ids_only);
1336  }
1337 }
1338 
1339 
1340 namespace internal
1341 {
1349  template <int dim, int spacedim>
1350  std::string
1351  policy_to_string(const ::internal::DoFHandlerImplementation::Policy::
1352  PolicyBase<dim, spacedim> &policy);
1353 } // namespace internal
1354 
1355 
1356 namespace hp
1357 {
1358  template <int dim, int spacedim>
1359  template <class Archive>
1360  void
1361  DoFHandler<dim, spacedim>::save(Archive &ar, unsigned int) const
1362  {
1363  ar &vertex_dofs;
1364  ar &vertex_dof_offsets;
1365  ar &number_cache;
1366  ar &mg_number_cache;
1367 
1368  // some versions of gcc have trouble with loading vectors of
1369  // std::unique_ptr objects because std::unique_ptr does not
1370  // have a copy constructor. do it one level at a time
1371  const unsigned int n_levels = levels.size();
1372  ar & n_levels;
1373  for (unsigned int i = 0; i < n_levels; ++i)
1374  ar &levels[i];
1375 
1376  // boost dereferences a nullptr when serializing a nullptr
1377  // at least up to 1.65.1. This causes problems with clang-5.
1378  // Therefore, work around it.
1379  bool faces_is_nullptr = (faces.get() == nullptr);
1380  ar & faces_is_nullptr;
1381  if (!faces_is_nullptr)
1382  ar &faces;
1383 
1384  // write out the number of triangulation cells and later check during
1385  // loading that this number is indeed correct; same with something that
1386  // identifies the policy
1387  const unsigned int n_cells = tria->n_cells();
1388  std::string policy_name = ::internal::policy_to_string(*policy);
1389 
1390  ar &n_cells &policy_name;
1391  }
1392 
1393 
1394 
1395  template <int dim, int spacedim>
1396  template <class Archive>
1397  void
1398  DoFHandler<dim, spacedim>::load(Archive &ar, unsigned int)
1399  {
1400  ar &vertex_dofs;
1401  ar &vertex_dof_offsets;
1402  ar &number_cache;
1403  ar &mg_number_cache;
1404 
1405  // boost::serialization can restore pointers just fine, but if the
1406  // pointer object still points to something useful, that object is not
1407  // destroyed and we end up with a memory leak. consequently, first delete
1408  // previous content before re-loading stuff
1409  levels.clear();
1410  faces.reset();
1411 
1412  // some versions of gcc have trouble with loading vectors of
1413  // std::unique_ptr objects because std::unique_ptr does not
1414  // have a copy constructor. do it one level at a time
1415  unsigned int size;
1416  ar & size;
1417  levels.resize(size);
1418  for (unsigned int i = 0; i < size; ++i)
1419  {
1420  std::unique_ptr<::internal::hp::DoFLevel> level;
1421  ar & level;
1422  levels[i] = std::move(level);
1423  }
1424 
1425  // Workaround for nullptr, see in save().
1426  bool faces_is_nullptr = true;
1427  ar & faces_is_nullptr;
1428  if (!faces_is_nullptr)
1429  ar &faces;
1430 
1431  // these are the checks that correspond to the last block in the save()
1432  // function
1433  unsigned int n_cells;
1434  std::string policy_name;
1435 
1436  ar &n_cells &policy_name;
1437 
1438  AssertThrow(
1439  n_cells == tria->n_cells(),
1440  ExcMessage(
1441  "The object being loaded into does not match the triangulation "
1442  "that has been stored previously."));
1443  AssertThrow(policy_name == ::internal::policy_to_string(*policy),
1444  ExcMessage(
1445  "The policy currently associated with this DoFHandler (" +
1446  ::internal::policy_to_string(*policy) +
1447  ") does not match the one that was associated with the "
1448  "DoFHandler previously stored (" +
1449  policy_name + ")."));
1450  }
1451 
1452  template <int dim, int spacedim>
1455  {
1456  return number_cache.n_global_dofs;
1457  }
1458 
1459 
1460 
1461  template <int dim, int spacedim>
1463  DoFHandler<dim, spacedim>::n_dofs(const unsigned int) const
1464  {
1465  Assert(false, ExcNotImplemented());
1467  }
1468 
1469 
1470 
1471  template <int dim, int spacedim>
1474  {
1475  return number_cache.n_locally_owned_dofs;
1476  }
1477 
1478 
1479 
1480  template <int dim, int spacedim>
1481  const IndexSet &
1483  {
1484  return number_cache.locally_owned_dofs;
1485  }
1486 
1487 
1488 
1489  template <int dim, int spacedim>
1490  const std::vector<types::global_dof_index> &
1492  {
1493  return number_cache.n_locally_owned_dofs_per_processor;
1494  }
1495 
1496 
1497 
1498  template <int dim, int spacedim>
1499  const std::vector<IndexSet> &
1501  {
1502  return number_cache.locally_owned_dofs_per_processor;
1503  }
1504 
1505 
1506 
1507  template <int dim, int spacedim>
1508  const IndexSet &
1510  const unsigned int level) const
1511  {
1512  Assert(false, ExcNotImplemented());
1513  (void)level;
1514  Assert(level < this->get_triangulation().n_global_levels(),
1515  ExcMessage("invalid level in locally_owned_mg_dofs"));
1516  return mg_number_cache[0].locally_owned_dofs;
1517  }
1518 
1519 
1520  template <int dim, int spacedim>
1521  const std::vector<IndexSet> &
1523  const unsigned int level) const
1524  {
1525  Assert(false, ExcNotImplemented());
1526  (void)level;
1527  Assert(level < this->get_triangulation().n_global_levels(),
1528  ExcMessage("invalid level in locally_owned_mg_dofs_per_processor"));
1529  return mg_number_cache[0].locally_owned_dofs_per_processor;
1530  }
1531 
1532 
1533 
1534  template <int dim, int spacedim>
1535  inline const hp::FECollection<dim, spacedim> &
1537  {
1538  Assert(fe_collection.size() > 0,
1539  ExcMessage("No finite element collection is associated with "
1540  "this DoFHandler"));
1541  return fe_collection;
1542  }
1543 
1544 
1545 
1546  template <int dim, int spacedim>
1547  inline const FiniteElement<dim, spacedim> &
1548  DoFHandler<dim, spacedim>::get_fe(const unsigned int number) const
1549  {
1550  Assert(fe_collection.size() > 0,
1551  ExcMessage("No finite element collection is associated with "
1552  "this DoFHandler"));
1553  return fe_collection[number];
1554  }
1555 
1556 
1557 
1558  template <int dim, int spacedim>
1559  inline const hp::FECollection<dim, spacedim> &
1561  {
1562  Assert(fe_collection.size() > 0,
1563  ExcMessage("No finite element collection is associated with "
1564  "this DoFHandler"));
1565  return fe_collection;
1566  }
1567 
1568 
1569 
1570  template <int dim, int spacedim>
1571  inline const Triangulation<dim, spacedim> &
1573  {
1574  Assert(tria != nullptr,
1575  ExcMessage("This DoFHandler object has not been associated "
1576  "with a triangulation."));
1577  return *tria;
1578  }
1579 
1580 #endif
1581 
1582 } // namespace hp
1583 
1584 DEAL_II_NAMESPACE_CLOSE
1585 
1586 #endif
cell_iterator begin(const unsigned int level=0) const
IteratorRange< active_cell_iterator > active_cell_iterators_on_level(const unsigned int level) const
void post_refinement_action()
void get_active_fe_indices(std::vector< unsigned int > &active_fe_indices) const
const std::vector< IndexSet > & locally_owned_mg_dofs_per_processor(const unsigned int level) const
types::global_dof_index n_locally_owned_dofs() const
virtual void distribute_dofs(const hp::FECollection< dim, spacedim > &fe)
static const unsigned int invalid_unsigned_int
Definition: types.h:173
typename ActiveSelector::face_iterator face_iterator
Definition: dof_handler.h:326
#define DeclException2(Exception2, type1, type2, outsequence)
Definition: exceptions.h:541
static ::ExceptionBase & ExcInvalidFEIndex(int arg1, int arg2)
std::vector< unsigned int > active_fe_indices
Definition: dof_handler.h:1260
void renumber_dofs(const std::vector< types::global_dof_index > &new_numbers)
std::vector<::internal::DoFHandlerImplementation::NumberCache > mg_number_cache
Definition: dof_handler.h:1197
virtual std::size_t memory_consumption() const
void set_active_fe_indices(const std::vector< unsigned int > &active_fe_indices)
::internal::DoFHandlerImplementation::NumberCache number_cache
Definition: dof_handler.h:1189
static ::ExceptionBase & ExcGridsDoNotMatch()
std::vector< std::unique_ptr<::internal::hp::DoFLevel > > levels
Definition: dof_handler.h:1174
const hp::FECollection< dim, spacedim > & get_fe() const
std::map< const cell_iterator, const unsigned int > refined_cells_fe_index
Definition: dof_handler.h:1246
const std::vector< types::global_dof_index > & n_locally_owned_dofs_per_processor() const
void pre_refinement_action()
active_cell_iterator begin_active(const unsigned int level=0) const
std::unique_ptr<::internal::hp::DoFIndicesOnFaces< dim > > faces
Definition: dof_handler.h:1180
static ::ExceptionBase & ExcFunctionNotUseful()
std::map< const cell_iterator, const unsigned int > coarsened_cells_fe_index
Definition: dof_handler.h:1253
void setup_policy_and_listeners()
static ::ExceptionBase & ExcNewNumbersNotConsecutive(types::global_dof_index arg1)
STL namespace.
typename ActiveSelector::CellAccessor cell_accessor
Definition: dof_handler.h:214
#define AssertThrow(cond, exc)
Definition: exceptions.h:1519
std::unique_ptr< ActiveFEIndexTransfer > active_fe_index_transfer
Definition: dof_handler.h:1277
std::vector< boost::signals2::connection > tria_listeners
Definition: dof_handler.h:1283
virtual void clear()
std::unique_ptr< parallel::distributed::CellDataTransfer< dim, spacedim, std::vector< unsigned int > > > cell_data_transfer
Definition: dof_handler.h:1270
static const unsigned int dimension
Definition: dof_handler.h:342
SmartPointer< const Triangulation< dim, spacedim >, DoFHandler< dim, spacedim > > tria
Definition: dof_handler.h:1040
static const unsigned int default_fe_index
Definition: dof_handler.h:379
void pre_active_fe_index_transfer()
std::unique_ptr<::internal::DoFHandlerImplementation::Policy::PolicyBase< dim, spacedim > > policy
Definition: dof_handler.h:1053
void post_distributed_serialization_of_active_fe_indices()
typename ActiveSelector::active_cell_iterator active_cell_iterator
Definition: dof_handler.h:303
static ::ExceptionBase & ExcNoFESelected()
static ::ExceptionBase & ExcMessage(std::string arg1)
typename ActiveSelector::active_quad_iterator active_quad_iterator
Definition: dof_handler.h:276
typename ActiveSelector::quad_iterator quad_iterator
Definition: dof_handler.h:261
typename ActiveSelector::cell_iterator cell_iterator
Definition: dof_handler.h:316
static const unsigned int space_dimension
Definition: dof_handler.h:347
#define DeclException1(Exception1, type1, outsequence)
Definition: exceptions.h:518
Definition: types.h:31
typename ActiveSelector::active_line_iterator active_line_iterator
Definition: dof_handler.h:252
#define Assert(cond, exc)
Definition: exceptions.h:1407
static ::ExceptionBase & ExcFacesHaveNoLevel()
IteratorRange< active_cell_iterator > active_cell_iterators() const
void prepare_for_serialization_of_active_fe_indices()
const IndexSet & locally_owned_dofs() const
void save(Archive &ar, const unsigned int version) const
const std::vector< IndexSet > & locally_owned_dofs_per_processor() const
#define DeclException0(Exception0)
Definition: exceptions.h:473
unsigned int max_couplings_between_boundary_dofs() const
virtual ~DoFHandler() override
void post_active_fe_index_transfer()
static ::ExceptionBase & ExcInvalidLevel(int arg1)
const hp::FECollection< dim, spacedim > & get_fe_collection() const
static ::ExceptionBase & ExcInvalidBoundaryIndicator()
static const bool is_hp_dof_handler
Definition: dof_handler.h:352
Definition: hp.h:117
types::global_dof_index n_boundary_dofs() const
active_cell_iterator end_active(const unsigned int level) const
unsigned int global_dof_index
Definition: types.h:89
void initialize(const Triangulation< dim, spacedim > &tria, const hp::FECollection< dim, spacedim > &fe)
unsigned int max_couplings_between_dofs() const
void load(Archive &ar, const unsigned int version)
typename ActiveSelector::active_face_iterator active_face_iterator
Definition: dof_handler.h:332
hp::FECollection< dim, spacedim > fe_collection
Definition: dof_handler.h:1045
static ::ExceptionBase & ExcMatrixHasWrongSize(int arg1)
const Triangulation< dim, spacedim > & get_triangulation() const
void post_distributed_active_fe_index_transfer()
types::global_dof_index n_dofs() const
IteratorRange< cell_iterator > cell_iterators_on_level(const unsigned int level) const
static ::ExceptionBase & ExcNotImplemented()
std::map< const cell_iterator, const unsigned int > persisting_cells_fe_index
Definition: dof_handler.h:1240
const types::global_dof_index invalid_dof_index
Definition: types.h:188
void create_active_fe_table()
std::vector< types::global_dof_index > vertex_dofs
Definition: dof_handler.h:1211
const IndexSet & locally_owned_mg_dofs(const unsigned int level) const
void pre_distributed_active_fe_index_transfer()
virtual void set_fe(const hp::FECollection< dim, spacedim > &fe)
unsigned int boundary_id
Definition: types.h:111
cell_iterator end() const
IteratorRange< cell_iterator > cell_iterators() const
void deserialize_active_fe_indices()
std::vector< unsigned int > vertex_dof_offsets
Definition: dof_handler.h:1225
static ::ExceptionBase & ExcEmptyLevel(int arg1)
typename ActiveSelector::FaceAccessor face_accessor
Definition: dof_handler.h:228
typename ActiveSelector::active_hex_iterator active_hex_iterator
Definition: dof_handler.h:296
DoFHandler & operator=(const DoFHandler &)=delete
typename ActiveSelector::line_iterator line_iterator
Definition: dof_handler.h:237
static const types::global_dof_index invalid_dof_index
Definition: dof_handler.h:366
typename ActiveSelector::hex_iterator hex_iterator
Definition: dof_handler.h:285