Reference documentation for deal.II version 9.3.3
\(\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 - 2021 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
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
37
38// Forward declaration
39# ifndef DOXYGEN
40template <int dim, int spacedim>
41class FE_Enriched;
42# endif
43
214template <int dim, int spacedim = dim>
215class FESystem : public FiniteElement<dim, spacedim>
216{
217public:
222 FESystem() = delete;
223
255 const unsigned int n_elements);
256
264 const unsigned int n1,
266 const unsigned int n2);
267
275 const unsigned int n1,
277 const unsigned int n2,
279 const unsigned int n3);
280
288 const unsigned int n1,
290 const unsigned int n2,
292 const unsigned int n3,
294 const unsigned int n4);
295
303 const unsigned int n1,
305 const unsigned int n2,
307 const unsigned int n3,
309 const unsigned int n4,
311 const unsigned int n5);
312
498 FESystem(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
499 const std::vector<unsigned int> &multiplicities);
500
501# if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
544 template <
545 class... FEPairs,
546 typename = typename enable_if_all<
547 (std::is_same<typename std::decay<FEPairs>::type,
548 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
549 unsigned int>>::value ||
550 std::is_base_of<FiniteElement<dim, spacedim>,
551 typename std::decay<FEPairs>::type>::value)...>::type>
552 FESystem(FEPairs &&... fe_pairs);
553
567 const std::initializer_list<
568 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
569 &fe_systems);
570# endif
571
577
581 FESystem(FESystem<dim, spacedim> &&other_fe_system) noexcept
582 : FiniteElement<dim, spacedim>(std::move(other_fe_system))
583 {
584 base_elements = std::move(other_fe_system.base_elements);
586 std::move(other_fe_system.generalized_support_points_index_table);
587 }
588
592 virtual ~FESystem() override = default;
593
602 virtual std::string
603 get_name() const override;
604
605 virtual std::unique_ptr<FiniteElement<dim, spacedim>>
606 clone() const override;
607
608 virtual UpdateFlags
609 requires_update_flags(const UpdateFlags update_flags) const override;
610
611 // make variant with ComponentMask also available:
612 using FiniteElement<dim, spacedim>::get_sub_fe;
613
617 virtual const FiniteElement<dim, spacedim> &
618 get_sub_fe(const unsigned int first_component,
619 const unsigned int n_selected_components) const override;
620
633 virtual double
634 shape_value(const unsigned int i, const Point<dim> &p) const override;
635
644 virtual double
645 shape_value_component(const unsigned int i,
646 const Point<dim> & p,
647 const unsigned int component) const override;
648
663 virtual Tensor<1, dim>
664 shape_grad(const unsigned int i, const Point<dim> &p) const override;
665
674 virtual Tensor<1, dim>
675 shape_grad_component(const unsigned int i,
676 const Point<dim> & p,
677 const unsigned int component) const override;
678
693 virtual Tensor<2, dim>
694 shape_grad_grad(const unsigned int i, const Point<dim> &p) const override;
695
704 virtual Tensor<2, dim>
705 shape_grad_grad_component(const unsigned int i,
706 const Point<dim> & p,
707 const unsigned int component) const override;
708
723 virtual Tensor<3, dim>
724 shape_3rd_derivative(const unsigned int i,
725 const Point<dim> & p) const override;
726
735 virtual Tensor<3, dim>
736 shape_3rd_derivative_component(const unsigned int i,
737 const Point<dim> & p,
738 const unsigned int component) const override;
739
754 virtual Tensor<4, dim>
755 shape_4th_derivative(const unsigned int i,
756 const Point<dim> & p) const override;
757
766 virtual Tensor<4, dim>
767 shape_4th_derivative_component(const unsigned int i,
768 const Point<dim> & p,
769 const unsigned int component) const override;
770
782 virtual void
784 FullMatrix<double> &matrix) const override;
785
792 virtual const FiniteElement<dim, spacedim> &
793 base_element(const unsigned int index) const override;
794
799 virtual bool
800 has_support_on_face(const unsigned int shape_index,
801 const unsigned int face_index) const override;
802
826 virtual const FullMatrix<double> &
828 const unsigned int child,
829 const RefinementCase<dim> &refinement_case =
831
859 virtual const FullMatrix<double> &
861 const unsigned int child,
862 const RefinementCase<dim> &refinement_case =
864
903 virtual unsigned int
904 face_to_cell_index(const unsigned int face_dof_index,
905 const unsigned int face,
906 const bool face_orientation = true,
907 const bool face_flip = false,
908 const bool face_rotation = false) const override;
909
913 virtual Point<dim>
914 unit_support_point(const unsigned int index) const override;
915
919 virtual Point<dim - 1>
920 unit_face_support_point(const unsigned int index,
921 const unsigned int face_no = 0) const override;
922
930 virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
931 get_constant_modes() const override;
932
945 virtual bool
947
960 virtual void
963 const unsigned int face_no = 0) const override;
964
965
978 virtual void
980 const FiniteElement<dim, spacedim> &source,
981 const unsigned int subface,
983 const unsigned int face_no = 0) const override;
984
1000 virtual std::vector<std::pair<unsigned int, unsigned int>>
1002 const FiniteElement<dim, spacedim> &fe_other) const override;
1003
1008 virtual std::vector<std::pair<unsigned int, unsigned int>>
1010 const FiniteElement<dim, spacedim> &fe_other) const override;
1011
1016 virtual std::vector<std::pair<unsigned int, unsigned int>>
1018 const unsigned int face_no = 0) const override;
1019
1025 const unsigned int codim = 0) const override final;
1026
1028
1043 virtual void
1045 const std::vector<Vector<double>> &support_point_values,
1046 std::vector<double> & dof_values) const override;
1047
1056 virtual std::size_t
1057 memory_consumption() const override;
1058
1059protected:
1060 virtual std::unique_ptr<
1061 typename FiniteElement<dim, spacedim>::InternalDataBase>
1063 const UpdateFlags update_flags,
1064 const Mapping<dim, spacedim> &mapping,
1065 const Quadrature<dim> & quadrature,
1066 ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1067 spacedim>
1068 &output_data) const override;
1069
1070 using FiniteElement<dim, spacedim>::get_face_data;
1071
1072 virtual std::unique_ptr<
1073 typename FiniteElement<dim, spacedim>::InternalDataBase>
1075 const UpdateFlags update_flags,
1076 const Mapping<dim, spacedim> & mapping,
1077 const hp::QCollection<dim - 1> &quadrature,
1078 ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1079 spacedim>
1080 &output_data) const override;
1081
1082 virtual std::unique_ptr<
1083 typename FiniteElement<dim, spacedim>::InternalDataBase>
1085 const UpdateFlags update_flags,
1086 const Mapping<dim, spacedim> &mapping,
1087 const Quadrature<dim - 1> & quadrature,
1088 ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1089 spacedim>
1090 &output_data) const override;
1091
1092 virtual void
1094 const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1095 const CellSimilarity::Similarity cell_similarity,
1096 const Quadrature<dim> & quadrature,
1097 const Mapping<dim, spacedim> & mapping,
1098 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1099 const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1100 spacedim>
1101 & mapping_data,
1102 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1103 ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1104 spacedim>
1105 &output_data) const override;
1106
1107 using FiniteElement<dim, spacedim>::fill_fe_face_values;
1108
1109 virtual void
1111 const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1112 const unsigned int face_no,
1113 const hp::QCollection<dim - 1> & quadrature,
1114 const Mapping<dim, spacedim> & mapping,
1115 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1116 const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1117 spacedim>
1118 & mapping_data,
1119 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1120 ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1121 spacedim>
1122 &output_data) const override;
1123
1124 virtual void
1126 const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1127 const unsigned int face_no,
1128 const unsigned int sub_no,
1129 const Quadrature<dim - 1> & quadrature,
1130 const Mapping<dim, spacedim> & mapping,
1131 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1132 const ::internal::FEValuesImplementation::MappingRelatedData<dim,
1133 spacedim>
1134 & mapping_data,
1135 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1136 ::internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1137 spacedim>
1138 &output_data) const override;
1139
1150 template <int dim_1>
1151 void
1153 const Mapping<dim, spacedim> & mapping,
1154 const typename Triangulation<dim, spacedim>::cell_iterator &cell,
1155 const unsigned int face_no,
1156 const unsigned int sub_no,
1157 const hp::QCollection<dim_1> & quadrature,
1158 const CellSimilarity::Similarity cell_similarity,
1159 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1160 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_data,
1161 const internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
1162 &mapping_data,
1163 internal::FEValuesImplementation::FiniteElementRelatedData<dim, spacedim>
1164 &output_data) const;
1165
1166private:
1171
1179 std::vector<std::pair<std::unique_ptr<const FiniteElement<dim, spacedim>>,
1180 unsigned int>>
1182
1196
1202 void
1203 initialize(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1204 const std::vector<unsigned int> &multiplicities);
1205
1209 void
1211
1217 template <int structdim>
1218 std::vector<std::pair<unsigned int, unsigned int>>
1219 hp_object_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
1220 const unsigned int face_no = 0) const;
1221
1228 class InternalData : public FiniteElement<dim, spacedim>::InternalDataBase
1229 {
1230 public:
1235 InternalData(const unsigned int n_base_elements);
1236
1241 ~InternalData() override;
1242
1247 void
1249 const unsigned int base_no,
1250 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>);
1251
1257 get_fe_data(const unsigned int base_no) const;
1258
1265 get_fe_output_object(const unsigned int base_no) const;
1266
1267 private:
1278 typename std::vector<
1279 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>>
1281
1290 mutable std::vector<
1293 };
1294
1298 mutable std::mutex mutex;
1299
1300 friend class FE_Enriched<dim, spacedim>;
1301};
1302
1303//------------------------variadic template constructor------------------------
1304
1305# ifndef DOXYGEN
1306namespace internal
1307{
1308 namespace FESystemImplementation
1309 {
1310 template <int dim, int spacedim>
1311 unsigned int
1312 count_nonzeros(
1313 const std::initializer_list<
1314 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1315 &fe_systems)
1316 {
1317 return std::count_if(
1318 fe_systems.begin(),
1319 fe_systems.end(),
1320 [](const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1321 unsigned int> &fe_system) {
1322 return fe_system.second > 0;
1323 });
1324 }
1325
1326
1327
1328 template <int dim, int spacedim>
1329 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>
1330 promote_to_fe_pair(const FiniteElement<dim, spacedim> &fe)
1331 {
1332 return std::make_pair(std::move(fe.clone()), 1u);
1333 }
1334
1335
1336
1337 template <int dim, int spacedim>
1338 auto
1339 promote_to_fe_pair(std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1340 unsigned int> &&p)
1341 -> decltype(
1342 std::forward<std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1343 unsigned int>>(p))
1344 {
1345 return std::forward<
1346 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>(
1347 p);
1348 }
1349 } // namespace FESystemImplementation
1350} // namespace internal
1351
1352
1353
1354# if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
1355// We are just forwarding/delegating to the constructor taking a
1356// std::initializer_list. If we decide to remove the deprecated constructors, we
1357// might just use the variadic constructor with a suitable static_assert instead
1358// of the std::enable_if.
1359template <int dim, int spacedim>
1360template <class... FEPairs, typename>
1361FESystem<dim, spacedim>::FESystem(FEPairs &&... fe_pairs)
1362 : FESystem<dim, spacedim>(
1363 {internal::FESystemImplementation::promote_to_fe_pair<dim, spacedim>(
1364 std::forward<FEPairs>(fe_pairs))...})
1365{}
1366
1367
1368
1369template <int dim, int spacedim>
1371 const std::initializer_list<
1372 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1373 &fe_systems)
1374 : FiniteElement<dim, spacedim>(
1375 FETools::Compositing::multiply_dof_numbers<dim, spacedim>(fe_systems),
1377 spacedim>(
1378 fe_systems),
1379 FETools::Compositing::compute_nonzero_components<dim, spacedim>(
1380 fe_systems))
1381 , base_elements(internal::FESystemImplementation::count_nonzeros(fe_systems))
1382{
1383 std::vector<const FiniteElement<dim, spacedim> *> fes;
1384 std::vector<unsigned int> multiplicities;
1385
1386 const auto extract =
1387 [&fes, &multiplicities](
1388 const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1389 unsigned int> &fe_system) {
1390 fes.push_back(fe_system.first.get());
1391 multiplicities.push_back(fe_system.second);
1392 };
1393
1394 for (const auto &p : fe_systems)
1395 extract(p);
1396
1397 initialize(fes, multiplicities);
1398}
1399# endif
1400
1401# endif // DOXYGEN
1402
1404
1405#endif
1406/*---------------------------- fe_system.h ---------------------------*/
void set_fe_data(const unsigned int base_no, std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase >)
InternalData(const unsigned int n_base_elements)
std::vector< std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > > base_fe_datas
Definition: fe_system.h:1280
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
Definition: fe_system.h:1292
FiniteElement< dim, spacedim >::InternalDataBase & get_fe_data(const unsigned int base_no) const
internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > & get_fe_output_object(const unsigned int base_no) const
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
FESystem(const std::initializer_list< std::pair< std::unique_ptr< FiniteElement< dim, spacedim > >, unsigned int > > &fe_systems)
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const override
FESystem(const FESystem< dim, spacedim > &)=delete
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const override
FESystem()=delete
std::mutex mutex
Definition: fe_system.h:1298
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 hp::QCollection< 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
virtual Point< dim > unit_support_point(const unsigned int index) const override
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
std::vector< std::pair< std::unique_ptr< const FiniteElement< dim, spacedim > >, unsigned int > > base_elements
Definition: fe_system.h:1181
virtual Tensor< 3, dim > shape_3rd_derivative(const unsigned int i, const Point< dim > &p) const override
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
virtual std::string get_name() const override
virtual const FullMatrix< double > & get_prolongation_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const override
virtual const FiniteElement< dim, spacedim > & get_sub_fe(const unsigned int first_component, const unsigned int n_selected_components) const override
FESystem(const FiniteElement< dim, spacedim > &fe1, const unsigned int n1, const FiniteElement< dim, spacedim > &fe2, const unsigned int n2, const FiniteElement< dim, spacedim > &fe3, const unsigned int n3)
virtual Tensor< 1, dim > shape_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const override final
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
FESystem(FEPairs &&... fe_pairs)
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
virtual Tensor< 3, dim > shape_3rd_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual const FullMatrix< double > & get_restriction_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const override
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const override
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const override
FESystem(const std::vector< const FiniteElement< dim, spacedim > * > &fes, const std::vector< unsigned int > &multiplicities)
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
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
static const unsigned int invalid_face_number
Definition: fe_system.h:1170
virtual bool hp_constraints_are_implemented() const override
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
FESystem(const FiniteElement< dim, spacedim > &fe1, const unsigned int n1, const FiniteElement< dim, spacedim > &fe2, const unsigned int n2, const FiniteElement< dim, spacedim > &fe3, const unsigned int n3, const FiniteElement< dim, spacedim > &fe4, const unsigned int n4, const FiniteElement< dim, spacedim > &fe5, const unsigned int n5)
void build_interface_constraints()
virtual Tensor< 4, dim > shape_4th_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual Point< dim - 1 > unit_face_support_point(const unsigned int index, const unsigned int face_no=0) const override
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
void initialize(const std::vector< const FiniteElement< dim, spacedim > * > &fes, const std::vector< unsigned int > &multiplicities)
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
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
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual double shape_value(const unsigned int i, const Point< dim > &p) const override
FESystem(const FiniteElement< dim, spacedim > &fe1, const unsigned int n1, const FiniteElement< dim, spacedim > &fe2, const unsigned int n2, const FiniteElement< dim, spacedim > &fe3, const unsigned int n3, const FiniteElement< dim, spacedim > &fe4, const unsigned int n4)
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
virtual Tensor< 2, dim > shape_grad_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix, const unsigned int face_no=0) const override
FESystem(const FiniteElement< dim, spacedim > &fe, const unsigned int n_elements)
std::vector< std::vector< std::size_t > > generalized_support_points_index_table
Definition: fe_system.h:1195
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
FESystem(FESystem< dim, spacedim > &&other_fe_system) noexcept
Definition: fe_system.h:581
virtual std::size_t memory_consumption() const override
virtual ~FESystem() override=default
FESystem(const FiniteElement< dim, spacedim > &fe1, const unsigned int n1, const FiniteElement< dim, spacedim > &fe2, const unsigned int n2)
virtual Tensor< 4, dim > shape_4th_derivative(const unsigned int i, const Point< dim > &p) const override
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
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const =0
unsigned int n_base_elements() const
friend class InternalDataBase
Definition: fe.h:3066
Abstract base class for mapping classes.
Definition: mapping.h:304
Definition: point.h:111
Definition: vector.h:110
#define DEAL_II_NAMESPACE_OPEN
Definition: config.h:402
#define DEAL_II_NAMESPACE_CLOSE
Definition: config.h:403
UpdateFlags
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)
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)
@ matrix
Contents is actually a matrix.
constexpr ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
Definition: hp.h:118
static const unsigned int invalid_unsigned_int
Definition: types.h:196
STL namespace.