Reference documentation for deal.II version Git 54f37b890c 2020-02-28 19:52:28 +0100
\(\newcommand{\vcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\vcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
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 // Forward declaration
39 # ifndef DOXYGEN
40 template <int dim, int spacedim>
41 class FE_Enriched;
42 # endif
43 
171 template <int dim, int spacedim = dim>
172 class FESystem : public FiniteElement<dim, spacedim>
173 {
174 public:
206  const unsigned int n_elements);
207 
215  const unsigned int n1,
216  const FiniteElement<dim, spacedim> &fe2,
217  const unsigned int n2);
218 
226  const unsigned int n1,
227  const FiniteElement<dim, spacedim> &fe2,
228  const unsigned int n2,
229  const FiniteElement<dim, spacedim> &fe3,
230  const unsigned int n3);
231 
239  const unsigned int n1,
240  const FiniteElement<dim, spacedim> &fe2,
241  const unsigned int n2,
242  const FiniteElement<dim, spacedim> &fe3,
243  const unsigned int n3,
244  const FiniteElement<dim, spacedim> &fe4,
245  const unsigned int n4);
246 
254  const unsigned int n1,
255  const FiniteElement<dim, spacedim> &fe2,
256  const unsigned int n2,
257  const FiniteElement<dim, spacedim> &fe3,
258  const unsigned int n3,
259  const FiniteElement<dim, spacedim> &fe4,
260  const unsigned int n4,
261  const FiniteElement<dim, spacedim> &fe5,
262  const unsigned int n5);
263 
449  FESystem(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
450  const std::vector<unsigned int> &multiplicities);
451 
452 # if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
453 
495  template <
496  class... FEPairs,
497  typename = typename enable_if_all<
498  (std::is_same<typename std::decay<FEPairs>::type,
499  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
500  unsigned int>>::value ||
501  std::is_base_of<FiniteElement<dim, spacedim>,
502  typename std::decay<FEPairs>::type>::value)...>::type>
503  FESystem(FEPairs &&... fe_pairs);
504 
517  FESystem(
518  const std::initializer_list<
519  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
520  &fe_systems);
521 # endif
522 
527  FESystem(const FESystem<dim, spacedim> &) = delete;
528 
532  FESystem(FESystem<dim, spacedim> &&other_fe_system) noexcept
533  : FiniteElement<dim, spacedim>(std::move(other_fe_system))
534  {
535  base_elements = std::move(other_fe_system.base_elements);
537  std::move(other_fe_system.generalized_support_points_index_table);
538  }
539 
543  virtual ~FESystem() override = default;
544 
553  virtual std::string
554  get_name() const override;
555 
556  virtual std::unique_ptr<FiniteElement<dim, spacedim>>
557  clone() const override;
558 
559  virtual UpdateFlags
560  requires_update_flags(const UpdateFlags update_flags) const override;
561 
562  // make variant with ComponentMask also available:
564 
568  virtual const FiniteElement<dim, spacedim> &
569  get_sub_fe(const unsigned int first_component,
570  const unsigned int n_selected_components) const override;
571 
584  virtual double
585  shape_value(const unsigned int i, const Point<dim> &p) const override;
586 
595  virtual double
596  shape_value_component(const unsigned int i,
597  const Point<dim> & p,
598  const unsigned int component) const override;
599 
614  virtual Tensor<1, dim>
615  shape_grad(const unsigned int i, const Point<dim> &p) const override;
616 
625  virtual Tensor<1, dim>
626  shape_grad_component(const unsigned int i,
627  const Point<dim> & p,
628  const unsigned int component) const override;
629 
644  virtual Tensor<2, dim>
645  shape_grad_grad(const unsigned int i, const Point<dim> &p) const override;
646 
655  virtual Tensor<2, dim>
656  shape_grad_grad_component(const unsigned int i,
657  const Point<dim> & p,
658  const unsigned int component) const override;
659 
674  virtual Tensor<3, dim>
675  shape_3rd_derivative(const unsigned int i,
676  const Point<dim> & p) const override;
677 
686  virtual Tensor<3, dim>
687  shape_3rd_derivative_component(const unsigned int i,
688  const Point<dim> & p,
689  const unsigned int component) const override;
690 
705  virtual Tensor<4, dim>
706  shape_4th_derivative(const unsigned int i,
707  const Point<dim> & p) const override;
708 
717  virtual Tensor<4, dim>
718  shape_4th_derivative_component(const unsigned int i,
719  const Point<dim> & p,
720  const unsigned int component) const override;
721 
733  virtual void
735  FullMatrix<double> &matrix) const override;
736 
743  virtual const FiniteElement<dim, spacedim> &
744  base_element(const unsigned int index) const override;
745 
750  virtual bool
751  has_support_on_face(const unsigned int shape_index,
752  const unsigned int face_index) const override;
753 
777  virtual const FullMatrix<double> &
779  const unsigned int child,
780  const RefinementCase<dim> &refinement_case =
782 
810  virtual const FullMatrix<double> &
812  const unsigned int child,
813  const RefinementCase<dim> &refinement_case =
815 
854  virtual unsigned int
855  face_to_cell_index(const unsigned int face_dof_index,
856  const unsigned int face,
857  const bool face_orientation = true,
858  const bool face_flip = false,
859  const bool face_rotation = false) const override;
860 
864  virtual Point<dim>
865  unit_support_point(const unsigned int index) const override;
866 
870  virtual Point<dim - 1>
871  unit_face_support_point(const unsigned int index) const override;
872 
880  virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
881  get_constant_modes() const override;
882 
895  virtual bool
896  hp_constraints_are_implemented() const override;
897 
910  virtual void
912  FullMatrix<double> &matrix) const override;
913 
914 
927  virtual void
929  const unsigned int subface,
930  FullMatrix<double> &matrix) const override;
931 
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 
963  virtual std::vector<std::pair<unsigned int, unsigned int>>
965  const FiniteElement<dim, spacedim> &fe_other) const override;
966 
972  const unsigned int codim = 0) const override final;
973 
975 
990  virtual void
992  const std::vector<Vector<double>> &support_point_values,
993  std::vector<double> & dof_values) const override;
994 
1003  virtual std::size_t
1004  memory_consumption() const override;
1005 
1006 protected:
1007  virtual std::unique_ptr<
1009  get_data(
1010  const UpdateFlags update_flags,
1011  const Mapping<dim, spacedim> &mapping,
1012  const Quadrature<dim> & quadrature,
1014  spacedim>
1015  &output_data) const override;
1016 
1017  virtual std::unique_ptr<
1019  get_face_data(
1020  const UpdateFlags update_flags,
1021  const Mapping<dim, spacedim> &mapping,
1022  const Quadrature<dim - 1> & quadrature,
1024  spacedim>
1025  &output_data) const override;
1026 
1027  virtual std::unique_ptr<
1030  const UpdateFlags update_flags,
1031  const Mapping<dim, spacedim> &mapping,
1032  const Quadrature<dim - 1> & quadrature,
1034  spacedim>
1035  &output_data) const override;
1036 
1037  virtual void
1038  fill_fe_values(
1039  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1040  const CellSimilarity::Similarity cell_similarity,
1041  const Quadrature<dim> & quadrature,
1042  const Mapping<dim, spacedim> & mapping,
1043  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1044  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1045  spacedim>
1046  & mapping_data,
1047  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1049  spacedim>
1050  &output_data) const override;
1051 
1052  virtual void
1053  fill_fe_face_values(
1054  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1055  const unsigned int face_no,
1056  const Quadrature<dim - 1> & quadrature,
1057  const Mapping<dim, spacedim> & mapping,
1058  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1059  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1060  spacedim>
1061  & mapping_data,
1062  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1064  spacedim>
1065  &output_data) const override;
1066 
1067  virtual void
1068  fill_fe_subface_values(
1069  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1070  const unsigned int face_no,
1071  const unsigned int sub_no,
1072  const Quadrature<dim - 1> & quadrature,
1073  const Mapping<dim, spacedim> & mapping,
1074  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1075  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1076  spacedim>
1077  & mapping_data,
1078  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1080  spacedim>
1081  &output_data) const override;
1082 
1093  template <int dim_1>
1094  void
1095  compute_fill(
1096  const Mapping<dim, spacedim> & mapping,
1097  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1098  const unsigned int face_no,
1099  const unsigned int sub_no,
1100  const Quadrature<dim_1> & quadrature,
1101  const CellSimilarity::Similarity cell_similarity,
1102  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1103  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_data,
1105  &mapping_data,
1107  &output_data) const;
1108 
1109 private:
1114 
1122  std::vector<std::pair<std::unique_ptr<const FiniteElement<dim, spacedim>>,
1123  unsigned int>>
1125 
1138  std::vector<std::vector<std::size_t>> generalized_support_points_index_table;
1139 
1145  void
1146  initialize(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1147  const std::vector<unsigned int> &multiplicities);
1148 
1152  void
1154 
1160  template <int structdim>
1161  std::vector<std::pair<unsigned int, unsigned int>>
1163 
1170  class InternalData : public FiniteElement<dim, spacedim>::InternalDataBase
1171  {
1172  public:
1177  InternalData(const unsigned int n_base_elements);
1178 
1183  ~InternalData() override;
1184 
1189  void
1190  set_fe_data(
1191  const unsigned int base_no,
1192  std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>);
1193 
1199  get_fe_data(const unsigned int base_no) const;
1200 
1207  get_fe_output_object(const unsigned int base_no) const;
1208 
1209  private:
1220  typename std::vector<
1221  std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>>
1223 
1232  mutable std::vector<
1235  };
1236 
1240  mutable std::mutex mutex;
1241 
1242  friend class FE_Enriched<dim, spacedim>;
1243 };
1244 
1245 //------------------------variadic template constructor------------------------
1246 
1247 # ifndef DOXYGEN
1248 namespace internal
1249 {
1250  namespace FESystemImplementation
1251  {
1252  template <int dim, int spacedim>
1253  unsigned int
1254  count_nonzeros(
1255  const std::initializer_list<
1256  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1257  &fe_systems)
1258  {
1259  return std::count_if(
1260  fe_systems.begin(),
1261  fe_systems.end(),
1262  [](const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1263  unsigned int> &fe_system) {
1264  return fe_system.second > 0;
1265  });
1266  }
1267 
1268 
1269 
1270  template <int dim, int spacedim>
1271  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>
1272  promote_to_fe_pair(const FiniteElement<dim, spacedim> &fe)
1273  {
1274  return std::make_pair(std::move(fe.clone()), 1u);
1275  }
1276 
1277 
1278 
1279  template <int dim, int spacedim>
1280  auto
1281  promote_to_fe_pair(std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1282  unsigned int> &&p)
1283  -> decltype(
1284  std::forward<std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1285  unsigned int>>(p))
1286  {
1287  return std::forward<
1288  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>(
1289  p);
1290  }
1291  } // namespace FESystemImplementation
1292 } // namespace internal
1293 
1294 
1295 
1296 # if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
1297 // We are just forwarding/delegating to the constructor taking a
1298 // std::initializer_list. If we decide to remove the deprecated constructors, we
1299 // might just use the variadic constructor with a suitable static_assert instead
1300 // of the std::enable_if.
1301 template <int dim, int spacedim>
1302 template <class... FEPairs, typename>
1303 FESystem<dim, spacedim>::FESystem(FEPairs &&... fe_pairs)
1304  : FESystem<dim, spacedim>(
1305  {internal::FESystemImplementation::promote_to_fe_pair<dim, spacedim>(
1306  std::forward<FEPairs>(fe_pairs))...})
1307 {}
1308 
1309 
1310 
1311 template <int dim, int spacedim>
1313  const std::initializer_list<
1314  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1315  &fe_systems)
1316  : FiniteElement<dim, spacedim>(
1317  FETools::Compositing::multiply_dof_numbers<dim, spacedim>(fe_systems),
1318  FETools::Compositing::compute_restriction_is_additive_flags<dim,
1319  spacedim>(
1320  fe_systems),
1321  FETools::Compositing::compute_nonzero_components<dim, spacedim>(
1322  fe_systems))
1323  , base_elements(internal::FESystemImplementation::count_nonzeros(fe_systems))
1324 {
1325  std::vector<const FiniteElement<dim, spacedim> *> fes;
1326  std::vector<unsigned int> multiplicities;
1327 
1328  const auto extract =
1329  [&fes, &multiplicities](
1330  const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1331  unsigned int> &fe_system) {
1332  fes.push_back(fe_system.first.get());
1333  multiplicities.push_back(fe_system.second);
1334  };
1335 
1336  for (const auto &p : fe_systems)
1337  extract(p);
1338 
1339  initialize(fes, multiplicities);
1340 }
1341 # endif
1342 
1343 # endif // DOXYGEN
1344 
1345 DEAL_II_NAMESPACE_CLOSE
1346 
1347 #endif
1348 /*---------------------------- fe_system.h ---------------------------*/
~InternalData() override
Definition: fe_system.cc:59
virtual std::size_t memory_consumption() const override
Definition: fe_system.cc:2515
virtual Point< dim > unit_support_point(const unsigned int index) const override
Definition: fe_system.cc:2309
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
Definition: fe_system.h:1234
static const unsigned int invalid_unsigned_int
Definition: types.h:187
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_system.cc:402
void build_interface_constraints()
Definition: fe_system.cc:1391
FESystem(FESystem< dim, spacedim > &&other_fe_system) noexcept
Definition: fe_system.h:532
void initialize(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities)
Definition: fe_system.cc:1595
virtual std::string get_name() const override
Definition: fe_system.cc:311
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:2216
std::vector< std::pair< unsigned int, unsigned int > > hp_object_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
Definition: fe_system.cc:2097
virtual Tensor< 4, dim > shape_4th_derivative(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:573
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const override
Definition: fe_system.cc:2352
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:2408
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
Definition: fe_system.cc:2296
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:454
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const override
Definition: fe_system.cc:2286
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:386
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:851
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:357
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:589
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:528
std::vector< std::vector< std::size_t > > generalized_support_points_index_table
Definition: fe_system.h:1138
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
Definition: fe_system.cc:340
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
Definition: fe_system.cc:896
std::mutex mutex
Definition: fe_system.h:1240
UpdateFlags
static const unsigned int invalid_face_number
Definition: fe_system.h:1113
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:785
Abstract base class for mapping classes.
Definition: mapping.h:302
Definition: fe.h:44
void set_fe_data(const unsigned int base_no, std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase >)
Definition: fe_system.cc:80
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:1036
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:483
virtual bool hp_constraints_are_implemented() const override
Definition: fe_system.cc:1858
std::vector< std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > > base_fe_datas
Definition: fe_system.h:1222
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:2208
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix) const override
Definition: fe_system.cc:1980
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const override final
Definition: fe_system.cc:2236
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:544
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
Definition: fe_system.cc:618
FiniteElement< dim, spacedim >::InternalDataBase & get_fe_data(const unsigned int base_no) const
Definition: fe_system.cc:69
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:694
FESystem(const FiniteElement< dim, spacedim > &fe, const unsigned int n_elements)
Definition: fe_system.cc:109
internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > & get_fe_output_object(const unsigned int base_no) const
Definition: fe_system.cc:92
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:1189
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:438
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
Definition: fe_system.cc:1871
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:499
unsigned int n_base_elements() const
Definition: fe.h:3124
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:910
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:973
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:2226
std::vector< std::pair< std::unique_ptr< const FiniteElement< dim, spacedim > >, unsigned int > > base_elements
Definition: fe_system.h:1124
virtual Point< dim - 1 > unit_face_support_point(const unsigned int index) const override
Definition: fe_system.cc:2330