deal.II version GIT relicensing-6809-ge913b9bb34 2026-09-25 17:20: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\}}\)
Loading...
Searching...
No Matches
fe_system.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 1999 - 2025 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_fe_system_h
14#define dealii_fe_system_h
15
16#include <deal.II/base/config.h>
17
18#include <deal.II/fe/fe.h>
19#include <deal.II/fe/fe_tools.h>
20
21#include <memory>
22#include <type_traits>
23#include <utility>
24#include <vector>
25
27
28// Forward declaration
29#ifndef DOXYGEN
30template <int dim, int spacedim>
31class FE_Enriched;
32#endif
33
204template <int dim, int spacedim = dim>
205class FESystem : public FiniteElement<dim, spacedim>
206{
207public:
212 FESystem() = delete;
213
245 const unsigned int n_elements);
246
254 const unsigned int n1,
256 const unsigned int n2);
257
265 const unsigned int n1,
267 const unsigned int n2,
269 const unsigned int n3);
270
278 const unsigned int n1,
280 const unsigned int n2,
282 const unsigned int n3,
284 const unsigned int n4);
285
293 const unsigned int n1,
295 const unsigned int n2,
297 const unsigned int n3,
299 const unsigned int n4,
301 const unsigned int n5);
302
488 FESystem(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
489 const std::vector<unsigned int> &multiplicities);
490
491#if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
534 template <
535 class... FEPairs,
536 typename = enable_if_all_t<
537 (std::is_same_v<std::decay_t<FEPairs>,
538 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
539 unsigned int>> ||
540 std::is_base_of_v<FiniteElement<dim, spacedim>,
541 std::decay_t<FEPairs>>)...>>
542 FESystem(FEPairs &&...fe_pairs);
543
557 const std::initializer_list<
558 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
559 &fe_systems);
560#endif
561
567
571 FESystem(FESystem<dim, spacedim> &&other_fe_system) noexcept
572 : FiniteElement<dim, spacedim>(std::move(other_fe_system))
573 , base_elements(std::move(other_fe_system.base_elements))
575 std::move(other_fe_system.generalized_support_points_index_table))
576 {}
577
581 virtual ~FESystem() override = default;
582
591 virtual std::string
592 get_name() const override;
593
594 virtual std::unique_ptr<FiniteElement<dim, spacedim>>
595 clone() const override;
596
597 virtual UpdateFlags
598 requires_update_flags(const UpdateFlags update_flags) const override;
599
600 // make variant with ComponentMask also available:
601 using FiniteElement<dim, spacedim>::get_sub_fe;
602
606 virtual const FiniteElement<dim, spacedim> &
607 get_sub_fe(const unsigned int first_component,
608 const unsigned int n_selected_components) const override;
609
622 virtual double
623 shape_value(const unsigned int i, const Point<dim> &p) const override;
624
633 virtual double
634 shape_value_component(const unsigned int i,
635 const Point<dim> &p,
636 const unsigned int component) const override;
637
652 virtual Tensor<1, dim>
653 shape_grad(const unsigned int i, const Point<dim> &p) const override;
654
663 virtual Tensor<1, dim>
664 shape_grad_component(const unsigned int i,
665 const Point<dim> &p,
666 const unsigned int component) const override;
667
683 virtual Tensor<2, dim>
684 shape_grad_grad(const unsigned int i, const Point<dim> &p) const override;
685
694 virtual Tensor<2, dim>
695 shape_grad_grad_component(const unsigned int i,
696 const Point<dim> &p,
697 const unsigned int component) const override;
698
713 virtual Tensor<3, dim>
714 shape_3rd_derivative(const unsigned int i,
715 const Point<dim> &p) const override;
716
725 virtual Tensor<3, dim>
726 shape_3rd_derivative_component(const unsigned int i,
727 const Point<dim> &p,
728 const unsigned int component) const override;
729
744 virtual Tensor<4, dim>
745 shape_4th_derivative(const unsigned int i,
746 const Point<dim> &p) const override;
747
756 virtual Tensor<4, dim>
757 shape_4th_derivative_component(const unsigned int i,
758 const Point<dim> &p,
759 const unsigned int component) const override;
760
772 virtual void
774 FullMatrix<double> &matrix) const override;
775
782 virtual const FiniteElement<dim, spacedim> &
783 base_element(const unsigned int index) const override;
784
789 virtual bool
790 has_support_on_face(const unsigned int shape_index,
791 const unsigned int face_index) const override;
792
816 virtual const FullMatrix<double> &
818 const unsigned int child,
819 const RefinementCase<dim> &refinement_case =
821
849 virtual const FullMatrix<double> &
851 const unsigned int child,
852 const RefinementCase<dim> &refinement_case =
854
887 virtual unsigned int
888 face_to_cell_index(const unsigned int face_dof_index,
889 const unsigned int face,
890 const types::geometric_orientation combined_orientation =
892
896 virtual Point<dim>
897 unit_support_point(const unsigned int index) const override;
898
902 virtual Point<dim - 1>
903 unit_face_support_point(const unsigned int index,
904 const unsigned int face_no = 0) const override;
905
913 virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
914 get_constant_modes() const override;
915
928 virtual bool
930
943 virtual void
945 FullMatrix<double> &matrix,
946 const unsigned int face_no = 0) const override;
947
948
961 virtual void
963 const FiniteElement<dim, spacedim> &source,
964 const unsigned int subface,
965 FullMatrix<double> &matrix,
966 const unsigned int face_no = 0) const override;
967
983 virtual std::vector<std::pair<unsigned int, unsigned int>>
985 const FiniteElement<dim, spacedim> &fe_other) const override;
986
991 virtual std::vector<std::pair<unsigned int, unsigned int>>
993 const FiniteElement<dim, spacedim> &fe_other) const override;
994
999 virtual std::vector<std::pair<unsigned int, unsigned int>>
1001 const unsigned int face_no = 0) const override;
1002
1008 const unsigned int codim = 0) const override final;
1009
1026 virtual void
1028 const std::vector<Vector<double>> &support_point_values,
1029 std::vector<double> &dof_values) const override;
1030
1039 virtual std::size_t
1040 memory_consumption() const override;
1041
1054 {
1059
1065 unsigned int in_index;
1066
1072 unsigned int out_index;
1073 };
1074
1075protected:
1076 virtual std::unique_ptr<
1079 const UpdateFlags update_flags,
1080 const Mapping<dim, spacedim> &mapping,
1081 const Quadrature<dim> &quadrature,
1083 spacedim>
1084 &output_data) const override;
1085
1086 using FiniteElement<dim, spacedim>::get_face_data;
1087
1088 virtual std::unique_ptr<
1091 const UpdateFlags update_flags,
1092 const Mapping<dim, spacedim> &mapping,
1093 const hp::QCollection<dim - 1> &quadrature,
1095 spacedim>
1096 &output_data) const override;
1097
1098 virtual std::unique_ptr<
1101 const UpdateFlags update_flags,
1102 const Mapping<dim, spacedim> &mapping,
1103 const Quadrature<dim - 1> &quadrature,
1105 spacedim>
1106 &output_data) const override;
1107
1108 virtual void
1111 const CellSimilarity::Similarity cell_similarity,
1112 const Quadrature<dim> &quadrature,
1113 const Mapping<dim, spacedim> &mapping,
1114 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1116 &mapping_data,
1117 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1119 spacedim>
1120 &output_data) const override;
1121
1122 using FiniteElement<dim, spacedim>::fill_fe_face_values;
1123
1124 virtual void
1127 const unsigned int face_no,
1128 const hp::QCollection<dim - 1> &quadrature,
1129 const Mapping<dim, spacedim> &mapping,
1130 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1132 &mapping_data,
1133 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1135 spacedim>
1136 &output_data) const override;
1137
1138 virtual void
1141 const unsigned int face_no,
1142 const unsigned int sub_no,
1143 const Quadrature<dim - 1> &quadrature,
1144 const Mapping<dim, spacedim> &mapping,
1145 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1147 &mapping_data,
1148 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1150 spacedim>
1151 &output_data) const override;
1152
1163 template <class Q_or_QC>
1164 void
1166 const Mapping<dim, spacedim> &mapping,
1168 const unsigned int face_no,
1169 const unsigned int sub_no,
1170 const Q_or_QC &quadrature,
1171 const CellSimilarity::Similarity cell_similarity,
1172 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1173 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_data,
1175 &mapping_data,
1177 &output_data) const;
1178
1179private:
1184
1194 std::vector<Table<2, unsigned int>> primitive_offset_tables;
1195
1199 std::vector<std::vector<BaseOffsets>> nonprimitive_offset_tables;
1200
1208 std::vector<std::pair<std::unique_ptr<const FiniteElement<dim, spacedim>>,
1209 unsigned int>>
1211
1224 std::vector<std::vector<std::size_t>> generalized_support_points_index_table;
1225
1231 void
1232 initialize(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1233 const std::vector<unsigned int> &multiplicities);
1234
1238 void
1240
1246 template <int structdim>
1247 std::vector<std::pair<unsigned int, unsigned int>>
1249 const unsigned int face_no = 0) const;
1250
1257 class InternalData : public FiniteElement<dim, spacedim>::InternalDataBase
1258 {
1259 public:
1264 InternalData(const unsigned int n_base_elements);
1265
1270 ~InternalData() override;
1271
1276 void
1278 const unsigned int base_no,
1279 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>);
1280
1286 get_fe_data(const unsigned int base_no) const;
1287
1294 get_fe_output_object(const unsigned int base_no) const;
1295
1296 private:
1307 typename std::vector<
1308 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>>
1310
1319 mutable std::vector<
1322 };
1323
1328 mutable std::mutex restriction_matrix_mutex;
1329 mutable std::mutex prolongation_matrix_mutex;
1330
1331 friend class FE_Enriched<dim, spacedim>;
1332};
1333
1334//------------------------variadic template constructor------------------------
1335
1336#ifndef DOXYGEN
1337namespace internal
1338{
1339 namespace FESystemImplementation
1340 {
1341 template <int dim, int spacedim>
1342 unsigned int
1343 count_nonzeros(
1344 const std::initializer_list<
1345 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1346 &fe_systems)
1347 {
1348 return std::count_if(
1349 fe_systems.begin(),
1350 fe_systems.end(),
1351 [](const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1352 unsigned int> &fe_system) {
1353 return fe_system.second > 0;
1354 });
1355 }
1356
1357
1358
1359 template <int dim, int spacedim>
1360 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>
1361 promote_to_fe_pair(const FiniteElement<dim, spacedim> &fe)
1362 {
1363 return std::make_pair(std::move(fe.clone()), 1u);
1364 }
1365
1366
1367
1368 template <int dim, int spacedim>
1369 auto
1370 promote_to_fe_pair(std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1371 unsigned int> &&p)
1372 -> decltype(std::forward<
1373 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1374 unsigned int>>(p))
1375 {
1376 return std::forward<
1377 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>(
1378 p);
1379 }
1380 } // namespace FESystemImplementation
1381} // namespace internal
1382
1383
1384
1385# if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
1386// We are just forwarding/delegating to the constructor taking a
1387// std::initializer_list. If we decide to remove the deprecated constructors, we
1388// might just use the variadic constructor with a suitable static_assert instead
1389// of the std::enable_if.
1390template <int dim, int spacedim>
1391template <class... FEPairs, typename>
1392FESystem<dim, spacedim>::FESystem(FEPairs &&...fe_pairs)
1393 : FESystem<dim, spacedim>(
1394 {internal::FESystemImplementation::promote_to_fe_pair<dim, spacedim>(
1395 std::forward<FEPairs>(fe_pairs))...})
1396{}
1397
1398
1399
1400template <int dim, int spacedim>
1402 const std::initializer_list<
1403 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1404 &fe_systems)
1405 : FiniteElement<dim, spacedim>(
1406 FETools::Compositing::multiply_dof_numbers<dim, spacedim>(fe_systems),
1408 spacedim>(
1409 fe_systems),
1410 FETools::Compositing::compute_nonzero_components<dim, spacedim>(
1411 fe_systems))
1412 , base_elements(internal::FESystemImplementation::count_nonzeros(fe_systems))
1413{
1414 std::vector<const FiniteElement<dim, spacedim> *> fes;
1415 std::vector<unsigned int> multiplicities;
1416
1417 const auto extract =
1418 [&fes, &multiplicities](
1419 const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1420 unsigned int> &fe_system) {
1421 fes.push_back(fe_system.first.get());
1422 multiplicities.push_back(fe_system.second);
1423 };
1424
1425 for (const auto &p : fe_systems)
1426 extract(p);
1427
1428 initialize(fes, multiplicities);
1429}
1430# endif
1431#endif // DOXYGEN
1432
1434
1435#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:1309
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
Definition fe_system.h:1321
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
std::mutex restriction_matrix_mutex
Definition fe_system.h:1328
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
virtual Point< dim > unit_support_point(const unsigned int index) const override
std::vector< std::vector< BaseOffsets > > nonprimitive_offset_tables
Definition fe_system.h:1199
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< std::pair< std::unique_ptr< const FiniteElement< dim, spacedim > >, unsigned int > > base_elements
Definition fe_system.h:1210
virtual Tensor< 3, dim > shape_3rd_derivative(const unsigned int i, const Point< dim > &p) const override
std::vector< Table< 2, unsigned int > > primitive_offset_tables
Definition fe_system.h:1194
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 unsigned int face_to_cell_index(const unsigned int face_dof_index, const unsigned int face, const types::geometric_orientation combined_orientation=numbers::default_geometric_orientation) 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:1183
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
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 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
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:1224
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
FESystem(FESystem< dim, spacedim > &&other_fe_system) noexcept
Definition fe_system.h:571
std::mutex prolongation_matrix_mutex
Definition fe_system.h:1329
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
Abstract base class for mapping classes.
Definition mapping.h:318
Definition point.h:111
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
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)
constexpr ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
constexpr unsigned int invalid_unsigned_int
Definition types.h:228
constexpr types::geometric_orientation default_geometric_orientation
Definition types.h:342
STL namespace.
std::uint8_t geometric_orientation
Definition types.h:38
unsigned int n_nonzero_components
Definition fe_system.h:1058
unsigned int out_index
Definition fe_system.h:1072
unsigned int in_index
Definition fe_system.h:1065
typename enable_if_all< Values... >::type enable_if_all_t