deal.II version GIT relicensing-2430-g7f5db50250 2025-01-24 01:10:00+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: LGPL-2.1-or-later
4// Copyright (C) 1999 - 2024 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Part of the source code is dual licensed under Apache-2.0 WITH
9// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
10// governing the source code and code contributions can be found in
11// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
12//
13// ------------------------------------------------------------------------
14
15#ifndef dealii_fe_system_h
16#define dealii_fe_system_h
17
18#include <deal.II/base/config.h>
19
20#include <deal.II/fe/fe.h>
21#include <deal.II/fe/fe_tools.h>
22
23#include <memory>
24#include <type_traits>
25#include <utility>
26#include <vector>
27
29
30// Forward declaration
31#ifndef DOXYGEN
32template <int dim, int spacedim>
33class FE_Enriched;
34#endif
35
206template <int dim, int spacedim = dim>
207class FESystem : public FiniteElement<dim, spacedim>
208{
209public:
214 FESystem() = delete;
215
247 const unsigned int n_elements);
248
256 const unsigned int n1,
258 const unsigned int n2);
259
267 const unsigned int n1,
269 const unsigned int n2,
271 const unsigned int n3);
272
280 const unsigned int n1,
282 const unsigned int n2,
284 const unsigned int n3,
286 const unsigned int n4);
287
295 const unsigned int n1,
297 const unsigned int n2,
299 const unsigned int n3,
301 const unsigned int n4,
303 const unsigned int n5);
304
490 FESystem(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
491 const std::vector<unsigned int> &multiplicities);
492
493#if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
536 template <
537 class... FEPairs,
538 typename = enable_if_all_t<
539 (std::is_same_v<std::decay_t<FEPairs>,
540 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
541 unsigned int>> ||
542 std::is_base_of_v<FiniteElement<dim, spacedim>,
543 std::decay_t<FEPairs>>)...>>
544 FESystem(FEPairs &&...fe_pairs);
545
559 const std::initializer_list<
560 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
561 &fe_systems);
562#endif
563
569
573 FESystem(FESystem<dim, spacedim> &&other_fe_system) noexcept
574 : FiniteElement<dim, spacedim>(std::move(other_fe_system))
575 , base_elements(std::move(other_fe_system.base_elements))
577 std::move(other_fe_system.generalized_support_points_index_table))
578 {}
579
583 virtual ~FESystem() override = default;
584
593 virtual std::string
594 get_name() const override;
595
596 virtual std::unique_ptr<FiniteElement<dim, spacedim>>
597 clone() const override;
598
599 virtual UpdateFlags
600 requires_update_flags(const UpdateFlags update_flags) const override;
601
602 // make variant with ComponentMask also available:
603 using FiniteElement<dim, spacedim>::get_sub_fe;
604
608 virtual const FiniteElement<dim, spacedim> &
609 get_sub_fe(const unsigned int first_component,
610 const unsigned int n_selected_components) const override;
611
624 virtual double
625 shape_value(const unsigned int i, const Point<dim> &p) const override;
626
635 virtual double
636 shape_value_component(const unsigned int i,
637 const Point<dim> &p,
638 const unsigned int component) const override;
639
654 virtual Tensor<1, dim>
655 shape_grad(const unsigned int i, const Point<dim> &p) const override;
656
665 virtual Tensor<1, dim>
666 shape_grad_component(const unsigned int i,
667 const Point<dim> &p,
668 const unsigned int component) const override;
669
685 virtual Tensor<2, dim>
686 shape_grad_grad(const unsigned int i, const Point<dim> &p) const override;
687
696 virtual Tensor<2, dim>
697 shape_grad_grad_component(const unsigned int i,
698 const Point<dim> &p,
699 const unsigned int component) const override;
700
715 virtual Tensor<3, dim>
716 shape_3rd_derivative(const unsigned int i,
717 const Point<dim> &p) const override;
718
727 virtual Tensor<3, dim>
728 shape_3rd_derivative_component(const unsigned int i,
729 const Point<dim> &p,
730 const unsigned int component) const override;
731
746 virtual Tensor<4, dim>
747 shape_4th_derivative(const unsigned int i,
748 const Point<dim> &p) const override;
749
758 virtual Tensor<4, dim>
759 shape_4th_derivative_component(const unsigned int i,
760 const Point<dim> &p,
761 const unsigned int component) const override;
762
774 virtual void
776 FullMatrix<double> &matrix) const override;
777
784 virtual const FiniteElement<dim, spacedim> &
785 base_element(const unsigned int index) const override;
786
791 virtual bool
792 has_support_on_face(const unsigned int shape_index,
793 const unsigned int face_index) const override;
794
818 virtual const FullMatrix<double> &
820 const unsigned int child,
821 const RefinementCase<dim> &refinement_case =
823
851 virtual const FullMatrix<double> &
853 const unsigned int child,
854 const RefinementCase<dim> &refinement_case =
856
888 virtual unsigned int
889 face_to_cell_index(const unsigned int face_dof_index,
890 const unsigned int face,
891 const types::geometric_orientation combined_orientation =
893
897 virtual Point<dim>
898 unit_support_point(const unsigned int index) const override;
899
903 virtual Point<dim - 1>
904 unit_face_support_point(const unsigned int index,
905 const unsigned int face_no = 0) const override;
906
914 virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
915 get_constant_modes() const override;
916
929 virtual bool
931
944 virtual void
946 FullMatrix<double> &matrix,
947 const unsigned int face_no = 0) const override;
948
949
962 virtual void
964 const FiniteElement<dim, spacedim> &source,
965 const unsigned int subface,
966 FullMatrix<double> &matrix,
967 const unsigned int face_no = 0) const override;
968
984 virtual std::vector<std::pair<unsigned int, unsigned int>>
986 const FiniteElement<dim, spacedim> &fe_other) const override;
987
992 virtual std::vector<std::pair<unsigned int, unsigned int>>
994 const FiniteElement<dim, spacedim> &fe_other) const override;
995
1000 virtual std::vector<std::pair<unsigned int, unsigned int>>
1002 const unsigned int face_no = 0) const override;
1003
1009 const unsigned int codim = 0) const override final;
1010
1027 virtual void
1029 const std::vector<Vector<double>> &support_point_values,
1030 std::vector<double> &dof_values) const override;
1031
1040 virtual std::size_t
1041 memory_consumption() const override;
1042
1055 {
1060
1066 unsigned int in_index;
1067
1073 unsigned int out_index;
1074 };
1075
1076protected:
1077 virtual std::unique_ptr<
1080 const UpdateFlags update_flags,
1081 const Mapping<dim, spacedim> &mapping,
1082 const Quadrature<dim> &quadrature,
1084 spacedim>
1085 &output_data) const override;
1086
1087 using FiniteElement<dim, spacedim>::get_face_data;
1088
1089 virtual std::unique_ptr<
1092 const UpdateFlags update_flags,
1093 const Mapping<dim, spacedim> &mapping,
1094 const hp::QCollection<dim - 1> &quadrature,
1096 spacedim>
1097 &output_data) const override;
1098
1099 virtual std::unique_ptr<
1102 const UpdateFlags update_flags,
1103 const Mapping<dim, spacedim> &mapping,
1104 const Quadrature<dim - 1> &quadrature,
1106 spacedim>
1107 &output_data) const override;
1108
1109 virtual void
1112 const CellSimilarity::Similarity cell_similarity,
1113 const Quadrature<dim> &quadrature,
1114 const Mapping<dim, spacedim> &mapping,
1115 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1117 &mapping_data,
1118 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1120 spacedim>
1121 &output_data) const override;
1122
1123 using FiniteElement<dim, spacedim>::fill_fe_face_values;
1124
1125 virtual void
1128 const unsigned int face_no,
1129 const hp::QCollection<dim - 1> &quadrature,
1130 const Mapping<dim, spacedim> &mapping,
1131 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1133 &mapping_data,
1134 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1136 spacedim>
1137 &output_data) const override;
1138
1139 virtual void
1142 const unsigned int face_no,
1143 const unsigned int sub_no,
1144 const Quadrature<dim - 1> &quadrature,
1145 const Mapping<dim, spacedim> &mapping,
1146 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1148 &mapping_data,
1149 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1151 spacedim>
1152 &output_data) const override;
1153
1164 template <class Q_or_QC>
1165 void
1167 const Mapping<dim, spacedim> &mapping,
1169 const unsigned int face_no,
1170 const unsigned int sub_no,
1171 const Q_or_QC &quadrature,
1172 const CellSimilarity::Similarity cell_similarity,
1173 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1174 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_data,
1176 &mapping_data,
1178 &output_data) const;
1179
1180private:
1185
1195 std::vector<Table<2, unsigned int>> primitive_offset_tables;
1196
1200 std::vector<std::vector<BaseOffsets>> nonprimitive_offset_tables;
1201
1209 std::vector<std::pair<std::unique_ptr<const FiniteElement<dim, spacedim>>,
1210 unsigned int>>
1212
1225 std::vector<std::vector<std::size_t>> generalized_support_points_index_table;
1226
1232 void
1233 initialize(const std::vector<const FiniteElement<dim, spacedim> *> &fes,
1234 const std::vector<unsigned int> &multiplicities);
1235
1239 void
1241
1247 template <int structdim>
1248 std::vector<std::pair<unsigned int, unsigned int>>
1250 const unsigned int face_no = 0) const;
1251
1258 class InternalData : public FiniteElement<dim, spacedim>::InternalDataBase
1259 {
1260 public:
1265 InternalData(const unsigned int n_base_elements);
1266
1271 ~InternalData() override;
1272
1277 void
1279 const unsigned int base_no,
1280 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>);
1281
1287 get_fe_data(const unsigned int base_no) const;
1288
1295 get_fe_output_object(const unsigned int base_no) const;
1296
1297 private:
1308 typename std::vector<
1309 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>>
1311
1320 mutable std::vector<
1323 };
1324
1329 mutable std::mutex restriction_matrix_mutex;
1330 mutable std::mutex prolongation_matrix_mutex;
1331
1332 friend class FE_Enriched<dim, spacedim>;
1333};
1334
1335//------------------------variadic template constructor------------------------
1336
1337#ifndef DOXYGEN
1338namespace internal
1339{
1340 namespace FESystemImplementation
1341 {
1342 template <int dim, int spacedim>
1343 unsigned int
1344 count_nonzeros(
1345 const std::initializer_list<
1346 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1347 &fe_systems)
1348 {
1349 return std::count_if(
1350 fe_systems.begin(),
1351 fe_systems.end(),
1352 [](const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1353 unsigned int> &fe_system) {
1354 return fe_system.second > 0;
1355 });
1356 }
1357
1358
1359
1360 template <int dim, int spacedim>
1361 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>
1362 promote_to_fe_pair(const FiniteElement<dim, spacedim> &fe)
1363 {
1364 return std::make_pair(std::move(fe.clone()), 1u);
1365 }
1366
1367
1368
1369 template <int dim, int spacedim>
1370 auto
1371 promote_to_fe_pair(std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1372 unsigned int> &&p)
1373 -> decltype(std::forward<
1374 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1375 unsigned int>>(p))
1376 {
1377 return std::forward<
1378 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>(
1379 p);
1380 }
1381 } // namespace FESystemImplementation
1382} // namespace internal
1383
1384
1385
1386# if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
1387// We are just forwarding/delegating to the constructor taking a
1388// std::initializer_list. If we decide to remove the deprecated constructors, we
1389// might just use the variadic constructor with a suitable static_assert instead
1390// of the std::enable_if.
1391template <int dim, int spacedim>
1392template <class... FEPairs, typename>
1393FESystem<dim, spacedim>::FESystem(FEPairs &&...fe_pairs)
1394 : FESystem<dim, spacedim>(
1395 {internal::FESystemImplementation::promote_to_fe_pair<dim, spacedim>(
1396 std::forward<FEPairs>(fe_pairs))...})
1397{}
1398
1399
1400
1401template <int dim, int spacedim>
1403 const std::initializer_list<
1404 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
1405 &fe_systems)
1406 : FiniteElement<dim, spacedim>(
1407 FETools::Compositing::multiply_dof_numbers<dim, spacedim>(fe_systems),
1409 spacedim>(
1410 fe_systems),
1411 FETools::Compositing::compute_nonzero_components<dim, spacedim>(
1412 fe_systems))
1413 , base_elements(internal::FESystemImplementation::count_nonzeros(fe_systems))
1414{
1415 std::vector<const FiniteElement<dim, spacedim> *> fes;
1416 std::vector<unsigned int> multiplicities;
1417
1418 const auto extract =
1419 [&fes, &multiplicities](
1420 const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1421 unsigned int> &fe_system) {
1422 fes.push_back(fe_system.first.get());
1423 multiplicities.push_back(fe_system.second);
1424 };
1425
1426 for (const auto &p : fe_systems)
1427 extract(p);
1428
1429 initialize(fes, multiplicities);
1430}
1431# endif
1432#endif // DOXYGEN
1433
1435
1436#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:1310
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
Definition fe_system.h:1322
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:1329
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:1200
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:1211
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:1195
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:1184
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:1225
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
FESystem(FESystem< dim, spacedim > &&other_fe_system) noexcept
Definition fe_system.h:573
std::mutex prolongation_matrix_mutex
Definition fe_system.h:1330
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:498
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:499
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)
const types::geometric_orientation default_geometric_orientation
Definition types.h:347
static const unsigned int invalid_unsigned_int
Definition types.h:232
STL namespace.
unsigned char geometric_orientation
Definition types.h:40
unsigned int n_nonzero_components
Definition fe_system.h:1059
unsigned int out_index
Definition fe_system.h:1073
unsigned int in_index
Definition fe_system.h:1066
typename enable_if_all< Values... >::type enable_if_all_t