Reference documentation for deal.II version GIT 85a786e179 2022-11-27 23:15:01+00:00
\(\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_system.h
Go to the documentation of this file.
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 1999 - 2022 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 #include <deal.II/base/config.h>
20 
21 #include <deal.II/fe/fe.h>
22 #include <deal.II/fe/fe_tools.h>
23 
24 #include <memory>
25 #include <type_traits>
26 #include <utility>
27 #include <vector>
28 
30 
31 // Forward declaration
32 #ifndef DOXYGEN
33 template <int dim, int spacedim>
34 class FE_Enriched;
35 #endif
36 
207 template <int dim, int spacedim = dim>
208 class FESystem : public FiniteElement<dim, spacedim>
209 {
210 public:
215  FESystem() = delete;
216 
248  const unsigned int n_elements);
249 
257  const unsigned int n1,
258  const FiniteElement<dim, spacedim> &fe2,
259  const unsigned int n2);
260 
268  const unsigned int n1,
269  const FiniteElement<dim, spacedim> &fe2,
270  const unsigned int n2,
271  const FiniteElement<dim, spacedim> &fe3,
272  const unsigned int n3);
273 
281  const unsigned int n1,
282  const FiniteElement<dim, spacedim> &fe2,
283  const unsigned int n2,
284  const FiniteElement<dim, spacedim> &fe3,
285  const unsigned int n3,
286  const FiniteElement<dim, spacedim> &fe4,
287  const unsigned int n4);
288 
296  const unsigned int n1,
297  const FiniteElement<dim, spacedim> &fe2,
298  const unsigned int n2,
299  const FiniteElement<dim, spacedim> &fe3,
300  const unsigned int n3,
301  const FiniteElement<dim, spacedim> &fe4,
302  const unsigned int n4,
303  const FiniteElement<dim, spacedim> &fe5,
304  const unsigned int n5);
305 
491  FESystem(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
492  const std::vector<unsigned int> &multiplicities);
493 
494 #if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
537  template <
538  class... FEPairs,
539  typename = enable_if_all_t<
540  (std::is_same<typename std::decay<FEPairs>::type,
541  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
542  unsigned int>>::value ||
543  std::is_base_of<FiniteElement<dim, spacedim>,
544  typename std::decay<FEPairs>::type>::value)...>>
545  FESystem(FEPairs &&...fe_pairs);
546 
560  const std::initializer_list<
561  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
562  &fe_systems);
563 #endif
564 
570 
574  FESystem(FESystem<dim, spacedim> &&other_fe_system) noexcept
575  : FiniteElement<dim, spacedim>(std::move(other_fe_system))
576  {
577  base_elements = std::move(other_fe_system.base_elements);
579  std::move(other_fe_system.generalized_support_points_index_table);
580  }
581 
585  virtual ~FESystem() override = default;
586 
595  virtual std::string
596  get_name() const override;
597 
598  virtual std::unique_ptr<FiniteElement<dim, spacedim>>
599  clone() const override;
600 
601  virtual UpdateFlags
602  requires_update_flags(const UpdateFlags update_flags) const override;
603 
604  // make variant with ComponentMask also available:
606 
610  virtual const FiniteElement<dim, spacedim> &
611  get_sub_fe(const unsigned int first_component,
612  const unsigned int n_selected_components) const override;
613 
626  virtual double
627  shape_value(const unsigned int i, const Point<dim> &p) const override;
628 
637  virtual double
638  shape_value_component(const unsigned int i,
639  const Point<dim> & p,
640  const unsigned int component) const override;
641 
656  virtual Tensor<1, dim>
657  shape_grad(const unsigned int i, const Point<dim> &p) const override;
658 
667  virtual Tensor<1, dim>
668  shape_grad_component(const unsigned int i,
669  const Point<dim> & p,
670  const unsigned int component) const override;
671 
686  virtual Tensor<2, dim>
687  shape_grad_grad(const unsigned int i, const Point<dim> &p) const override;
688 
697  virtual Tensor<2, dim>
698  shape_grad_grad_component(const unsigned int i,
699  const Point<dim> & p,
700  const unsigned int component) const override;
701 
716  virtual Tensor<3, dim>
717  shape_3rd_derivative(const unsigned int i,
718  const Point<dim> & p) const override;
719 
728  virtual Tensor<3, dim>
729  shape_3rd_derivative_component(const unsigned int i,
730  const Point<dim> & p,
731  const unsigned int component) const override;
732 
747  virtual Tensor<4, dim>
748  shape_4th_derivative(const unsigned int i,
749  const Point<dim> & p) const override;
750 
759  virtual Tensor<4, dim>
760  shape_4th_derivative_component(const unsigned int i,
761  const Point<dim> & p,
762  const unsigned int component) const override;
763 
775  virtual void
777  FullMatrix<double> &matrix) const override;
778 
785  virtual const FiniteElement<dim, spacedim> &
786  base_element(const unsigned int index) const override;
787 
792  virtual bool
793  has_support_on_face(const unsigned int shape_index,
794  const unsigned int face_index) const override;
795 
819  virtual const FullMatrix<double> &
821  const unsigned int child,
822  const RefinementCase<dim> &refinement_case =
824 
852  virtual const FullMatrix<double> &
854  const unsigned int child,
855  const RefinementCase<dim> &refinement_case =
857 
896  virtual unsigned int
897  face_to_cell_index(const unsigned int face_dof_index,
898  const unsigned int face,
899  const bool face_orientation = true,
900  const bool face_flip = false,
901  const bool face_rotation = false) const override;
902 
906  virtual Point<dim>
907  unit_support_point(const unsigned int index) const override;
908 
912  virtual Point<dim - 1>
913  unit_face_support_point(const unsigned int index,
914  const unsigned int face_no = 0) const override;
915 
923  virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
924  get_constant_modes() const override;
925 
938  virtual bool
939  hp_constraints_are_implemented() const override;
940 
953  virtual void
956  const unsigned int face_no = 0) const override;
957 
958 
971  virtual void
973  const FiniteElement<dim, spacedim> &source,
974  const unsigned int subface,
976  const unsigned int face_no = 0) const override;
977 
993  virtual std::vector<std::pair<unsigned int, unsigned int>>
995  const FiniteElement<dim, spacedim> &fe_other) const override;
996 
1001  virtual std::vector<std::pair<unsigned int, unsigned int>>
1003  const FiniteElement<dim, spacedim> &fe_other) const override;
1004 
1009  virtual std::vector<std::pair<unsigned int, unsigned int>>
1011  const unsigned int face_no = 0) const override;
1012 
1018  const unsigned int codim = 0) const override final;
1019 
1036  virtual void
1038  const std::vector<Vector<double>> &support_point_values,
1039  std::vector<double> & dof_values) const override;
1040 
1049  virtual std::size_t
1050  memory_consumption() const override;
1051 
1064  {
1068  unsigned int n_nonzero_components;
1069 
1075  unsigned int in_index;
1076 
1082  unsigned int out_index;
1083  };
1084 
1085 protected:
1086  virtual std::unique_ptr<
1088  get_data(
1089  const UpdateFlags update_flags,
1090  const Mapping<dim, spacedim> &mapping,
1091  const Quadrature<dim> & quadrature,
1093  spacedim>
1094  &output_data) const override;
1095 
1097 
1098  virtual std::unique_ptr<
1100  get_face_data(
1101  const UpdateFlags update_flags,
1102  const Mapping<dim, spacedim> & mapping,
1103  const hp::QCollection<dim - 1> &quadrature,
1105  spacedim>
1106  &output_data) const override;
1107 
1108  virtual std::unique_ptr<
1111  const UpdateFlags update_flags,
1112  const Mapping<dim, spacedim> &mapping,
1113  const Quadrature<dim - 1> & quadrature,
1115  spacedim>
1116  &output_data) const override;
1117 
1118  virtual void
1120  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1121  const CellSimilarity::Similarity cell_similarity,
1122  const Quadrature<dim> & quadrature,
1123  const Mapping<dim, spacedim> & mapping,
1124  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1125  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1126  spacedim>
1127  & mapping_data,
1128  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1130  spacedim>
1131  &output_data) const override;
1132 
1134 
1135  virtual void
1137  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1138  const unsigned int face_no,
1139  const hp::QCollection<dim - 1> & quadrature,
1140  const Mapping<dim, spacedim> & mapping,
1141  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1142  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1143  spacedim>
1144  & mapping_data,
1145  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1147  spacedim>
1148  &output_data) const override;
1149 
1150  virtual void
1152  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1153  const unsigned int face_no,
1154  const unsigned int sub_no,
1155  const Quadrature<dim - 1> & quadrature,
1156  const Mapping<dim, spacedim> & mapping,
1157  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1158  const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1159  spacedim>
1160  & mapping_data,
1161  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1163  spacedim>
1164  &output_data) const override;
1165 
1176  template <class Q_or_QC>
1177  void
1178  compute_fill(
1179  const Mapping<dim, spacedim> & mapping,
1180  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1181  const unsigned int face_no,
1182  const unsigned int sub_no,
1183  const Q_or_QC & quadrature,
1184  const CellSimilarity::Similarity cell_similarity,
1185  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1186  const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_data,
1188  &mapping_data,
1190  &output_data) const;
1191 
1192 private:
1197 
1207  std::vector<Table<2, unsigned int>> primitive_offset_tables;
1208 
1212  std::vector<std::vector<BaseOffsets>> nonprimitive_offset_tables;
1213 
1221  std::vector<std::pair<std::unique_ptr<const FiniteElement<dim, spacedim>>,
1222  unsigned int>>
1224 
1237  std::vector<std::vector<std::size_t>> generalized_support_points_index_table;
1238 
1244  void
1245  initialize(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1246  const std::vector<unsigned int> &multiplicities);
1247 
1251  void
1253 
1259  template <int structdim>
1260  std::vector<std::pair<unsigned int, unsigned int>>
1262  const unsigned int face_no = 0) const;
1263 
1270  class InternalData : public FiniteElement<dim, spacedim>::InternalDataBase
1271  {
1272  public:
1277  InternalData(const unsigned int n_base_elements);
1278 
1283  ~InternalData() override;
1284 
1289  void
1290  set_fe_data(
1291  const unsigned int base_no,
1292  std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>);
1293 
1299  get_fe_data(const unsigned int base_no) const;
1300 
1307  get_fe_output_object(const unsigned int base_no) const;
1308 
1309  private:
1320  typename std::vector<
1321  std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>>
1323 
1332  mutable std::vector<
1335  };
1336 
1340  mutable std::mutex mutex;
1341 
1342  friend class FE_Enriched<dim, spacedim>;
1343 };
1344 
1345 //------------------------variadic template constructor------------------------
1346 
1347 #ifndef DOXYGEN
1348 namespace internal
1349 {
1350  namespace FESystemImplementation
1351  {
1352  template <int dim, int spacedim>
1353  unsigned int
1354  count_nonzeros(
1355  const std::initializer_list<
1356  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1357  &fe_systems)
1358  {
1359  return std::count_if(
1360  fe_systems.begin(),
1361  fe_systems.end(),
1362  [](const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1363  unsigned int> &fe_system) {
1364  return fe_system.second > 0;
1365  });
1366  }
1367 
1368 
1369 
1370  template <int dim, int spacedim>
1371  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>
1372  promote_to_fe_pair(const FiniteElement<dim, spacedim> &fe)
1373  {
1374  return std::make_pair(std::move(fe.clone()), 1u);
1375  }
1376 
1377 
1378 
1379  template <int dim, int spacedim>
1380  auto
1381  promote_to_fe_pair(std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1382  unsigned int> &&p)
1383  -> decltype(
1384  std::forward<std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1385  unsigned int>>(p))
1386  {
1387  return std::forward<
1388  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>(
1389  p);
1390  }
1391  } // namespace FESystemImplementation
1392 } // namespace internal
1393 
1394 
1395 
1396 # if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
1397 // We are just forwarding/delegating to the constructor taking a
1398 // std::initializer_list. If we decide to remove the deprecated constructors, we
1399 // might just use the variadic constructor with a suitable static_assert instead
1400 // of the std::enable_if.
1401 template <int dim, int spacedim>
1402 template <class... FEPairs, typename>
1403 FESystem<dim, spacedim>::FESystem(FEPairs &&...fe_pairs)
1404  : FESystem<dim, spacedim>(
1405  {internal::FESystemImplementation::promote_to_fe_pair<dim, spacedim>(
1406  std::forward<FEPairs>(fe_pairs))...})
1407 {}
1408 
1409 
1410 
1411 template <int dim, int spacedim>
1413  const std::initializer_list<
1414  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1415  &fe_systems)
1416  : FiniteElement<dim, spacedim>(
1417  FETools::Compositing::multiply_dof_numbers<dim, spacedim>(fe_systems),
1419  spacedim>(
1420  fe_systems),
1421  FETools::Compositing::compute_nonzero_components<dim, spacedim>(
1422  fe_systems))
1423  , base_elements(internal::FESystemImplementation::count_nonzeros(fe_systems))
1424 {
1425  std::vector<const FiniteElement<dim, spacedim> *> fes;
1426  std::vector<unsigned int> multiplicities;
1427 
1428  const auto extract =
1429  [&fes, &multiplicities](
1430  const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1431  unsigned int> &fe_system) {
1432  fes.push_back(fe_system.first.get());
1433  multiplicities.push_back(fe_system.second);
1434  };
1435 
1436  for (const auto &p : fe_systems)
1437  extract(p);
1438 
1439  initialize(fes, multiplicities);
1440 }
1441 # endif
1442 #endif // DOXYGEN
1443 
1445 
1446 #endif
void set_fe_data(const unsigned int base_no, std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase >)
Definition: fe_system.cc:260
InternalData(const unsigned int n_base_elements)
Definition: fe_system.cc:230
std::vector< std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > > base_fe_datas
Definition: fe_system.h:1322
~InternalData() override
Definition: fe_system.cc:239
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
Definition: fe_system.h:1334
FiniteElement< dim, spacedim >::InternalDataBase & get_fe_data(const unsigned int base_no) const
Definition: fe_system.cc:249
internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > & get_fe_output_object(const unsigned int base_no) const
Definition: fe_system.cc:272
FESystem(const std::initializer_list< std::pair< std::unique_ptr< FiniteElement< dim, spacedim >>, unsigned int >> &fe_systems)
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:1095
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
Definition: fe_system.cc:802
FESystem(const FESystem< dim, spacedim > &)=delete
FESystem(FEPairs &&...fe_pairs)
FESystem()=delete
std::mutex mutex
Definition: fe_system.h:1340
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const override
Definition: fe_system.cc:2600
std::vector< std::vector< BaseOffsets > > nonprimitive_offset_tables
Definition: fe_system.h:1212
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > get_face_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const hp::QCollection< dim - 1 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
Definition: fe_system.cc:1158
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_quad_dof_identities(const FiniteElement< dim, spacedim > &fe_other, const unsigned int face_no=0) const override
Definition: fe_system.cc:2464
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:879
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const override
Definition: fe_system.cc:2525
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:1036
virtual Point< dim - 1 > unit_face_support_point(const unsigned int index, const unsigned int face_no=0) const override
Definition: fe_system.cc:2569
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
Definition: fe_system.cc:1081
virtual void fill_fe_subface_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int sub_no, const Quadrature< dim - 1 > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const ::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, const typename FiniteElement< dim, spacedim >::InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
Definition: fe_system.cc:1342
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:638
std::vector< std::pair< std::unique_ptr< const FiniteElement< dim, spacedim > >, unsigned int > > base_elements
Definition: fe_system.h:1223
virtual std::size_t memory_consumption() const override
Definition: fe_system.cc:2763
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:683
std::vector< Table< 2, unsigned int > > primitive_offset_tables
Definition: fe_system.h:1207
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:2656
virtual Tensor< 4, dim > shape_4th_derivative(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:757
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:2454
virtual Point< dim > unit_support_point(const unsigned int index) const override
Definition: fe_system.cc:2548
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix, const unsigned int face_no=0) const override
Definition: fe_system.cc:2093
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_system.cc:586
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 Q_or_QC &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:1374
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
Definition: fe_system.cc:2535
virtual double shape_value(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:570
virtual std::string get_name() const override
Definition: fe_system.cc:495
static const unsigned int invalid_face_number
Definition: fe_system.h:1196
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:541
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:622
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:773
void build_interface_constraints()
Definition: fe_system.cc:1537
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:1221
virtual bool hp_constraints_are_implemented() const override
Definition: fe_system.cc:2080
void initialize(const std::vector< const FiniteElement< dim, spacedim > * > &fes, const std::vector< unsigned int > &multiplicities)
Definition: fe_system.cc:1761
std::vector< std::pair< unsigned int, unsigned int > > hp_object_dof_identities(const FiniteElement< dim, spacedim > &fe_other, const unsigned int face_no=0) const
Definition: fe_system.cc:2333
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const override final
Definition: fe_system.cc:2475
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix, const unsigned int face_no=0) const override
Definition: fe_system.cc:2209
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:970
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:667
std::vector< std::vector< std::size_t > > generalized_support_points_index_table
Definition: fe_system.h:1237
virtual Tensor< 3, dim > shape_3rd_derivative(const unsigned int i, const Point< dim > &p) const override
Definition: fe_system.cc:712
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:2446
virtual void fill_fe_face_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const hp::QCollection< dim - 1 > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const ::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, const typename FiniteElement< dim, spacedim >::InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
Definition: fe_system.cc:1312
FESystem(FESystem< dim, spacedim > &&other_fe_system) noexcept
Definition: fe_system.h:574
virtual void fill_fe_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const CellSimilarity::Similarity cell_similarity, const Quadrature< dim > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const ::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, const typename FiniteElement< dim, spacedim >::InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
Definition: fe_system.cc:1282
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
Definition: fe_system.cc:524
virtual ~FESystem() override=default
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:728
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const =0
unsigned int n_base_elements() const
friend class InternalDataBase
Definition: fe.h:3063
Definition: point.h:111
Definition: vector.h:109
#define DEAL_II_NAMESPACE_OPEN
Definition: config.h:458
#define DEAL_II_NAMESPACE_CLOSE
Definition: config.h:459
UpdateFlags
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)
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)
std::vector< bool > compute_restriction_is_additive_flags(const std::vector< const FiniteElement< dim, spacedim > * > &fes, const std::vector< unsigned int > &multiplicities)
@ matrix
Contents is actually a matrix.
constexpr ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
static const unsigned int invalid_unsigned_int
Definition: types.h:206
unsigned int n_nonzero_components
Definition: fe_system.h:1068
unsigned int out_index
Definition: fe_system.h:1082
unsigned int in_index
Definition: fe_system.h:1075
typename enable_if_all< Values... >::type enable_if_all_t