Reference documentation for deal.II version Git 193422c69f 2020-07-08 17:07:46 +0200
\(\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\}}\)
fe_tools.h
Go to the documentation of this file.
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2000 - 2020 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_fe_tools_H
17 #define dealii_fe_tools_H
18 
19 
20 
21 #include <deal.II/base/config.h>
22 
27 #include <deal.II/base/tensor.h>
28 
30 
32 
34 
35 #include <memory>
36 #include <string>
37 #include <vector>
38 
39 
41 
42 // Forward declarations
43 #ifndef DOXYGEN
44 template <typename number>
45 class FullMatrix;
46 template <int dim>
47 class Quadrature;
48 template <int dim, int spacedim>
49 class FiniteElement;
50 template <int dim, int spacedim>
51 class DoFHandler;
52 template <int dim>
53 class FiniteElementData;
54 template <typename number>
55 class AffineConstraints;
56 #endif
57 
58 
61 
62 
75 namespace FETools
76 {
85  template <int dim, int spacedim = dim>
86  class FEFactoryBase : public Subscriptor
87  {
88  public:
92  virtual std::unique_ptr<FiniteElement<dim, spacedim>>
93  get(const unsigned int degree) const = 0;
94 
100  virtual std::unique_ptr<FiniteElement<dim, spacedim>>
101  get(const Quadrature<1> &quad) const = 0;
102 
106  virtual ~FEFactoryBase() override = default;
107  };
108 
118  template <class FE>
119  class FEFactory : public FEFactoryBase<FE::dimension, FE::space_dimension>
120  {
121  public:
125  virtual std::unique_ptr<FiniteElement<FE::dimension, FE::space_dimension>>
126  get(const unsigned int degree) const override;
127 
132  virtual std::unique_ptr<FiniteElement<FE::dimension, FE::space_dimension>>
133  get(const Quadrature<1> &quad) const override;
134  };
135 
151  template <int dim, int spacedim>
152  void
154  std::vector<unsigned int> & renumbering,
155  std::vector<std::vector<unsigned int>> &start_indices);
156 
172  template <int dim, int spacedim>
173  void
175  std::vector<types::global_dof_index> &renumbering,
176  std::vector<types::global_dof_index> &block_data,
177  bool return_start_indices = true);
178 
192  template <int dim, typename number, int spacedim>
193  void
195  const FiniteElement<dim, spacedim> &fe2,
196  FullMatrix<number> &interpolation_matrix);
197 
209  template <int dim, typename number, int spacedim>
210  void
212  const FiniteElement<dim, spacedim> &fe2,
213  FullMatrix<number> &interpolation_matrix);
214 
226  template <int dim, typename number, int spacedim>
227  void
229  const FiniteElement<dim, spacedim> &fe2,
230  FullMatrix<number> &difference_matrix);
231 
235  template <int dim, typename number, int spacedim>
236  void
238  const FiniteElement<dim, spacedim> &fe2,
240 
309  template <int dim, int spacedim>
312 
351  template <int dim, typename number, int spacedim>
352  void
354  const FiniteElement<dim, spacedim> & fe,
355  std::vector<std::vector<FullMatrix<number>>> &matrices,
356  const bool isotropic_only = false,
357  const double threshold = 1.e-12);
358 
380  template <int dim, typename number, int spacedim>
381  void
385  const unsigned int face_coarse,
386  const unsigned int face_fine,
387  const double threshold = 1.e-12);
388 
420  template <int dim, typename number, int spacedim>
421  void
423  const FiniteElement<dim, spacedim> & fe,
424  std::vector<std::vector<FullMatrix<number>>> &matrices,
425  const bool isotropic_only = false);
426 
512  template <int dim, int spacedim>
513  void
516  const Quadrature<dim> & lhs_quadrature,
517  const Quadrature<dim> & rhs_quadrature,
518  FullMatrix<double> & X);
519 
527  template <int dim, int spacedim>
528  void
531  const Quadrature<dim> & quadrature,
532  FullMatrix<double> & I_q);
533 
547  template <int dim>
548  void
550  const FullMatrix<double> & projection_matrix,
551  const std::vector<Tensor<1, dim>> &vector_of_tensors_at_qp,
552  std::vector<Tensor<1, dim>> & vector_of_tensors_at_nodes);
553 
554 
555 
559  template <int dim>
560  void
562  const FullMatrix<double> & projection_matrix,
563  const std::vector<SymmetricTensor<2, dim>> &vector_of_tensors_at_qp,
564  std::vector<SymmetricTensor<2, dim>> & vector_of_tensors_at_nodes);
565 
566 
567 
577  template <int dim, int spacedim>
578  void
581  const Quadrature<dim - 1> & lhs_quadrature,
582  const Quadrature<dim - 1> & rhs_quadrature,
584  const unsigned int face,
585  FullMatrix<double> & X);
586 
587 
588 
604  template <int dim, int spacedim, typename number>
605  void
607  const FiniteElement<dim, spacedim> &finite_element,
608  const std::vector<Vector<number>> & support_point_values,
609  std::vector<number> & dof_values);
610 
611 
612 
614 
647  template <int dim, int spacedim, class InVector, class OutVector>
648  void
650  const InVector & u1,
651  const DoFHandler<dim, spacedim> &dof2,
652  OutVector & u2);
653 
670  template <int dim, int spacedim, class InVector, class OutVector>
671  void
672  interpolate(
673  const DoFHandler<dim, spacedim> & dof1,
674  const InVector & u1,
675  const DoFHandler<dim, spacedim> & dof2,
677  OutVector & u2);
678 
694  template <int dim, class InVector, class OutVector, int spacedim>
695  void
697  const InVector & u1,
698  const FiniteElement<dim, spacedim> &fe2,
699  OutVector & u1_interpolated);
700 
713  template <int dim, class InVector, class OutVector, int spacedim>
714  void
716  const DoFHandler<dim, spacedim> & dof1,
718  const InVector & u1,
719  const DoFHandler<dim, spacedim> & dof2,
721  OutVector & u1_interpolated);
722 
732  template <int dim, class InVector, class OutVector, int spacedim>
733  void
735  const InVector & z1,
736  const FiniteElement<dim, spacedim> &fe2,
737  OutVector & z1_difference);
738 
751  template <int dim, class InVector, class OutVector, int spacedim>
752  void
754  const DoFHandler<dim, spacedim> & dof1,
756  const InVector & z1,
757  const DoFHandler<dim, spacedim> & dof2,
759  OutVector & z1_difference);
760 
761 
762 
771  template <int dim, class InVector, class OutVector, int spacedim>
772  void
774  const InVector & u1,
775  const DoFHandler<dim, spacedim> &dof2,
776  OutVector & u2);
777 
838  template <int dim, class InVector, class OutVector, int spacedim>
839  void
841  const InVector & z1,
842  const DoFHandler<dim, spacedim> &dof2,
843  OutVector & z2);
844 
857  template <int dim, class InVector, class OutVector, int spacedim>
858  void
859  extrapolate(
860  const DoFHandler<dim, spacedim> & dof1,
861  const InVector & z1,
862  const DoFHandler<dim, spacedim> & dof2,
864  OutVector & z2);
865 
867 
881  template <int dim>
882  std::vector<unsigned int>
883  hierarchic_to_lexicographic_numbering(unsigned int degree);
884 
892  template <int dim>
893  DEAL_II_DEPRECATED void
894  hierarchic_to_lexicographic_numbering(unsigned int degree,
895  std::vector<unsigned int> &h2l);
896 
904  template <int dim>
905  DEAL_II_DEPRECATED void
907  std::vector<unsigned int> & h2l);
908 
913  template <int dim>
914  DEAL_II_DEPRECATED std::vector<unsigned int>
916 
923  template <int dim>
924  std::vector<unsigned int>
925  lexicographic_to_hierarchic_numbering(unsigned int degree);
926 
931  template <int dim>
932  DEAL_II_DEPRECATED void
934  std::vector<unsigned int> & l2h);
935 
940  template <int dim>
941  DEAL_II_DEPRECATED std::vector<unsigned int>
943 
944 
1018  namespace Compositing
1019  {
1036  template <int dim, int spacedim>
1039  const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1040  const std::vector<unsigned int> & multiplicities,
1041  const bool do_tensor_product = true);
1042 
1048  template <int dim, int spacedim>
1051  const std::initializer_list<
1052  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1053  &fe_systems);
1054 
1058  template <int dim, int spacedim>
1061  const unsigned int N1,
1062  const FiniteElement<dim, spacedim> *fe2 = nullptr,
1063  const unsigned int N2 = 0,
1064  const FiniteElement<dim, spacedim> *fe3 = nullptr,
1065  const unsigned int N3 = 0,
1066  const FiniteElement<dim, spacedim> *fe4 = nullptr,
1067  const unsigned int N4 = 0,
1068  const FiniteElement<dim, spacedim> *fe5 = nullptr,
1069  const unsigned int N5 = 0);
1070 
1083  template <int dim, int spacedim>
1084  std::vector<bool>
1086  const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1087  const std::vector<unsigned int> & multiplicities);
1088 
1094  template <int dim, int spacedim>
1095  std::vector<bool>
1097  const std::initializer_list<
1098  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1099  &fe_systems);
1100 
1115  template <int dim, int spacedim>
1116  std::vector<bool>
1118  const FiniteElement<dim, spacedim> *fe1,
1119  const unsigned int N1,
1120  const FiniteElement<dim, spacedim> *fe2 = nullptr,
1121  const unsigned int N2 = 0,
1122  const FiniteElement<dim, spacedim> *fe3 = nullptr,
1123  const unsigned int N3 = 0,
1124  const FiniteElement<dim, spacedim> *fe4 = nullptr,
1125  const unsigned int N4 = 0,
1126  const FiniteElement<dim, spacedim> *fe5 = nullptr,
1127  const unsigned int N5 = 0);
1128 
1129 
1146  template <int dim, int spacedim>
1147  std::vector<ComponentMask>
1149  const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1150  const std::vector<unsigned int> & multiplicities,
1151  const bool do_tensor_product = true);
1152 
1158  template <int dim, int spacedim>
1159  std::vector<ComponentMask>
1161  const std::initializer_list<
1162  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1163  &fe_systems);
1164 
1183  template <int dim, int spacedim>
1184  std::vector<ComponentMask>
1186  const FiniteElement<dim, spacedim> *fe1,
1187  const unsigned int N1,
1188  const FiniteElement<dim, spacedim> *fe2 = nullptr,
1189  const unsigned int N2 = 0,
1190  const FiniteElement<dim, spacedim> *fe3 = nullptr,
1191  const unsigned int N3 = 0,
1192  const FiniteElement<dim, spacedim> *fe4 = nullptr,
1193  const unsigned int N4 = 0,
1194  const FiniteElement<dim, spacedim> *fe5 = nullptr,
1195  const unsigned int N5 = 0,
1196  const bool do_tensor_product = true);
1197 
1214  template <int dim, int spacedim>
1215  void
1217  std::vector<std::pair<std::pair<unsigned int, unsigned int>,
1218  unsigned int>> &system_to_base_table,
1219  std::vector<std::pair<unsigned int, unsigned int>>
1220  & system_to_component_table,
1221  std::vector<std::pair<std::pair<unsigned int, unsigned int>,
1222  unsigned int>> &component_to_base_table,
1223  const FiniteElement<dim, spacedim> & finite_element,
1224  const bool do_tensor_product = true);
1225 
1241  template <int dim, int spacedim>
1242  void
1244  std::vector<std::pair<std::pair<unsigned int, unsigned int>,
1245  unsigned int>> &face_system_to_base_table,
1246  std::vector<std::pair<unsigned int, unsigned int>>
1247  & face_system_to_component_table,
1248  const FiniteElement<dim, spacedim> &finite_element,
1249  const bool do_tensor_product = true);
1250 
1251  } // namespace Compositing
1252 
1253 
1287  template <int dim, int spacedim = dim>
1288  std::unique_ptr<FiniteElement<dim, spacedim>>
1289  get_fe_by_name(const std::string &name);
1290 
1333  template <int dim, int spacedim>
1334  void
1335  add_fe_name(const std::string & name,
1336  const FEFactoryBase<dim, spacedim> *factory);
1337 
1348  std::string,
1349  << "Can't re-generate a finite element from the string '"
1350  << arg1 << "'.");
1351 
1364  char,
1365  int,
1366  << "The dimension " << arg1
1367  << " in the finite element string must match "
1368  << "the space dimension " << arg2 << ".");
1369 
1376 
1390 
1398  "You are using continuous elements on a grid with "
1399  "hanging nodes but without providing hanging node "
1400  "constraints. Use the respective function with "
1401  "additional AffineConstraints argument(s), instead.");
1414  int,
1415  int,
1416  int,
1417  int,
1418  << "This is a " << arg1 << "x" << arg2 << " matrix, "
1419  << "but should be a " << arg3 << "x" << arg4 << " matrix.");
1420 
1427  double,
1428  << "Least squares fit leaves a gap of " << arg1);
1429 
1436  int,
1437  int,
1438  << arg1 << " must be greater than " << arg2);
1439 } // namespace FETools
1440 
1441 
1442 #ifndef DOXYGEN
1443 
1444 namespace FETools
1445 {
1446  template <class FE>
1447  std::unique_ptr<FiniteElement<FE::dimension, FE::space_dimension>>
1448  FEFactory<FE>::get(const unsigned int degree) const
1449  {
1450  return std::make_unique<FE>(degree);
1451  }
1452 
1453  namespace Compositing
1454  {
1455  template <int dim, int spacedim>
1456  std::vector<bool>
1458  const std::initializer_list<
1459  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1460  &fe_systems)
1461  {
1462  std::vector<const FiniteElement<dim, spacedim> *> fes;
1463  std::vector<unsigned int> multiplicities;
1464 
1465  const auto extract =
1466  [&fes, &multiplicities](
1467  const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1468  unsigned int> &fe_system) {
1469  fes.push_back(fe_system.first.get());
1470  multiplicities.push_back(fe_system.second);
1471  };
1472 
1473  for (const auto &p : fe_systems)
1474  extract(p);
1475 
1476  return compute_restriction_is_additive_flags(fes, multiplicities);
1477  }
1478 
1479 
1480 
1481  template <int dim, int spacedim>
1484  const std::initializer_list<
1485  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1486  &fe_systems)
1487  {
1488  std::vector<const FiniteElement<dim, spacedim> *> fes;
1489  std::vector<unsigned int> multiplicities;
1490 
1491  const auto extract =
1492  [&fes, &multiplicities](
1493  const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1494  unsigned int> &fe_system) {
1495  fes.push_back(fe_system.first.get());
1496  multiplicities.push_back(fe_system.second);
1497  };
1498 
1499  for (const auto &p : fe_systems)
1500  extract(p);
1501 
1502  return multiply_dof_numbers(fes, multiplicities, true);
1503  }
1504 
1505 
1506 
1507  template <int dim, int spacedim>
1508  std::vector<ComponentMask>
1510  const std::initializer_list<
1511  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1512  &fe_systems)
1513  {
1514  std::vector<const FiniteElement<dim, spacedim> *> fes;
1515  std::vector<unsigned int> multiplicities;
1516 
1517  const auto extract =
1518  [&fes, &multiplicities](
1519  const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1520  unsigned int> &fe_system) {
1521  fes.push_back(fe_system.first.get());
1522  multiplicities.push_back(fe_system.second);
1523  };
1524 
1525  for (const auto &p : fe_systems)
1526  extract(p);
1527 
1528  return compute_nonzero_components(fes, multiplicities, true);
1529  }
1530  } // namespace Compositing
1531 } // namespace FETools
1532 
1533 #endif
1534 
1538 
1539 #endif /* dealii_fe_tools_H */
void project_dg(const DoFHandler< dim, spacedim > &dof1, const InVector &u1, const DoFHandler< dim, spacedim > &dof2, OutVector &u2)
static ::ExceptionBase & ExcLeastSquaresError(double arg1)
std::vector< ComponentMask > compute_nonzero_components(const FiniteElement< dim, spacedim > *fe1, const unsigned int N1, const FiniteElement< dim, spacedim > *fe2=nullptr, const unsigned int N2=0, const FiniteElement< dim, spacedim > *fe3=nullptr, const unsigned int N3=0, const FiniteElement< dim, spacedim > *fe4=nullptr, const unsigned int N4=0, const FiniteElement< dim, spacedim > *fe5=nullptr, const unsigned int N5=0, const bool do_tensor_product=true)
void compute_interpolation_to_quadrature_points_matrix(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim > &quadrature, FullMatrix< double > &I_q)
#define DeclException2(Exception2, type1, type2, outsequence)
Definition: exceptions.h:538
static ::ExceptionBase & ExcGridNotRefinedAtLeastOnce()
std::unique_ptr< FiniteElement< dim, spacedim > > get_fe_by_name(const std::string &name)
void compute_embedding_matrices(const FiniteElement< dim, spacedim > &fe, std::vector< std::vector< FullMatrix< number >>> &matrices, const bool isotropic_only=false, const double threshold=1.e-12)
Contents is actually a matrix.
void compute_block_renumbering(const FiniteElement< dim, spacedim > &fe, std::vector< types::global_dof_index > &renumbering, std::vector< types::global_dof_index > &block_data, bool return_start_indices=true)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
std::vector< unsigned int > lexicographic_to_hierarchic_numbering(unsigned int degree)
std::vector< unsigned int > hierarchic_to_lexicographic_numbering(unsigned int degree)
void compute_face_embedding_matrices(const FiniteElement< dim, spacedim > &fe, FullMatrix< number >(&matrices)[GeometryInfo< dim >::max_children_per_face], const unsigned int face_coarse, const unsigned int face_fine, const double threshold=1.e-12)
void interpolation_difference(const DoFHandler< dim, spacedim > &dof1, const InVector &z1, const FiniteElement< dim, spacedim > &fe2, OutVector &z1_difference)
FullMatrix< double > compute_node_matrix(const FiniteElement< dim, spacedim > &fe)
void convert_generalized_support_point_values_to_dof_values(const FiniteElement< dim, spacedim > &finite_element, const std::vector< Vector< number >> &support_point_values, std::vector< number > &dof_values)
void interpolate(const DoFHandler< dim, spacedim > &dof1, const InVector &u1, const DoFHandler< dim, spacedim > &dof2, OutVector &u2)
void extrapolate(const DoFHandler< dim, spacedim > &dof1, const InVector &z1, const DoFHandler< dim, spacedim > &dof2, OutVector &z2)
static ::ExceptionBase & ExcFENotPrimitive()
void get_projection_matrix(const FiniteElement< dim, spacedim > &fe1, const FiniteElement< dim, spacedim > &fe2, FullMatrix< number > &matrix)
virtual std::unique_ptr< FiniteElement< FE::dimension, FE::space_dimension > > get(const unsigned int degree) const override
static ::ExceptionBase & ExcMatrixDimensionMismatch(int arg1, int arg2, int arg3, int arg4)
void compute_projection_from_face_quadrature_points_matrix(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &lhs_quadrature, const Quadrature< dim - 1 > &rhs_quadrature, const typename DoFHandler< dim, spacedim >::active_cell_iterator &cell, const unsigned int face, FullMatrix< double > &X)
void compute_projection_matrices(const FiniteElement< dim, spacedim > &fe, std::vector< std::vector< FullMatrix< number >>> &matrices, const bool isotropic_only=false)
static ::ExceptionBase & ExcHangingNodesNotAllowed()
#define DeclException1(Exception1, type1, outsequence)
Definition: exceptions.h:515
void get_interpolation_matrix(const FiniteElement< dim, spacedim > &fe1, const FiniteElement< dim, spacedim > &fe2, FullMatrix< number > &interpolation_matrix)
void build_cell_tables(std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int >> &system_to_base_table, std::vector< std::pair< unsigned int, unsigned int >> &system_to_component_table, std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int >> &component_to_base_table, const FiniteElement< dim, spacedim > &finite_element, const bool do_tensor_product=true)
static ::ExceptionBase & ExcNotGreaterThan(int arg1, int arg2)
constexpr ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
void back_interpolate(const DoFHandler< dim, spacedim > &dof1, const InVector &u1, const FiniteElement< dim, spacedim > &fe2, OutVector &u1_interpolated)
#define DeclExceptionMsg(Exception, defaulttext)
Definition: exceptions.h:493
void compute_projection_from_quadrature_points_matrix(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim > &lhs_quadrature, const Quadrature< dim > &rhs_quadrature, FullMatrix< double > &X)
#define DeclException0(Exception0)
Definition: exceptions.h:470
void get_back_interpolation_matrix(const FiniteElement< dim, spacedim > &fe1, const FiniteElement< dim, spacedim > &fe2, FullMatrix< number > &interpolation_matrix)
#define DEAL_II_NAMESPACE_CLOSE
Definition: config.h:363
static ::ExceptionBase & ExcInvalidFEDimension(char arg1, int arg2)
static ::ExceptionBase & ExcInvalidFE()
FiniteElementData< dim > multiply_dof_numbers(const FiniteElement< dim, spacedim > *fe1, const unsigned int N1, const FiniteElement< dim, spacedim > *fe2=nullptr, const unsigned int N2=0, const FiniteElement< dim, spacedim > *fe3=nullptr, const unsigned int N3=0, const FiniteElement< dim, spacedim > *fe4=nullptr, const unsigned int N4=0, const FiniteElement< dim, spacedim > *fe5=nullptr, const unsigned int N5=0)
void compute_projection_from_quadrature_points(const FullMatrix< double > &projection_matrix, const std::vector< Tensor< 1, dim >> &vector_of_tensors_at_qp, std::vector< Tensor< 1, dim >> &vector_of_tensors_at_nodes)
void add_fe_name(const std::string &name, const FEFactoryBase< dim, spacedim > *factory)
#define DEAL_II_NAMESPACE_OPEN
Definition: config.h:362
void get_interpolation_difference_matrix(const FiniteElement< dim, spacedim > &fe1, const FiniteElement< dim, spacedim > &fe2, FullMatrix< number > &difference_matrix)
#define DeclException4(Exception4, type1, type2, type3, type4, outsequence)
Definition: exceptions.h:584
void compute_component_wise(const FiniteElement< dim, spacedim > &fe, std::vector< unsigned int > &renumbering, std::vector< std::vector< unsigned int >> &start_indices)
virtual ~FEFactoryBase() override=default
static ::ExceptionBase & ExcInvalidFEName(std::string arg1)
void build_face_tables(std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int >> &face_system_to_base_table, std::vector< std::pair< unsigned int, unsigned int >> &face_system_to_component_table, const FiniteElement< dim, spacedim > &finite_element, const bool do_tensor_product=true)
typename ActiveSelector::active_cell_iterator active_cell_iterator
Definition: dof_handler.h:343
#define DEAL_II_DEPRECATED
Definition: config.h:152
static ::ExceptionBase & ExcTriangulationMismatch()
std::vector< bool > compute_restriction_is_additive_flags(const FiniteElement< dim, spacedim > *fe1, const unsigned int N1, const FiniteElement< dim, spacedim > *fe2=nullptr, const unsigned int N2=0, const FiniteElement< dim, spacedim > *fe3=nullptr, const unsigned int N3=0, const FiniteElement< dim, spacedim > *fe4=nullptr, const unsigned int N4=0, const FiniteElement< dim, spacedim > *fe5=nullptr, const unsigned int N5=0)