Reference documentation for deal.II version 9.0.0
dof_handler.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 1998 - 2018 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 at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_dof_handler_h
17 #define dealii_dof_handler_h
18 
19 
20 
21 #include <deal.II/base/config.h>
22 #include <deal.II/base/exceptions.h>
23 #include <deal.II/base/smartpointer.h>
24 #include <deal.II/base/index_set.h>
25 #include <deal.II/base/iterator_range.h>
26 #include <deal.II/dofs/block_info.h>
27 #include <deal.II/dofs/dof_iterator_selector.h>
28 #include <deal.II/dofs/number_cache.h>
29 #include <deal.II/dofs/dof_faces.h>
30 #include <deal.II/dofs/dof_levels.h>
31 #include <deal.II/dofs/function_map.h>
32 #include <deal.II/hp/fe_collection.h>
33 
34 #include <boost/serialization/split_member.hpp>
35 
36 #include <vector>
37 #include <map>
38 #include <set>
39 #include <memory>
40 
41 DEAL_II_NAMESPACE_OPEN
42 
43 template <int dim, int spacedim> class FiniteElement;
44 template <int dim, int spacedim> class Triangulation;
45 
46 namespace internal
47 {
48  namespace DoFHandlerImplementation
49  {
50  struct Implementation;
51 
52  namespace Policy
53  {
54  template <int dim, int spacedim> class PolicyBase;
55  struct Implementation;
56  }
57  }
58 
59  namespace DoFAccessorImplementation
60  {
61  struct Implementation;
62  }
63 
64  namespace DoFCellAccessorImplementation
65  {
66  struct Implementation;
67  }
68 }
69 
70 
191 template <int dim, int spacedim=dim>
192 class DoFHandler : public Subscriptor
193 {
194  typedef ::internal::DoFHandlerImplementation::Iterators<DoFHandler<dim,spacedim>, false> ActiveSelector;
195  typedef ::internal::DoFHandlerImplementation::Iterators<DoFHandler<dim,spacedim>, true> LevelSelector;
196 public:
197  typedef typename ActiveSelector::CellAccessor cell_accessor;
198  typedef typename ActiveSelector::FaceAccessor face_accessor;
199 
200  typedef typename ActiveSelector::line_iterator line_iterator;
201  typedef typename ActiveSelector::active_line_iterator active_line_iterator;
202 
203  typedef typename ActiveSelector::quad_iterator quad_iterator;
204  typedef typename ActiveSelector::active_quad_iterator active_quad_iterator;
205 
206  typedef typename ActiveSelector::hex_iterator hex_iterator;
207  typedef typename ActiveSelector::active_hex_iterator active_hex_iterator;
208 
229  typedef typename ActiveSelector::active_cell_iterator active_cell_iterator;
230 
257  typedef typename ActiveSelector::cell_iterator cell_iterator;
258 
275  typedef typename ActiveSelector::face_iterator face_iterator;
276 
288  typedef typename ActiveSelector::active_face_iterator active_face_iterator;
289 
290  typedef typename LevelSelector::CellAccessor level_cell_accessor;
291  typedef typename LevelSelector::FaceAccessor level_face_accessor;
292 
293  typedef typename LevelSelector::cell_iterator level_cell_iterator;
294  typedef typename LevelSelector::face_iterator level_face_iterator;
295 
296 
300  static const unsigned int dimension = dim;
301 
305  static const unsigned int space_dimension = spacedim;
306 
318  DEAL_II_DEPRECATED
320 
330  static const unsigned int default_fe_index = 0;
331 
337  DoFHandler ();
338 
343 
350  DoFHandler (const DoFHandler &) = delete;
351 
355  virtual ~DoFHandler ();
356 
363  DoFHandler &operator = (const DoFHandler &) = delete;
364 
370  const FiniteElement<dim,spacedim> &fe);
371 
410  virtual void distribute_dofs (const FiniteElement<dim,spacedim> &fe);
411 
420  DEAL_II_DEPRECATED
421  virtual void distribute_mg_dofs (const FiniteElement<dim, spacedim> &fe);
422 
428  virtual void distribute_mg_dofs ();
429 
435  bool has_level_dofs() const;
436 
451  bool has_active_dofs() const;
452 
460 
464  virtual void clear ();
465 
518  void renumber_dofs (const std::vector<types::global_dof_index> &new_numbers);
519 
524  void renumber_dofs (const unsigned int level,
525  const std::vector<types::global_dof_index> &new_numbers);
526 
555  unsigned int max_couplings_between_dofs () const;
556 
569  unsigned int max_couplings_between_boundary_dofs () const;
570 
571  /*--------------------------------------*/
572 
577  /*
578  * @{
579  */
580 
584  cell_iterator begin (const unsigned int level = 0) const;
585 
598  active_cell_iterator begin_active(const unsigned int level = 0) const;
599 
604  cell_iterator end () const;
605 
610  cell_iterator end (const unsigned int level) const;
611 
617  active_cell_iterator end_active (const unsigned int level) const;
618 
619 
624  level_cell_iterator begin_mg (const unsigned int level = 0) const;
625 
630  level_cell_iterator end_mg (const unsigned int level) const;
631 
636  level_cell_iterator end_mg () const;
637 
653 
695 
708 
724  IteratorRange<cell_iterator> cell_iterators_on_level (const unsigned int level) const;
725 
742 
759  IteratorRange<level_cell_iterator> mg_cell_iterators_on_level (const unsigned int level) const;
760 
761  /*
762  * @}
763  */
764 
765 
766  /*---------------------------------------*/
767 
768 
793 
801  types::global_dof_index n_dofs (const unsigned int level) const;
802 
807 
820  template <typename number>
822  n_boundary_dofs (const std::map<types::boundary_id, const Function<spacedim,number>*> &boundary_ids) const;
823 
829  n_boundary_dofs (const std::set<types::boundary_id> &boundary_ids) const;
830 
846  const BlockInfo &block_info() const;
847 
848 
868  unsigned int n_locally_owned_dofs() const;
869 
875  const IndexSet &locally_owned_dofs() const;
876 
881  const IndexSet &locally_owned_mg_dofs(const unsigned int level) const;
882 
896  const std::vector<IndexSet> &
898 
915  const std::vector<types::global_dof_index> &
917 
930  const std::vector<IndexSet> &
931  locally_owned_mg_dofs_per_processor (const unsigned int level) const;
932 
939  get_fe (const unsigned int index=0) const;
940 
948 
953 
962  virtual std::size_t memory_consumption () const;
963 
968  template <class Archive>
969  void save (Archive &ar, const unsigned int version) const;
970 
975  template <class Archive>
976  void load (Archive &ar, const unsigned int version);
977 
978  BOOST_SERIALIZATION_SPLIT_MEMBER()
979 
980 
995  types::global_dof_index,
996  << "The given list of new dof indices is not consecutive: "
997  << "the index " << arg1 << " does not exist.");
1003  int,
1004  << "The given level " << arg1
1005  << " is not in the valid range!");
1016  int,
1017  << "You tried to do something on level " << arg1
1018  << ", but this level is empty.");
1019 
1020 
1021 private:
1022 
1027 
1031  SmartPointer<const Triangulation<dim,spacedim>,DoFHandler<dim,spacedim> >
1033 
1034 
1039  hp::FECollection<dim,spacedim> fe_collection;
1040 
1045  std::unique_ptr<::internal::DoFHandlerImplementation::Policy::PolicyBase<dim,spacedim> > policy;
1046 
1054  ::internal::DoFHandlerImplementation::NumberCache number_cache;
1055 
1059  std::vector<::internal::DoFHandlerImplementation::NumberCache> mg_number_cache;
1060 
1068  {
1069  public:
1073  MGVertexDoFs ();
1074 
1080  void init (const unsigned int coarsest_level,
1081  const unsigned int finest_level,
1082  const unsigned int dofs_per_vertex);
1083 
1087  unsigned int get_coarsest_level () const;
1088 
1092  unsigned int get_finest_level () const;
1093 
1099  get_index (const unsigned int level,
1100  const unsigned int dof_number,
1101  const unsigned int dofs_per_vertex) const;
1102 
1107  void set_index (const unsigned int level,
1108  const unsigned int dof_number,
1109  const unsigned int dofs_per_vertex,
1110  const types::global_dof_index index);
1111 
1112  private:
1116  unsigned int coarsest_level;
1117 
1121  unsigned int finest_level;
1122 
1132  std::unique_ptr<types::global_dof_index[]> indices;
1133  };
1134 
1138  void clear_space ();
1139 
1143  void clear_mg_space ();
1144 
1145  template <int structdim>
1146  types::global_dof_index get_dof_index (const unsigned int obj_level,
1147  const unsigned int obj_index,
1148  const unsigned int fe_index,
1149  const unsigned int local_index) const;
1150 
1151  template <int structdim>
1152  void set_dof_index (const unsigned int obj_level,
1153  const unsigned int obj_index,
1154  const unsigned int fe_index,
1155  const unsigned int local_index,
1156  const types::global_dof_index global_index) const;
1157 
1161  std::vector<types::global_dof_index> vertex_dofs;
1162 
1167  std::vector<MGVertexDoFs> mg_vertex_dofs;
1168 
1173  std::vector<std::unique_ptr<::internal::DoFHandlerImplementation::DoFLevel<dim> > > levels;
1174 
1175  std::vector<std::unique_ptr<::internal::DoFHandlerImplementation::DoFLevel<dim> > > mg_levels;
1176 
1182  std::unique_ptr<::internal::DoFHandlerImplementation::DoFFaces<dim> > faces;
1183 
1184  std::unique_ptr<::internal::DoFHandlerImplementation::DoFFaces<dim> > mg_faces;
1185 
1189  template <int, class, bool> friend class DoFAccessor;
1190  template <class, bool> friend class DoFCellAccessor;
1191  friend struct ::internal::DoFAccessorImplementation::Implementation;
1192  friend struct ::internal::DoFCellAccessorImplementation::Implementation;
1193 
1194  friend struct ::internal::DoFHandlerImplementation::Implementation;
1195  friend struct ::internal::DoFHandlerImplementation::Policy::Implementation;
1196 
1197  // explicitly check for sensible template arguments, but not on windows
1198  // because MSVC creates bogus warnings during normal compilation
1199 #ifndef DEAL_II_MSVC
1200  static_assert (dim<=spacedim,
1201  "The dimension <dim> of a DoFHandler must be less than or "
1202  "equal to the space dimension <spacedim> in which it lives.");
1203 #endif
1204 };
1205 
1206 
1207 
1208 
1209 #ifndef DOXYGEN
1210 
1211 /* ----------------------- Inline functions ---------------------------------- */
1212 
1213 
1214 template <int dim, int spacedim>
1215 inline
1216 bool
1218 {
1219  return mg_number_cache.size()>0;
1220 }
1221 
1222 
1223 
1224 template <int dim, int spacedim>
1225 inline
1226 bool
1228 {
1229  return number_cache.n_global_dofs>0;
1230 }
1231 
1232 
1233 
1234 template <int dim, int spacedim>
1235 inline
1238 {
1239  return number_cache.n_global_dofs;
1240 }
1241 
1242 
1243 
1244 template <int dim, int spacedim>
1245 inline
1247 {
1248  Assert(has_level_dofs(), ExcMessage("n_dofs(level) can only be called after distribute_mg_dofs()"));
1249  Assert (level < mg_number_cache.size (), ExcInvalidLevel (level));
1250  return mg_number_cache[level].n_global_dofs;
1251 }
1252 
1253 
1254 
1255 template <int dim, int spacedim>
1256 unsigned int
1258 {
1259  return number_cache.n_locally_owned_dofs;
1260 }
1261 
1262 
1263 
1264 template <int dim, int spacedim>
1265 const IndexSet &
1267 {
1268  return number_cache.locally_owned_dofs;
1269 }
1270 
1271 
1272 
1273 template <int dim, int spacedim>
1274 const IndexSet &
1276 {
1277  Assert(level < this->get_triangulation().n_global_levels(),
1278  ExcMessage("invalid level in locally_owned_mg_dofs"));
1279  return mg_number_cache[level].locally_owned_dofs;
1280 }
1281 
1282 
1283 
1284 template <int dim, int spacedim>
1285 const std::vector<types::global_dof_index> &
1287 {
1288  return number_cache.n_locally_owned_dofs_per_processor;
1289 }
1290 
1291 
1292 
1293 template <int dim, int spacedim>
1294 const std::vector<IndexSet> &
1296 {
1297  return number_cache.locally_owned_dofs_per_processor;
1298 }
1299 
1300 
1301 
1302 template <int dim, int spacedim>
1303 const std::vector<IndexSet> &
1305 {
1306  Assert(level < this->get_triangulation().n_global_levels(), ExcMessage("invalid level in locally_owned_mg_dofs_per_processor"));
1307  return mg_number_cache[level].locally_owned_dofs_per_processor;
1308 }
1309 
1310 
1311 
1312 template <int dim, int spacedim>
1313 inline
1316 (const unsigned int index) const
1317 {
1318  (void) index;
1319  Assert(index == 0, ExcMessage("There is only one FiniteElement stored. The index must be zero!"));
1320  return get_fe_collection()[0];
1321 }
1322 
1323 
1324 
1325 template <int dim, int spacedim>
1326 inline
1329 {
1330  Assert(fe_collection.size() > 0,
1331  ExcMessage("You are trying to access the DoFHandler's FECollection object before it has been initialized."));
1332  return fe_collection;
1333 }
1334 
1335 
1336 
1337 template <int dim, int spacedim>
1338 inline
1341 {
1342  Assert(tria != nullptr,
1343  ExcMessage("This DoFHandler object has not been associated "
1344  "with a triangulation."));
1345  return *tria;
1346 }
1347 
1348 
1349 
1350 template <int dim, int spacedim>
1351 inline
1352 const BlockInfo &
1354 {
1355  return block_info_object;
1356 }
1357 
1358 
1359 
1360 template <int dim, int spacedim>
1361 template <typename number>
1364 {
1365  // extract the set of boundary ids and forget about the function object pointers
1366  std::set<types::boundary_id> boundary_ids_only;
1367  for (typename std::map<types::boundary_id, const Function<spacedim,number>*>::const_iterator
1368  p = boundary_ids.begin();
1369  p != boundary_ids.end(); ++p)
1370  boundary_ids_only.insert (p->first);
1371 
1372  // then just hand everything over to the other function that does the work
1373  return n_boundary_dofs(boundary_ids_only);
1374 }
1375 
1376 
1377 
1378 namespace internal
1379 {
1387  template <int dim, int spacedim>
1388  std::string policy_to_string(const ::internal::DoFHandlerImplementation::Policy::PolicyBase<dim,spacedim> &policy);
1389 }
1390 
1391 
1392 
1393 template <int dim, int spacedim>
1394 template <class Archive>
1395 void DoFHandler<dim,spacedim>::save (Archive &ar,
1396  const unsigned int) const
1397 {
1398  ar &block_info_object;
1399  ar &vertex_dofs;
1400  ar &number_cache;
1401 
1402  // some versions of gcc have trouble with loading vectors of
1403  // std::unique_ptr objects because std::unique_ptr does not
1404  // have a copy constructor. do it one level at a time
1405  unsigned int n_levels = levels.size();
1406  ar &n_levels;
1407  for (unsigned int i = 0; i < levels.size(); ++i)
1408  ar &levels[i];
1409 
1410  // boost dereferences a nullptr when serializing a nullptr
1411  // at least up to 1.65.1. This causes problems with clang-5.
1412  // Therefore, work around it.
1413  bool faces_is_nullptr = (faces.get()==nullptr);
1414  ar &faces_is_nullptr;
1415  if (!faces_is_nullptr)
1416  ar &faces;
1417 
1418  // write out the number of triangulation cells and later check during
1419  // loading that this number is indeed correct; same with something that
1420  // identifies the FE and the policy
1421  unsigned int n_cells = tria->n_cells();
1422  std::string fe_name = this->get_fe(0).get_name();
1423  std::string policy_name = internal::policy_to_string(*policy);
1424 
1425  ar &n_cells &fe_name &policy_name;
1426 }
1427 
1428 
1429 
1430 template <int dim, int spacedim>
1431 template <class Archive>
1432 void DoFHandler<dim,spacedim>::load (Archive &ar,
1433  const unsigned int)
1434 {
1435  ar &block_info_object;
1436  ar &vertex_dofs;
1437  ar &number_cache;
1438 
1439  // boost::serialization can restore pointers just fine, but if the
1440  // pointer object still points to something useful, that object is not
1441  // destroyed and we end up with a memory leak. consequently, first delete
1442  // previous content before re-loading stuff
1443  levels.clear();
1444  faces.reset();
1445 
1446  // some versions of gcc have trouble with loading vectors of
1447  // std::unique_ptr objects because std::unique_ptr does not
1448  // have a copy constructor. do it one level at a time
1449  unsigned int size;
1450  ar &size;
1451  levels.resize(size);
1452  for (unsigned int i = 0; i < levels.size(); ++i)
1453  {
1454  std::unique_ptr<internal::DoFHandlerImplementation::DoFLevel<dim>> level;
1455  ar &level;
1456  levels[i] = std::move(level);
1457  }
1458 
1459  //Workaround for nullptr, see in save().
1460  bool faces_is_nullptr = true;
1461  ar &faces_is_nullptr;
1462  if (!faces_is_nullptr)
1463  ar &faces;
1464 
1465  // these are the checks that correspond to the last block in the save()
1466  // function
1467  unsigned int n_cells;
1468  std::string fe_name;
1469  std::string policy_name;
1470 
1471  ar &n_cells &fe_name &policy_name;
1472 
1473  AssertThrow (n_cells == tria->n_cells(),
1474  ExcMessage ("The object being loaded into does not match the triangulation "
1475  "that has been stored previously."));
1476  AssertThrow (fe_name == this->get_fe(0).get_name(),
1477  ExcMessage ("The finite element associated with this DoFHandler does not match "
1478  "the one that was associated with the DoFHandler previously stored."));
1479  AssertThrow (policy_name == internal::policy_to_string(*policy),
1480  ExcMessage ("The policy currently associated with this DoFHandler ("
1481  + internal::policy_to_string(*policy)
1482  + ") does not match the one that was associated with the "
1483  "DoFHandler previously stored ("
1484  + policy_name
1485  + ")."));
1486 }
1487 
1488 
1489 
1490 
1491 template <int dim, int spacedim>
1492 inline
1494 DoFHandler<dim, spacedim>::MGVertexDoFs::get_index (const unsigned int level,
1495  const unsigned int dof_number,
1496  const unsigned int dofs_per_vertex) const
1497 {
1498  Assert ((level >= coarsest_level) && (level <= finest_level), ExcInvalidLevel (level));
1499  return indices[dofs_per_vertex * (level - coarsest_level) + dof_number];
1500 }
1501 
1502 
1503 
1504 template <int dim, int spacedim>
1505 inline
1506 void
1507 DoFHandler<dim, spacedim>::MGVertexDoFs::set_index (const unsigned int level,
1508  const unsigned int dof_number,
1509  const unsigned int dofs_per_vertex,
1510  const types::global_dof_index index)
1511 {
1512  Assert ((level >= coarsest_level) && (level <= finest_level), ExcInvalidLevel (level));
1513  indices[dofs_per_vertex * (level - coarsest_level) + dof_number] = index;
1514 }
1515 
1516 
1517 #endif // DOXYGEN
1518 
1519 DEAL_II_NAMESPACE_CLOSE
1520 
1521 #endif
DoFHandler & operator=(const DoFHandler &)=delete
IteratorRange< active_cell_iterator > active_cell_iterators_on_level(const unsigned int level) const
Definition: dof_handler.cc:864
unsigned int max_couplings_between_dofs() const
std::vector< MGVertexDoFs > mg_vertex_dofs
Definition: dof_handler.h:1167
level_cell_iterator end_mg() const
Definition: dof_handler.cc:811
cell_iterator begin(const unsigned int level=0) const
Definition: dof_handler.cc:723
static const unsigned int dimension
Definition: dof_handler.h:300
static const unsigned int spacedim
static ::ExceptionBase & ExcInvalidLevel(int arg1)
const hp::FECollection< dim, spacedim > & get_fe_collection() const
unsigned int boundary_id
Definition: types.h:110
const BlockInfo & block_info() const
cell_iterator end() const
Definition: dof_handler.cc:751
::internal::DoFHandlerImplementation::NumberCache number_cache
Definition: dof_handler.h:1054
virtual void clear()
std::vector< std::unique_ptr<::internal::DoFHandlerImplementation::DoFLevel< dim > > > levels
Definition: dof_handler.h:1173
const std::vector< IndexSet > & locally_owned_mg_dofs_per_processor(const unsigned int level) const
IteratorRange< level_cell_iterator > mg_cell_iterators_on_level(const unsigned int level) const
Definition: dof_handler.cc:875
void clear_mg_space()
ActiveSelector::active_cell_iterator active_cell_iterator
Definition: dof_handler.h:229
SmartPointer< const Triangulation< dim, spacedim >, DoFHandler< dim, spacedim > > tria
Definition: dof_handler.h:1032
STL namespace.
#define AssertThrow(cond, exc)
Definition: exceptions.h:1221
virtual std::size_t memory_consumption() const
Definition: dof_handler.cc:964
void initialize(const Triangulation< dim, spacedim > &tria, const FiniteElement< dim, spacedim > &fe)
Definition: dof_handler.cc:699
std::unique_ptr<::internal::DoFHandlerImplementation::Policy::PolicyBase< dim, spacedim > > policy
Definition: dof_handler.h:1045
int level() const
static ::ExceptionBase & ExcInvalidBoundaryIndicator()
ActiveSelector::face_iterator face_iterator
Definition: dof_handler.h:275
active_cell_iterator begin_active(const unsigned int level=0) const
Definition: dof_handler.cc:735
BlockInfo block_info_object
Definition: dof_handler.h:1026
unsigned int n_locally_owned_dofs() const
static ::ExceptionBase & ExcFacesHaveNoLevel()
const std::vector< types::global_dof_index > & n_locally_owned_dofs_per_processor() const
static ::ExceptionBase & ExcMessage(std::string arg1)
ActiveSelector::cell_iterator cell_iterator
Definition: dof_handler.h:257
#define DeclException1(Exception1, type1, outsequence)
Definition: exceptions.h:346
Definition: types.h:30
unsigned int global_dof_index
Definition: types.h:88
std::vector<::internal::DoFHandlerImplementation::NumberCache > mg_number_cache
Definition: dof_handler.h:1059
bool has_active_dofs() const
virtual void distribute_mg_dofs()
#define Assert(cond, exc)
Definition: exceptions.h:1142
IteratorRange< active_cell_iterator > active_cell_iterators() const
Definition: dof_handler.cc:830
static const unsigned int default_fe_index
Definition: dof_handler.h:330
const Triangulation< dim, spacedim > * tria
active_cell_iterator end_active(const unsigned int level) const
Definition: dof_handler.cc:773
const FiniteElement< dim, spacedim > & get_fe(const unsigned int index=0) const
static ::ExceptionBase & ExcGridsDoNotMatch()
#define DeclException0(Exception0)
Definition: exceptions.h:323
types::global_dof_index n_boundary_dofs() const
Definition: dof_handler.cc:889
types::global_dof_index n_dofs() const
int index() const
level_cell_iterator begin_mg(const unsigned int level=0) const
Definition: dof_handler.cc:785
const IndexSet & locally_owned_mg_dofs(const unsigned int level) const
void set_index(const unsigned int level, const unsigned int dof_number, const unsigned int dofs_per_vertex, const types::global_dof_index index)
std::unique_ptr<::internal::DoFHandlerImplementation::DoFFaces< dim > > faces
Definition: dof_handler.h:1182
Definition: hp.h:102
virtual ~DoFHandler()
Definition: dof_handler.cc:681
void renumber_dofs(const std::vector< types::global_dof_index > &new_numbers)
std::unique_ptr< types::global_dof_index[]> indices
Definition: dof_handler.h:1132
void initialize_local_block_info()
static ::ExceptionBase & ExcEmptyLevel(int arg1)
static const unsigned int dim
const std::vector< IndexSet > & locally_owned_dofs_per_processor() const
IteratorRange< level_cell_iterator > mg_cell_iterators() const
Definition: dof_handler.cc:841
unsigned int coarsest_level
Definition: dof_handler.h:1116
void clear_space()
virtual void distribute_dofs(const FiniteElement< dim, spacedim > &fe)
Definition: dof_handler.cc:993
types::global_dof_index get_index(const unsigned int level, const unsigned int dof_number, const unsigned int dofs_per_vertex) const
void load(Archive &ar, const unsigned int version)
A small class collecting the different BlockIndices involved in global, multilevel and local computat...
Definition: block_info.h:93
IteratorRange< cell_iterator > cell_iterators_on_level(const unsigned int level) const
Definition: dof_handler.cc:853
const Triangulation< dim, spacedim > & get_triangulation() const
const Triangulation< dim, spacedim > & get_triangulation() const
ActiveSelector::active_face_iterator active_face_iterator
Definition: dof_handler.h:288
static ::ExceptionBase & ExcNewNumbersNotConsecutive(types::global_dof_index arg1)
static const unsigned int space_dimension
Definition: dof_handler.h:305
unsigned int max_couplings_between_boundary_dofs() const
const types::global_dof_index invalid_dof_index
Definition: types.h:187
const IndexSet & locally_owned_dofs() const
bool has_level_dofs() const
IteratorRange< cell_iterator > cell_iterators() const
Definition: dof_handler.cc:820
void save(Archive &ar, const unsigned int version) const
static const types::global_dof_index invalid_dof_index
Definition: dof_handler.h:319
std::vector< types::global_dof_index > vertex_dofs
Definition: dof_handler.h:1161
hp::FECollection< dim, spacedim > fe_collection
Definition: dof_handler.h:1039