Reference documentation for deal.II version 9.1.1
\(\newcommand{\dealcoloneq}{\mathrel{\vcenter{:}}=}\)
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 
964  const unsigned int codim = 0) const override final;
965 
967 
982  virtual void
984  const std::vector<Vector<double>> &support_point_values,
985  std::vector<double> & dof_values) const override;
986 
995  virtual std::size_t
996  memory_consumption() const override;
997 
998 protected:
999  virtual std::unique_ptr<
1000  typename FiniteElement<dim, spacedim>::InternalDataBase>
1001  get_data(
1002  const UpdateFlags update_flags,
1003  const Mapping<dim, spacedim> &mapping,
1004  const Quadrature<dim> & quadrature,
1005  ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1006  spacedim>
1007  &output_data) const override;
1008 
1009  virtual std::unique_ptr<
1010  typename FiniteElement<dim, spacedim>::InternalDataBase>
1011  get_face_data(
1012  const UpdateFlags update_flags,
1013  const Mapping<dim, spacedim> &mapping,
1014  const Quadrature<dim - 1> & quadrature,
1015  ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1016  spacedim>
1017  &output_data) const override;
1018 
1019  virtual std::unique_ptr<
1020  typename FiniteElement<dim, spacedim>::InternalDataBase>
1022  const UpdateFlags update_flags,
1023  const Mapping<dim, spacedim> &mapping,
1024  const Quadrature<dim - 1> & quadrature,
1025  ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1026  spacedim>
1027  &output_data) const override;
1028 
1029  virtual void
1030  fill_fe_values(
1031  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1032  const CellSimilarity::Similarity cell_similarity,
1033  const Quadrature<dim> & quadrature,
1034  const Mapping<dim, spacedim> & mapping,
1035  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1036  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1037  spacedim>
1038  & mapping_data,
1039  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1040  ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1041  spacedim>
1042  &output_data) const override;
1043 
1044  virtual void
1045  fill_fe_face_values(
1046  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1047  const unsigned int face_no,
1048  const Quadrature<dim - 1> & quadrature,
1049  const Mapping<dim, spacedim> & mapping,
1050  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1051  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1052  spacedim>
1053  & mapping_data,
1054  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1055  ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1056  spacedim>
1057  &output_data) const override;
1058 
1059  virtual void
1060  fill_fe_subface_values(
1061  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1062  const unsigned int face_no,
1063  const unsigned int sub_no,
1064  const Quadrature<dim - 1> & quadrature,
1065  const Mapping<dim, spacedim> & mapping,
1066  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1067  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1068  spacedim>
1069  & mapping_data,
1070  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1071  ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1072  spacedim>
1073  &output_data) const override;
1074 
1085  template <int dim_1>
1086  void
1087  compute_fill(
1088  const Mapping<dim, spacedim> & mapping,
1089  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1090  const unsigned int face_no,
1091  const unsigned int sub_no,
1092  const Quadrature<dim_1> & quadrature,
1093  const CellSimilarity::Similarity cell_similarity,
1094  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1095  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_data,
1096  const internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
1097  &mapping_data,
1098  internal::FEValuesImplementation::FiniteElementRelatedData<dim, spacedim>
1099  &output_data) const;
1100 
1101 private:
1105  static const unsigned int invalid_face_number = numbers::invalid_unsigned_int;
1106 
1114  std::vector<std::pair<std::unique_ptr<const FiniteElement<dim, spacedim>>,
1115  unsigned int>>
1117 
1131 
1137  void
1138  initialize(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1139  const std::vector<unsigned int> &multiplicities);
1140 
1144  void
1146 
1152  template <int structdim>
1153  std::vector<std::pair<unsigned int, unsigned int>>
1154  hp_object_dof_identities(const FiniteElement<dim, spacedim> &fe_other) const;
1155 
1162  class InternalData : public FiniteElement<dim, spacedim>::InternalDataBase
1163  {
1164  public:
1169  InternalData(const unsigned int n_base_elements);
1170 
1175  ~InternalData() override;
1176 
1181  void
1182  set_fe_data(
1183  const unsigned int base_no,
1184  std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>);
1185 
1191  get_fe_data(const unsigned int base_no) const;
1192 
1199  get_fe_output_object(const unsigned int base_no) const;
1200 
1201  private:
1212  typename std::vector<
1213  std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>>
1215 
1224  mutable std::vector<
1227  };
1228 
1229  /*
1230  * Mutex for protecting initialization of restriction and embedding matrix.
1231  */
1232  mutable Threads::Mutex mutex;
1233 
1234  friend class FE_Enriched<dim, spacedim>;
1235 };
1236 
1237 //------------------------variadic template constructor------------------------
1238 
1239 # ifndef DOXYGEN
1240 namespace internal
1241 {
1242  namespace FESystemImplementation
1243  {
1244  template <int dim, int spacedim>
1245  unsigned int
1246  count_nonzeros(
1247  const std::initializer_list<
1248  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1249  &fe_systems)
1250  {
1251  return std::count_if(
1252  fe_systems.begin(),
1253  fe_systems.end(),
1254  [](const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1255  unsigned int> &fe_system) {
1256  return fe_system.second > 0;
1257  });
1258  }
1259 
1260 
1261 
1262  template <int dim, int spacedim>
1263  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>
1264  promote_to_fe_pair(const FiniteElement<dim, spacedim> &fe)
1265  {
1266  return std::make_pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1267  unsigned int>(std::move(fe.clone()), 1u);
1268  }
1269 
1270 
1271 
1272  template <int dim, int spacedim>
1273  auto
1274  promote_to_fe_pair(std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1275  unsigned int> &&p)
1276  -> decltype(
1277  std::forward<std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1278  unsigned int>>(p))
1279  {
1280  return std::forward<
1281  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>(
1282  p);
1283  }
1284  } // namespace FESystemImplementation
1285 } // namespace internal
1286 
1287 
1288 
1289 # if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
1290 // We are just forwarding/delegating to the constructor taking a
1291 // std::initializer_list. If we decide to remove the deprecated constructors, we
1292 // might just use the variadic constructor with a suitable static_assert instead
1293 // of the std::enable_if.
1294 template <int dim, int spacedim>
1295 template <class... FEPairs, typename>
1296 FESystem<dim, spacedim>::FESystem(FEPairs &&... fe_pairs)
1297  : FESystem<dim, spacedim>(
1298  {internal::FESystemImplementation::promote_to_fe_pair<dim, spacedim>(
1299  std::forward<FEPairs>(fe_pairs))...})
1300 {}
1301 
1302 
1303 
1304 template <int dim, int spacedim>
1306  const std::initializer_list<
1307  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1308  &fe_systems)
1309  : FiniteElement<dim, spacedim>(
1310  FETools::Compositing::multiply_dof_numbers<dim, spacedim>(fe_systems),
1312  spacedim>(
1313  fe_systems),
1314  FETools::Compositing::compute_nonzero_components<dim, spacedim>(
1315  fe_systems))
1316  , base_elements(internal::FESystemImplementation::count_nonzeros(fe_systems))
1317 {
1318  std::vector<const FiniteElement<dim, spacedim> *> fes;
1319  std::vector<unsigned int> multiplicities;
1320 
1321  const auto extract =
1322  [&fes, &multiplicities](
1323  const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1324  unsigned int> &fe_system) {
1325  fes.push_back(fe_system.first.get());
1326  multiplicities.push_back(fe_system.second);
1327  };
1328 
1329  for (const auto &p : fe_systems)
1330  extract(p);
1331 
1332  initialize(fes, multiplicities);
1333 }
1334 # endif
1335 
1336 # endif // DOXYGEN
1337 
1338 DEAL_II_NAMESPACE_CLOSE
1339 
1340 #endif
1341 /*---------------------------- fe_system.h ---------------------------*/
virtual std::size_t memory_consumption() const override
Definition: fe_system.cc:2536
virtual Point< dim > unit_support_point(const unsigned int index) const override
Definition: fe_system.cc:2328
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
Definition: fe_system.h:1226
Definition: tria.h:71
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_system.cc:405
void build_interface_constraints()
Definition: fe_system.cc:1409
FiniteElementData< dim > multiply_dof_numbers(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities, const bool do_tensor_product=true)
void initialize(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities)
Definition: fe_system.cc:1613
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:2234
std::vector< std::pair< unsigned int, unsigned int > > hp_object_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
Definition: fe_system.cc:2115
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:2373
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:2429
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
Definition: fe_system.cc:2315
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:2304
std::vector< bool > compute_restriction_is_additive_flags(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities)
STL namespace.
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
LinearAlgebra::distributed::Vector< Number > Vector
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:1130
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
UpdateFlags
static const unsigned int invalid_face_number
Definition: fe_system.h:1105
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:44
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:1054
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:488
ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
virtual bool hp_constraints_are_implemented() const override
Definition: fe_system.cc:1876
std::vector< std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > > base_fe_datas
Definition: fe_system.h:1214
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:2226
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix) const override
Definition: fe_system.cc:1998
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const override final
Definition: fe_system.cc:2254
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
std::vector< ComponentMask > compute_nonzero_components(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities, const bool do_tensor_product=true)
FESystem(const FiniteElement< dim, spacedim > &fe, const unsigned int n_elements)
Definition: fe_system.cc:112
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:1207
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:442
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
Definition: fe_system.cc:1889
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
unsigned int n_base_elements() const
Definition: fe.h:3125
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::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:991
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:2244
std::vector< std::pair< std::unique_ptr< const FiniteElement< dim, spacedim > >, unsigned int > > base_elements
Definition: fe_system.h:1116
virtual Point< dim - 1 > unit_face_support_point(const unsigned int index) const override
Definition: fe_system.cc:2350