Reference documentation for deal.II version 9.4.0
\(\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
33template <int dim, int spacedim>
34class FE_Enriched;
35#endif
36
207template <int dim, int spacedim = dim>
208class FESystem : public FiniteElement<dim, spacedim>
209{
210public:
215 FESystem() = delete;
216
248 const unsigned int n_elements);
249
257 const unsigned int n1,
259 const unsigned int n2);
260
268 const unsigned int n1,
270 const unsigned int n2,
272 const unsigned int n3);
273
281 const unsigned int n1,
283 const unsigned int n2,
285 const unsigned int n3,
287 const unsigned int n4);
288
296 const unsigned int n1,
298 const unsigned int n2,
300 const unsigned int n3,
302 const unsigned int n4,
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 = typename enable_if_all<
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)...>::type>
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:
605 using FiniteElement<dim, spacedim>::get_sub_fe;
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
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
1021
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 {
1069
1075 unsigned int in_index;
1076
1082 unsigned int out_index;
1083 };
1084
1085protected:
1086 virtual std::unique_ptr<
1089 const UpdateFlags update_flags,
1090 const Mapping<dim, spacedim> &mapping,
1091 const Quadrature<dim> & quadrature,
1093 spacedim>
1094 &output_data) const override;
1095
1096 using FiniteElement<dim, spacedim>::get_face_data;
1097
1098 virtual std::unique_ptr<
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
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
1133 using FiniteElement<dim, spacedim>::fill_fe_face_values;
1134
1135 virtual void
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
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
1179 const Mapping<dim, spacedim> & mapping,
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
1192private:
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
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
1348namespace 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.
1401template <int dim, int spacedim>
1402template <class... FEPairs, typename>
1403FESystem<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
1411template <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 >)
InternalData(const unsigned int n_base_elements)
std::vector< std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > > base_fe_datas
Definition: fe_system.h:1322
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
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(FEPairs &&...fe_pairs)
FESystem()=delete
std::mutex mutex
Definition: fe_system.h:1340
virtual Point< dim > unit_support_point(const unsigned int index) const override
std::vector< std::vector< BaseOffsets > > nonprimitive_offset_tables
Definition: fe_system.h:1212
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:1223
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
std::vector< Table< 2, unsigned int > > primitive_offset_tables
Definition: fe_system.h:1207
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
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
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
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:1196
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:1237
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
FESystem(FESystem< dim, spacedim > &&other_fe_system) noexcept
Definition: fe_system.h:574
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:3075
Definition: point.h:111
Definition: vector.h:109
#define DEAL_II_NAMESPACE_OPEN
Definition: config.h:442
#define DEAL_II_NAMESPACE_CLOSE
Definition: config.h:443
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)
static const unsigned int invalid_unsigned_int
Definition: types.h:201
STL namespace.
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