Reference documentation for deal.II version 9.1.0-pre
fe_system.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 1999 - 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.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_fe_system_h
17 # define dealii_fe_system_h
18 
19 
20 /*---------------------------- fe_system.h ---------------------------*/
21 
22 
23 # include <deal.II/base/config.h>
24 
25 # include <deal.II/base/thread_management.h>
26 
27 # include <deal.II/fe/fe.h>
28 # include <deal.II/fe/fe_tools.h>
29 
30 # include <memory>
31 # include <type_traits>
32 # include <utility>
33 # include <vector>
34 
35 
36 DEAL_II_NAMESPACE_OPEN
37 
38 template <int dim, int spacedim>
39 class FE_Enriched;
40 
41 
169 template <int dim, int spacedim = dim>
170 class FESystem : public FiniteElement<dim, spacedim>
171 {
172 public:
204  const unsigned int n_elements);
205 
213  const unsigned int n1,
214  const FiniteElement<dim, spacedim> &fe2,
215  const unsigned int n2);
216 
224  const unsigned int n1,
225  const FiniteElement<dim, spacedim> &fe2,
226  const unsigned int n2,
227  const FiniteElement<dim, spacedim> &fe3,
228  const unsigned int n3);
229 
237  const unsigned int n1,
238  const FiniteElement<dim, spacedim> &fe2,
239  const unsigned int n2,
240  const FiniteElement<dim, spacedim> &fe3,
241  const unsigned int n3,
242  const FiniteElement<dim, spacedim> &fe4,
243  const unsigned int n4);
244 
252  const unsigned int n1,
253  const FiniteElement<dim, spacedim> &fe2,
254  const unsigned int n2,
255  const FiniteElement<dim, spacedim> &fe3,
256  const unsigned int n3,
257  const FiniteElement<dim, spacedim> &fe4,
258  const unsigned int n4,
259  const FiniteElement<dim, spacedim> &fe5,
260  const unsigned int n5);
261 
447  FESystem(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
448  const std::vector<unsigned int> &multiplicities);
449 
450 # if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
451 
493  template <
494  class... FEPairs,
495  typename = typename enable_if_all<
496  (std::is_same<typename std::decay<FEPairs>::type,
497  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
498  unsigned int>>::value ||
499  std::is_base_of<FiniteElement<dim, spacedim>,
500  typename std::decay<FEPairs>::type>::value)...>::type>
501  FESystem(FEPairs &&... fe_pairs);
502 
515  FESystem(
516  const std::initializer_list<
517  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
518  &fe_systems);
519 # endif
520 
525  FESystem(const FESystem<dim, spacedim> &) = delete;
526 
530  FESystem(FESystem<dim, spacedim> &&) = default; // NOLINT
531 
535  virtual ~FESystem() override = default;
536 
545  virtual std::string
546  get_name() const override;
547 
548  virtual std::unique_ptr<FiniteElement<dim, spacedim>>
549  clone() const override;
550 
551  virtual UpdateFlags
552  requires_update_flags(const UpdateFlags update_flags) const override;
553 
554  // make variant with ComponentMask also available:
556 
560  virtual const FiniteElement<dim, spacedim> &
561  get_sub_fe(const unsigned int first_component,
562  const unsigned int n_selected_components) const override;
563 
576  virtual double
577  shape_value(const unsigned int i, const Point<dim> &p) const override;
578 
587  virtual double
588  shape_value_component(const unsigned int i,
589  const Point<dim> & p,
590  const unsigned int component) const override;
591 
606  virtual Tensor<1, dim>
607  shape_grad(const unsigned int i, const Point<dim> &p) const override;
608 
617  virtual Tensor<1, dim>
618  shape_grad_component(const unsigned int i,
619  const Point<dim> & p,
620  const unsigned int component) const override;
621 
636  virtual Tensor<2, dim>
637  shape_grad_grad(const unsigned int i, const Point<dim> &p) const override;
638 
647  virtual Tensor<2, dim>
648  shape_grad_grad_component(const unsigned int i,
649  const Point<dim> & p,
650  const unsigned int component) const override;
651 
666  virtual Tensor<3, dim>
667  shape_3rd_derivative(const unsigned int i,
668  const Point<dim> & p) const override;
669 
678  virtual Tensor<3, dim>
679  shape_3rd_derivative_component(const unsigned int i,
680  const Point<dim> & p,
681  const unsigned int component) const override;
682 
697  virtual Tensor<4, dim>
698  shape_4th_derivative(const unsigned int i,
699  const Point<dim> & p) const override;
700 
709  virtual Tensor<4, dim>
710  shape_4th_derivative_component(const unsigned int i,
711  const Point<dim> & p,
712  const unsigned int component) const override;
713 
725  virtual void
727  FullMatrix<double> &matrix) const override;
728 
735  virtual const FiniteElement<dim, spacedim> &
736  base_element(const unsigned int index) const override;
737 
742  virtual bool
743  has_support_on_face(const unsigned int shape_index,
744  const unsigned int face_index) const override;
745 
769  virtual const FullMatrix<double> &
771  const unsigned int child,
772  const RefinementCase<dim> &refinement_case =
774 
802  virtual const FullMatrix<double> &
804  const unsigned int child,
805  const RefinementCase<dim> &refinement_case =
807 
846  virtual unsigned int
847  face_to_cell_index(const unsigned int face_dof_index,
848  const unsigned int face,
849  const bool face_orientation = true,
850  const bool face_flip = false,
851  const bool face_rotation = false) const override;
852 
856  virtual Point<dim>
857  unit_support_point(const unsigned int index) const override;
858 
862  virtual Point<dim - 1>
863  unit_face_support_point(const unsigned int index) const override;
864 
872  virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
873  get_constant_modes() const override;
874 
887  virtual bool
888  hp_constraints_are_implemented() const override;
889 
902  virtual void
904  FullMatrix<double> &matrix) const override;
905 
906 
919  virtual void
921  const unsigned int subface,
922  FullMatrix<double> &matrix) const override;
923 
939  virtual std::vector<std::pair<unsigned int, unsigned int>>
941  const FiniteElement<dim, spacedim> &fe_other) const override;
942 
947  virtual std::vector<std::pair<unsigned int, unsigned int>>
949  const FiniteElement<dim, spacedim> &fe_other) const override;
950 
955  virtual std::vector<std::pair<unsigned int, unsigned int>>
957  const FiniteElement<dim, spacedim> &fe_other) const override;
958 
970  const FiniteElement<dim, spacedim> &fe_other) const override;
972 
987  virtual void
989  const std::vector<Vector<double>> &support_point_values,
990  std::vector<double> & dof_values) const override;
991 
1000  virtual std::size_t
1001  memory_consumption() const override;
1002 
1003 protected:
1004  virtual std::unique_ptr<
1006  get_data(
1007  const UpdateFlags update_flags,
1008  const Mapping<dim, spacedim> &mapping,
1009  const Quadrature<dim> & quadrature,
1011  spacedim>
1012  &output_data) const override;
1013 
1014  virtual std::unique_ptr<
1016  get_face_data(
1017  const UpdateFlags update_flags,
1018  const Mapping<dim, spacedim> &mapping,
1019  const Quadrature<dim - 1> & quadrature,
1021  spacedim>
1022  &output_data) const override;
1023 
1024  virtual std::unique_ptr<
1027  const UpdateFlags update_flags,
1028  const Mapping<dim, spacedim> &mapping,
1029  const Quadrature<dim - 1> & quadrature,
1031  spacedim>
1032  &output_data) const override;
1033 
1034  virtual void
1035  fill_fe_values(
1036  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1037  const CellSimilarity::Similarity cell_similarity,
1038  const Quadrature<dim> & quadrature,
1039  const Mapping<dim, spacedim> & mapping,
1040  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1041  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1042  spacedim>
1043  & mapping_data,
1044  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1046  spacedim>
1047  &output_data) const override;
1048 
1049  virtual void
1050  fill_fe_face_values(
1051  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1052  const unsigned int face_no,
1053  const Quadrature<dim - 1> & quadrature,
1054  const Mapping<dim, spacedim> & mapping,
1055  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1056  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1057  spacedim>
1058  & mapping_data,
1059  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1061  spacedim>
1062  &output_data) const override;
1063 
1064  virtual void
1065  fill_fe_subface_values(
1066  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1067  const unsigned int face_no,
1068  const unsigned int sub_no,
1069  const Quadrature<dim - 1> & quadrature,
1070  const Mapping<dim, spacedim> & mapping,
1071  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1072  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1073  spacedim>
1074  & mapping_data,
1075  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1077  spacedim>
1078  &output_data) const override;
1079 
1090  template <int dim_1>
1091  void
1092  compute_fill(
1093  const Mapping<dim, spacedim> & mapping,
1094  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1095  const unsigned int face_no,
1096  const unsigned int sub_no,
1097  const Quadrature<dim_1> & quadrature,
1098  const CellSimilarity::Similarity cell_similarity,
1099  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1100  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_data,
1102  &mapping_data,
1104  &output_data) const;
1105 
1106 private:
1111 
1119  std::vector<std::pair<std::unique_ptr<const FiniteElement<dim, spacedim>>,
1120  unsigned int>>
1122 
1135  std::vector<std::vector<std::size_t>> generalized_support_points_index_table;
1136 
1142  void
1143  initialize(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1144  const std::vector<unsigned int> &multiplicities);
1145 
1149  void
1151 
1157  template <int structdim>
1158  std::vector<std::pair<unsigned int, unsigned int>>
1160 
1167  class InternalData : public FiniteElement<dim, spacedim>::InternalDataBase
1168  {
1169  public:
1174  InternalData(const unsigned int n_base_elements);
1175 
1180  ~InternalData() override;
1181 
1186  void
1187  set_fe_data(
1188  const unsigned int base_no,
1189  std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>);
1190 
1196  get_fe_data(const unsigned int base_no) const;
1197 
1204  get_fe_output_object(const unsigned int base_no) const;
1205 
1206  private:
1217  typename std::vector<
1218  std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>>
1220 
1229  mutable std::vector<
1232  };
1233 
1234  /*
1235  * Mutex for protecting initialization of restriction and embedding matrix.
1236  */
1237  mutable Threads::Mutex mutex;
1238 
1239  friend class FE_Enriched<dim, spacedim>;
1240 };
1241 
1242 //------------------------variadic template constructor------------------------
1243 
1244 # ifndef DOXYGEN
1245 namespace internal
1246 {
1247  namespace FESystemImplementation
1248  {
1249  template <int dim, int spacedim>
1250  unsigned int
1251  count_nonzeros(
1252  const std::initializer_list<
1253  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1254  &fe_systems)
1255  {
1256  return std::count_if(
1257  fe_systems.begin(),
1258  fe_systems.end(),
1259  [](const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1260  unsigned int> &fe_system) {
1261  return fe_system.second > 0;
1262  });
1263  }
1264 
1265 
1266 
1267  template <int dim, int spacedim>
1268  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>
1269  promote_to_fe_pair(const FiniteElement<dim, spacedim> &fe)
1270  {
1271  return std::make_pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1272  unsigned int>(std::move(fe.clone()), 1u);
1273  }
1274 
1275 
1276 
1277  template <int dim, int spacedim>
1278  auto
1279  promote_to_fe_pair(std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1280  unsigned int> &&p)
1281  -> decltype(
1282  std::forward<std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1283  unsigned int>>(p))
1284  {
1285  return std::forward<
1286  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>(
1287  p);
1288  }
1289  } // namespace FESystemImplementation
1290 } // namespace internal
1291 
1292 
1293 
1294 # if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
1295 // We are just forwarding/delegating to the constructor taking a
1296 // std::initializer_list. If we decide to remove the deprecated constructors, we
1297 // might just use the variadic constructor with a suitable static_assert instead
1298 // of the std::enable_if.
1299 template <int dim, int spacedim>
1300 template <class... FEPairs, typename>
1301 FESystem<dim, spacedim>::FESystem(FEPairs &&... fe_pairs)
1302  : FESystem<dim, spacedim>(
1303  {internal::FESystemImplementation::promote_to_fe_pair<dim, spacedim>(
1304  std::forward<FEPairs>(fe_pairs))...})
1305 {}
1306 
1307 
1308 
1309 template <int dim, int spacedim>
1311  const std::initializer_list<
1312  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1313  &fe_systems)
1314  : FiniteElement<dim, spacedim>(
1315  FETools::Compositing::multiply_dof_numbers<dim, spacedim>(fe_systems),
1316  FETools::Compositing::compute_restriction_is_additive_flags<dim,
1317  spacedim>(
1318  fe_systems),
1319  FETools::Compositing::compute_nonzero_components<dim, spacedim>(
1320  fe_systems))
1321  , base_elements(internal::FESystemImplementation::count_nonzeros(fe_systems))
1322 {
1323  std::vector<const FiniteElement<dim, spacedim> *> fes;
1324  std::vector<unsigned int> multiplicities;
1325 
1326  const auto extract =
1327  [&fes, &multiplicities](
1328  const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1329  unsigned int> &fe_system) {
1330  fes.push_back(fe_system.first.get());
1331  multiplicities.push_back(fe_system.second);
1332  };
1333 
1334  for (const auto &p : fe_systems)
1335  extract(p);
1336 
1337  initialize(fes, multiplicities);
1338 }
1339 # endif
1340 
1341 # endif // DOXYGEN
1342 
1343 DEAL_II_NAMESPACE_CLOSE
1344 
1345 #endif
1346 /*---------------------------- fe_system.h ---------------------------*/
~InternalData() override
Definition: fe_system.cc:59
virtual std::size_t memory_consumption() const override
Definition: fe_system.cc:2526
virtual Point< dim > unit_support_point(const unsigned int index) const override
Definition: fe_system.cc:2317
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
Definition: fe_system.h:1231
Definition: tria.h:71
static const unsigned int invalid_unsigned_int
Definition: types.h:173
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_system.cc:405
FiniteElement< dim, spacedim >::InternalDataBase & get_fe_data(const unsigned int base_no) const
Definition: fe_system.cc:69
void build_interface_constraints()
Definition: fe_system.cc:1402
virtual std::string get_name() const override
Definition: fe_system.cc:314
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
Definition: fe_system.cc:2228
virtual FiniteElementDomination::Domination compare_for_face_domination(const FiniteElement< dim, spacedim > &fe_other) const override
Definition: fe_system.cc:2248
virtual Tensor< 4, dim > shape_4th_derivative(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:580
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const override
Definition: fe_system.cc:2362
virtual ~FESystem() override=default
virtual void convert_generalized_support_point_values_to_dof_values(const std::vector< Vector< double >> &support_point_values, std::vector< double > &dof_values) const override
Definition: fe_system.cc:2419
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
Definition: fe_system.cc:2304
virtual Tensor< 1, dim > shape_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_system.cc:458
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const override
Definition: fe_system.cc:2293
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const =0
virtual double shape_value(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:389
virtual unsigned int face_to_cell_index(const unsigned int face_dof_index, const unsigned int face, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false) const override
Definition: fe_system.cc:869
virtual const FiniteElement< dim, spacedim > & get_sub_fe(const unsigned int first_component, const unsigned int n_selected_components) const override
Definition: fe_system.cc:360
virtual Tensor< 4, dim > shape_4th_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_system.cc:596
InternalData(const unsigned int n_base_elements)
Definition: fe_system.cc:50
virtual Tensor< 3, dim > shape_3rd_derivative(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:534
std::vector< std::vector< std::size_t > > generalized_support_points_index_table
Definition: fe_system.h:1135
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
Definition: fe_system.cc:343
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
Definition: fe_system.cc:914
std::vector< std::pair< unsigned int, unsigned int > > hp_object_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
Definition: fe_system.cc:2108
UpdateFlags
static const unsigned int invalid_face_number
Definition: fe_system.h:1110
virtual const FullMatrix< double > & get_prolongation_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const override
Definition: fe_system.cc:798
Abstract base class for mapping classes.
Definition: dof_tools.h:57
Definition: fe.h:42
void set_fe_data(const unsigned int base_no, std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase >)
Definition: fe_system.cc:81
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:488
internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > & get_fe_output_object(const unsigned int base_no) const
Definition: fe_system.cc:94
unsigned int n_base_elements() const
Definition: fe.h:3102
virtual bool hp_constraints_are_implemented() const override
Definition: fe_system.cc:1869
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > get_face_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim-1 > &quadrature,::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
Definition: fe_system.cc:989
std::vector< std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > > base_fe_datas
Definition: fe_system.h:1219
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
Definition: fe_system.cc:2220
void initialize(const std::vector< const FiniteElement< dim, spacedim > * > &fes, const std::vector< unsigned int > &multiplicities)
Definition: fe_system.cc:1606
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix) const override
Definition: fe_system.cc:1991
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > get_subface_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim-1 > &quadrature,::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
Definition: fe_system.cc:1050
virtual Tensor< 3, dim > shape_3rd_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_system.cc:550
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
Definition: fe_system.cc:626
virtual const FullMatrix< double > & get_restriction_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const override
Definition: fe_system.cc:702
FESystem(const FiniteElement< dim, spacedim > &fe, const unsigned int n_elements)
Definition: fe_system.cc:112
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:442
void compute_fill(const Mapping< dim, spacedim > &mapping, const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int sub_no, const Quadrature< dim_1 > &quadrature, const CellSimilarity::Similarity cell_similarity, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const typename FiniteElement< dim, spacedim >::InternalDataBase &fe_data, const internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
Definition: fe_system.cc:1200
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
Definition: fe_system.cc:1882
virtual Tensor< 2, dim > shape_grad_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_system.cc:504
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > get_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim > &quadrature,::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
Definition: fe_system.cc:928
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_quad_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
Definition: fe_system.cc:2238
virtual Point< dim-1 > unit_face_support_point(const unsigned int index) const override
Definition: fe_system.cc:2339
std::vector< std::pair< std::unique_ptr< const FiniteElement< dim, spacedim > >, unsigned int > > base_elements
Definition: fe_system.h:1121