Reference documentation for deal.II version GIT relicensing-397-g31a1263477 2024-04-16 03:30:02+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.h
Go to the documentation of this file.
1// ------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4// Copyright (C) 1998 - 2023 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_h
16#define dealii_fe_h
17
18#include <deal.II/base/config.h>
19
22#include <deal.II/fe/fe_data.h>
25#include <deal.II/fe/mapping.h>
27
29#include <deal.II/lac/vector.h>
30
31#include <memory>
32
33
35
36// Forward declarations:
37#ifndef DOXYGEN
38template <int dim, int spacedim>
39class FEValuesBase;
40template <int dim, int spacedim>
41class FEValues;
42template <int dim, int spacedim>
43class FEFaceValues;
44template <int dim, int spacedim>
45class FESubfaceValues;
46namespace NonMatching
47{
48 template <int dim>
49 class FEImmersedSurfaceValues;
50}
51template <int dim, int spacedim>
52class FESystem;
53#endif
54
653template <int dim, int spacedim = dim>
654class FiniteElement : public Subscriptor, public FiniteElementData<dim>
655{
656public:
660 static constexpr unsigned int space_dimension = spacedim;
661
687 {
688 public:
694
698 virtual ~InternalDataBase() = default;
699
704
720
724 virtual std::size_t
726 };
727
728public:
772 const std::vector<bool> &restriction_is_additive_flags,
773 const std::vector<ComponentMask> &nonzero_components);
774
779
784
789 virtual ~FiniteElement() override = default;
790
799 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>
800 operator^(const unsigned int multiplicity) const;
801
813 virtual std::unique_ptr<FiniteElement<dim, spacedim>>
814 clone() const = 0;
815
826 virtual std::string
827 get_name() const = 0;
828
854 virtual double
855 shape_value(const unsigned int i, const Point<dim> &p) const;
856
863 virtual double
864 shape_value_component(const unsigned int i,
865 const Point<dim> &p,
866 const unsigned int component) const;
867
889 virtual Tensor<1, dim>
890 shape_grad(const unsigned int i, const Point<dim> &p) const;
891
898 virtual Tensor<1, dim>
899 shape_grad_component(const unsigned int i,
900 const Point<dim> &p,
901 const unsigned int component) const;
902
924 virtual Tensor<2, dim>
925 shape_grad_grad(const unsigned int i, const Point<dim> &p) const;
926
933 virtual Tensor<2, dim>
934 shape_grad_grad_component(const unsigned int i,
935 const Point<dim> &p,
936 const unsigned int component) const;
937
959 virtual Tensor<3, dim>
960 shape_3rd_derivative(const unsigned int i, const Point<dim> &p) const;
961
969 virtual Tensor<3, dim>
970 shape_3rd_derivative_component(const unsigned int i,
971 const Point<dim> &p,
972 const unsigned int component) const;
973
995 virtual Tensor<4, dim>
996 shape_4th_derivative(const unsigned int i, const Point<dim> &p) const;
997
1005 virtual Tensor<4, dim>
1007 const Point<dim> &p,
1008 const unsigned int component) const;
1019 virtual bool
1020 has_support_on_face(const unsigned int shape_index,
1021 const unsigned int face_index) const;
1022
1044 virtual const FullMatrix<double> &
1045 get_restriction_matrix(const unsigned int child,
1046 const RefinementCase<dim> &refinement_case =
1048
1078 virtual const FullMatrix<double> &
1079 get_prolongation_matrix(const unsigned int child,
1080 const RefinementCase<dim> &refinement_case =
1082
1104 bool
1106
1122 bool
1124
1146 bool
1148
1164 bool
1166
1167
1176 bool
1177 restriction_is_additive(const unsigned int index) const;
1178
1190 const FullMatrix<double> &
1191 constraints(const ::internal::SubfaceCase<dim> &subface_case =
1193
1209 bool
1211 const ::internal::SubfaceCase<dim> &subface_case =
1213
1214
1236 virtual bool
1238
1239
1251 virtual void
1253 FullMatrix<double> &matrix) const;
1273 virtual void
1275 FullMatrix<double> &matrix,
1276 const unsigned int face_no = 0) const;
1277
1278
1290 virtual void
1292 const unsigned int subface,
1293 FullMatrix<double> &matrix,
1294 const unsigned int face_no = 0) const;
1318 virtual std::vector<std::pair<unsigned int, unsigned int>>
1320
1325 virtual std::vector<std::pair<unsigned int, unsigned int>>
1327
1332 virtual std::vector<std::pair<unsigned int, unsigned int>>
1334 const unsigned int face_no = 0) const;
1335
1353 const unsigned int codim = 0) const;
1354
1387 virtual bool
1389
1394 bool
1396
1432 std::pair<unsigned int, unsigned int>
1433 system_to_component_index(const unsigned int index) const;
1434
1444 unsigned int
1445 component_to_system_index(const unsigned int component,
1446 const unsigned int index) const;
1447
1457 std::pair<unsigned int, unsigned int>
1458 face_system_to_component_index(const unsigned int index,
1459 const unsigned int face_no = 0) const;
1460
1467 unsigned int
1469 const unsigned int index,
1470 const unsigned int face_no,
1471 const unsigned char combined_orientation) const;
1472
1520 virtual unsigned int
1522 const unsigned int face_dof_index,
1523 const unsigned int face,
1524 const unsigned char combined_orientation =
1526
1536 unsigned int
1538 const unsigned int index,
1539 const unsigned char combined_orientation) const;
1540
1557 const ComponentMask &
1558 get_nonzero_components(const unsigned int i) const;
1559
1570 unsigned int
1571 n_nonzero_components(const unsigned int i) const;
1572
1581 bool
1583
1594 bool
1595 is_primitive(const unsigned int i) const;
1596
1608 unsigned int
1610
1615 virtual const FiniteElement<dim, spacedim> &
1616 base_element(const unsigned int index) const;
1617
1624 unsigned int
1625 element_multiplicity(const unsigned int index) const;
1626
1700 get_sub_fe(const ComponentMask &mask) const;
1701
1710 virtual const FiniteElement<dim, spacedim> &
1711 get_sub_fe(const unsigned int first_component,
1712 const unsigned int n_selected_components) const;
1713
1736 std::pair<std::pair<unsigned int, unsigned int>, unsigned int>
1737 system_to_base_index(const unsigned int index) const;
1738
1747 std::pair<std::pair<unsigned int, unsigned int>, unsigned int>
1748 face_system_to_base_index(const unsigned int index,
1749 const unsigned int face_no = 0) const;
1750
1756 first_block_of_base(const unsigned int b) const;
1757
1770 std::pair<unsigned int, unsigned int>
1771 component_to_base_index(const unsigned int component) const;
1772
1773
1778 std::pair<unsigned int, unsigned int>
1779 block_to_base_index(const unsigned int block) const;
1780
1784 std::pair<unsigned int, types::global_dof_index>
1785 system_to_block_index(const unsigned int component) const;
1786
1790 unsigned int
1791 component_to_block_index(const unsigned int component) const;
1792
1814
1829
1845 const FEValuesExtractors::SymmetricTensor<2> &sym_tensor) const;
1846
1863
1884 BlockMask
1886
1903 BlockMask
1905
1923 BlockMask
1925
1948 BlockMask
1950
1966 virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
1968
2006 const std::vector<Point<dim>> &
2008
2026 bool
2028
2041 virtual Point<dim>
2042 unit_support_point(const unsigned int index) const;
2043
2070 const std::vector<Point<dim - 1>> &
2071 get_unit_face_support_points(const unsigned int face_no = 0) const;
2072
2081 bool
2082 has_face_support_points(const unsigned int face_no = 0) const;
2083
2088 virtual Point<dim - 1>
2089 unit_face_support_point(const unsigned int index,
2090 const unsigned int face_no = 0) const;
2091
2119 const std::vector<Point<dim>> &
2121
2131 bool
2133
2180 get_associated_geometry_primitive(const unsigned int cell_dof_index) const;
2181
2182
2260 virtual void
2262 const std::vector<Vector<double>> &support_point_values,
2263 std::vector<double> &nodal_values) const;
2264
2275 virtual std::size_t
2277
2284 int,
2285 << "The shape function with index " << arg1
2286 << " is not primitive, i.e. it is vector-valued and "
2287 << "has more than one non-zero vector component. This "
2288 << "function cannot be called for these shape functions. "
2289 << "Maybe you want to use the same function with the "
2290 << "_component suffix?");
2304 "You are trying to access the values or derivatives of shape functions "
2305 "on the reference cell of an element that does not define its shape "
2306 "functions through mapping from the reference cell. Consequently, "
2307 "you cannot ask for shape function values or derivatives on the "
2308 "reference cell.");
2309
2317 "You are trying to access the support points of a finite "
2318 "element that either has no support points at all, or for "
2319 "which the corresponding tables have not been implemented.");
2320
2328 "You are trying to access the matrices that describe how "
2329 "to embed a finite element function on one cell into the "
2330 "finite element space on one of its children (i.e., the "
2331 "'embedding' or 'prolongation' matrices). However, the "
2332 "current finite element can either not define this sort of "
2333 "operation, or it has not yet been implemented.");
2334
2343 "You are trying to access the matrices that describe how "
2344 "to restrict a finite element function from the children "
2345 "of one cell to the finite element space defined on their "
2346 "parent (i.e., the 'restriction' or 'projection' matrices). "
2347 "However, the current finite element can either not define "
2348 "this sort of operation, or it has not yet been "
2349 "implemented.");
2350
2356 int,
2357 int,
2358 << "The interface matrix has a size of " << arg1 << 'x' << arg2
2359 << ", which is not reasonable for the current element "
2360 "in the present dimension.");
2366
2367protected:
2381 void
2383 const bool isotropic_restriction_only = false,
2384 const bool isotropic_prolongation_only = false);
2385
2398 std::vector<std::vector<FullMatrix<double>>> restriction;
2399
2412 std::vector<std::vector<FullMatrix<double>>> prolongation;
2413
2425
2436 std::vector<Point<dim>> unit_support_points;
2437
2443 std::vector<std::vector<Point<dim - 1>>> unit_face_support_points;
2444
2449 std::vector<Point<dim>> generalized_support_points;
2450
2455 std::vector<std::vector<Point<dim - 1>>> generalized_face_support_points;
2456
2473
2486
2490 std::vector<std::pair<unsigned int, unsigned int>> system_to_component_table;
2491
2501 std::vector<std::vector<std::pair<unsigned int, unsigned int>>>
2503
2520 std::vector<std::pair<std::pair<unsigned int, unsigned int>, unsigned int>>
2522
2526 std::vector<
2527 std::vector<std::pair<std::pair<unsigned int, unsigned int>, unsigned int>>>
2529
2535
2556 std::vector<std::pair<std::pair<unsigned int, unsigned int>, unsigned int>>
2558
2564 const std::vector<bool> restriction_is_additive_flags;
2565
2573 const std::vector<ComponentMask> nonzero_components;
2574
2582 const std::vector<unsigned int> n_nonzero_components_table;
2583
2590
2605
2611 static std::vector<unsigned int>
2613 const std::vector<ComponentMask> &nonzero_components);
2614
2635 virtual UpdateFlags
2636 requires_update_flags(const UpdateFlags update_flags) const = 0;
2637
2715 virtual std::unique_ptr<InternalDataBase>
2716 get_data(const UpdateFlags update_flags,
2717 const Mapping<dim, spacedim> &mapping,
2718 const Quadrature<dim> &quadrature,
2719 ::internal::FEValuesImplementation::
2720 FiniteElementRelatedData<dim, spacedim> &output_data) const = 0;
2721
2764 virtual std::unique_ptr<InternalDataBase>
2765 get_face_data(const UpdateFlags update_flags,
2766 const Mapping<dim, spacedim> &mapping,
2767 const hp::QCollection<dim - 1> &quadrature,
2768 ::internal::FEValuesImplementation::
2769 FiniteElementRelatedData<dim, spacedim> &output_data) const;
2770
2774 virtual std::unique_ptr<InternalDataBase>
2776 const UpdateFlags update_flags,
2777 const Mapping<dim, spacedim> &mapping,
2778 const Quadrature<dim - 1> &quadrature,
2780 &output_data) const;
2781
2825 virtual std::unique_ptr<InternalDataBase>
2827 const UpdateFlags update_flags,
2828 const Mapping<dim, spacedim> &mapping,
2829 const Quadrature<dim - 1> &quadrature,
2831 spacedim>
2832 &output_data) const;
2833
2914 virtual void
2917 const CellSimilarity::Similarity cell_similarity,
2918 const Quadrature<dim> &quadrature,
2919 const Mapping<dim, spacedim> &mapping,
2920 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
2922 &mapping_data,
2923 const InternalDataBase &fe_internal,
2925 spacedim>
2926 &output_data) const = 0;
2927
2970 virtual void
2973 const unsigned int face_no,
2974 const hp::QCollection<dim - 1> &quadrature,
2975 const Mapping<dim, spacedim> &mapping,
2976 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
2978 &mapping_data,
2979 const InternalDataBase &fe_internal,
2981 spacedim>
2982 &output_data) const;
2983
2987 virtual void
2990 const unsigned int face_no,
2991 const Quadrature<dim - 1> &quadrature,
2992 const Mapping<dim, spacedim> &mapping,
2993 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
2995 &mapping_data,
2996 const InternalDataBase &fe_internal,
2998 &output_data) const;
2999
3045 virtual void
3048 const unsigned int face_no,
3049 const unsigned int sub_no,
3050 const Quadrature<dim - 1> &quadrature,
3051 const Mapping<dim, spacedim> &mapping,
3052 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
3054 &mapping_data,
3055 const InternalDataBase &fe_internal,
3057 spacedim>
3058 &output_data) const = 0;
3059
3060 friend class InternalDataBase;
3061 friend class FEValuesBase<dim, spacedim>;
3062 friend class FEValues<dim, spacedim>;
3063 friend class FEFaceValues<dim, spacedim>;
3064 friend class FESubfaceValues<dim, spacedim>;
3065 friend class NonMatching::FEImmersedSurfaceValues<dim>;
3066 friend class FESystem<dim, spacedim>;
3067
3068 // explicitly check for sensible template arguments, but not on windows
3069 // because MSVC creates bogus warnings during normal compilation
3070#ifndef DEAL_II_MSVC
3071 static_assert(dim <= spacedim,
3072 "The dimension <dim> of a FiniteElement must be less than or "
3073 "equal to the space dimension <spacedim> in which it lives.");
3074#endif
3075};
3076
3077
3078//----------------------------------------------------------------------//
3079#ifndef DOXYGEN
3080
3081template <int dim, int spacedim>
3082inline std::pair<unsigned int, unsigned int>
3084 const unsigned int index) const
3085{
3087 Assert(is_primitive(index),
3089 index)));
3090 return system_to_component_table[index];
3091}
3092
3093
3094
3095template <int dim, int spacedim>
3096inline unsigned int
3098{
3099 return base_to_block_indices.size();
3100}
3101
3102
3103
3104template <int dim, int spacedim>
3105inline unsigned int
3107 const unsigned int index) const
3108{
3109 return static_cast<unsigned int>(base_to_block_indices.block_size(index));
3110}
3111
3112
3113
3114template <int dim, int spacedim>
3115inline unsigned int
3117 const unsigned int component,
3118 const unsigned int index) const
3119{
3120 AssertIndexRange(component, this->n_components());
3121 const std::vector<std::pair<unsigned int, unsigned int>>::const_iterator it =
3122 std::find(system_to_component_table.begin(),
3124 std::pair<unsigned int, unsigned int>(component, index));
3125
3127 ExcMessage("You are asking for the number of the shape function "
3128 "within a system element that corresponds to vector "
3129 "component " +
3130 Utilities::int_to_string(component) +
3131 " and within this to "
3132 "index " +
3134 ". But no such "
3135 "shape function exists."));
3136 return std::distance(system_to_component_table.begin(), it);
3137}
3138
3139
3140
3141template <int dim, int spacedim>
3142inline std::pair<unsigned int, unsigned int>
3144 const unsigned int index,
3145 const unsigned int face_no) const
3146{
3148 index,
3149 face_system_to_component_table[this->n_unique_faces() == 1 ? 0 : face_no]
3150 .size());
3151
3152 // in debug mode, check whether the
3153 // function is primitive, since
3154 // otherwise the result may have no
3155 // meaning
3156 //
3157 // since the primitivity tables are
3158 // all geared towards cell dof
3159 // indices, rather than face dof
3160 // indices, we have to work a
3161 // little bit...
3162 //
3163 // in 1d, the face index is equal
3164 // to the cell index
3165 Assert(is_primitive(this->face_to_cell_index(index, face_no)),
3167 index)));
3168
3170 0 :
3171 face_no][index];
3172}
3173
3174
3175
3176template <int dim, int spacedim>
3177inline std::pair<std::pair<unsigned int, unsigned int>, unsigned int>
3179 const unsigned int index) const
3180{
3183}
3184
3185
3186
3187template <int dim, int spacedim>
3188inline std::pair<std::pair<unsigned int, unsigned int>, unsigned int>
3190 const unsigned int index,
3191 const unsigned int face_no) const
3192{
3194 index,
3195 face_system_to_base_table[this->n_unique_faces() == 1 ? 0 : face_no]
3196 .size());
3197 return face_system_to_base_table[this->n_unique_faces() == 1 ? 0 : face_no]
3198 [index];
3199}
3200
3201
3202
3203template <int dim, int spacedim>
3206 const unsigned int index) const
3207{
3208 return base_to_block_indices.block_start(index);
3209}
3210
3211
3212
3213template <int dim, int spacedim>
3214inline std::pair<unsigned int, unsigned int>
3216 const unsigned int index) const
3217{
3219
3220 return component_to_base_table[index].first;
3221}
3222
3223
3224
3225template <int dim, int spacedim>
3226inline std::pair<unsigned int, unsigned int>
3228 const unsigned int index) const
3229{
3231}
3232
3233
3234
3235template <int dim, int spacedim>
3236inline std::pair<unsigned int, types::global_dof_index>
3238 const unsigned int index) const
3239{
3240 AssertIndexRange(index, this->n_dofs_per_cell());
3241 // The block is computed simply as
3242 // first block of this base plus
3243 // the index within the base blocks
3244 return std::pair<unsigned int, types::global_dof_index>(
3246 system_to_base_table[index].first.second,
3247 system_to_base_table[index].second);
3248}
3249
3250
3251
3252template <int dim, int spacedim>
3253inline bool
3255 const unsigned int index) const
3256{
3257 AssertIndexRange(index, this->n_dofs_per_cell());
3258 return restriction_is_additive_flags[index];
3259}
3260
3261
3262
3263template <int dim, int spacedim>
3264inline const ComponentMask &
3266{
3268 return nonzero_components[i];
3269}
3270
3271
3272
3273template <int dim, int spacedim>
3274inline unsigned int
3276{
3278 return n_nonzero_components_table[i];
3279}
3280
3281
3282
3283template <int dim, int spacedim>
3284inline bool
3286{
3287 return cached_primitivity;
3288}
3289
3290
3291
3292template <int dim, int spacedim>
3293inline bool
3294FiniteElement<dim, spacedim>::is_primitive(const unsigned int i) const
3295{
3297
3298 // return primitivity of a shape
3299 // function by checking whether it
3300 // has more than one non-zero
3301 // component or not. we could cache
3302 // this value in an array of bools,
3303 // but accessing a bit-vector (as
3304 // std::vector<bool> is) is
3305 // probably more expensive than
3306 // just comparing against 1
3307 //
3308 // for good measure, short circuit the test
3309 // if the entire FE is primitive
3310 return (is_primitive() || (n_nonzero_components_table[i] == 1));
3311}
3312
3313
3314
3315template <int dim, int spacedim>
3316inline GeometryPrimitive
3318 const unsigned int cell_dof_index) const
3319{
3320 AssertIndexRange(cell_dof_index, this->n_dofs_per_cell());
3321
3322 // just go through the usual cases, taking into account how DoFs
3323 // are enumerated on the reference cell
3324 if (cell_dof_index < this->get_first_line_index())
3326 else if (cell_dof_index < this->get_first_quad_index(0))
3328 else if (cell_dof_index < this->get_first_hex_index())
3330 else
3332}
3333
3334#endif
3335
3337
3338#endif
size_type block_size(const unsigned int i) const
unsigned int size() const
size_type block_start(const unsigned int i) const
std::pair< unsigned int, size_type > global_to_local(const size_type i) const
virtual unsigned int face_to_cell_index(const unsigned int face_dof_index, const unsigned int face, const unsigned char combined_orientation=ReferenceCell::default_combined_face_orientation()) const override
unsigned int get_first_line_index() const
unsigned int n_dofs_per_cell() const
unsigned int get_first_quad_index(const unsigned int quad_no=0) const
unsigned int n_components() const
unsigned int n_unique_faces() const
unsigned int get_first_hex_index() const
virtual ~InternalDataBase()=default
InternalDataBase(const InternalDataBase &)=delete
virtual std::size_t memory_consumption() const
bool constraints_are_implemented(const ::internal::SubfaceCase< dim > &subface_case=::internal::SubfaceCase< dim >::case_isotropic) const
std::pair< unsigned int, types::global_dof_index > system_to_block_index(const unsigned int component) const
bool isotropic_prolongation_is_implemented() const
virtual std::string get_name() const =0
virtual Point< dim > unit_support_point(const unsigned int index) const
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const
const std::vector< unsigned int > n_nonzero_components_table
Definition fe.h:2582
virtual std::unique_ptr< InternalDataBase > get_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const =0
virtual const FullMatrix< double > & get_restriction_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const
const ComponentMask & get_nonzero_components(const unsigned int i) const
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 InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const =0
std::vector< std::vector< Point< dim - 1 > > > unit_face_support_points
Definition fe.h:2443
bool prolongation_is_implemented() const
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const
ComponentMask component_mask(const BlockMask &block_mask) const
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const
ComponentMask component_mask(const FEValuesExtractors::SymmetricTensor< 2 > &sym_tensor) const
virtual std::unique_ptr< 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
std::pair< unsigned int, unsigned int > component_to_base_index(const unsigned int component) const
virtual Point< dim - 1 > unit_face_support_point(const unsigned int index, const unsigned int face_no=0) const
bool is_primitive(const unsigned int i) const
static std::vector< unsigned int > compute_n_nonzero_components(const std::vector< ComponentMask > &nonzero_components)
virtual std::unique_ptr< 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
bool has_face_support_points(const unsigned int face_no=0) const
const bool cached_primitivity
Definition fe.h:2589
virtual const FiniteElement< dim, spacedim > & get_sub_fe(const unsigned int first_component, const unsigned int n_selected_components) const
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
ComponentMask component_mask(const FEValuesExtractors::Scalar &scalar) const
bool operator!=(const FiniteElement< dim, spacedim > &) const
ComponentMask component_mask(const FEValuesExtractors::Vector &vector) const
bool has_support_points() const
virtual unsigned int face_to_cell_index(const unsigned int face_dof_index, const unsigned int face, const unsigned char combined_orientation=ReferenceCell::default_combined_face_orientation()) const
std::vector< std::vector< FullMatrix< double > > > restriction
Definition fe.h:2398
bool has_generalized_support_points() const
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const =0
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const
std::vector< Table< 2, int > > adjust_quad_dof_index_for_face_orientation_table
Definition fe.h:2472
virtual bool operator==(const FiniteElement< dim, spacedim > &fe) const
const std::vector< Point< dim > > & get_unit_support_points() const
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 InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
static constexpr unsigned int space_dimension
Definition fe.h:660
BlockIndices base_to_block_indices
Definition fe.h:2534
bool is_primitive() const
void reinit_restriction_and_prolongation_matrices(const bool isotropic_restriction_only=false, const bool isotropic_prolongation_only=false)
const std::vector< Point< dim - 1 > > & get_unit_face_support_points(const unsigned int face_no=0) const
bool isotropic_restriction_is_implemented() const
std::vector< std::vector< Point< dim - 1 > > > generalized_face_support_points
Definition fe.h:2455
std::pair< unsigned int, unsigned int > block_to_base_index(const unsigned int block) const
std::vector< int > adjust_line_dof_index_for_line_orientation_table
Definition fe.h:2485
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const
bool restriction_is_additive(const unsigned int index) 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 InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const =0
const FiniteElement< dim, spacedim > & get_sub_fe(const ComponentMask &mask) const
virtual Tensor< 4, dim > shape_4th_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
FiniteElement(const FiniteElement< dim, spacedim > &)=default
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
unsigned int component_to_block_index(const unsigned int component) const
BlockMask block_mask(const FEValuesExtractors::Scalar &scalar) const
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const =0
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const
virtual Tensor< 3, dim > shape_3rd_derivative(const unsigned int i, const Point< dim > &p) const
std::pair< unsigned int, unsigned int > system_to_component_index(const unsigned int index) const
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > system_to_base_table
Definition fe.h:2521
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
virtual void convert_generalized_support_point_values_to_dof_values(const std::vector< Vector< double > > &support_point_values, std::vector< double > &nodal_values) const
FiniteElement(const FiniteElementData< dim > &fe_data, const std::vector< bool > &restriction_is_additive_flags, const std::vector< ComponentMask > &nonzero_components)
BlockMask block_mask(const FEValuesExtractors::Vector &vector) const
BlockMask block_mask(const ComponentMask &component_mask) const
std::pair< std::pair< unsigned int, unsigned int >, unsigned int > system_to_base_index(const unsigned int index) const
unsigned int adjust_quad_dof_index_for_face_orientation(const unsigned int index, const unsigned int face_no, const unsigned char combined_orientation) const
std::vector< std::pair< unsigned int, unsigned int > > system_to_component_table
Definition fe.h:2490
std::pair< std::pair< unsigned int, unsigned int >, unsigned int > face_system_to_base_index(const unsigned int index, const unsigned int face_no=0) const
virtual Tensor< 3, dim > shape_3rd_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
const FullMatrix< double > & constraints(const ::internal::SubfaceCase< dim > &subface_case=::internal::SubfaceCase< dim >::case_isotropic) const
unsigned int element_multiplicity(const unsigned int index) const
std::pair< std::unique_ptr< FiniteElement< dim, spacedim > >, unsigned int > operator^(const unsigned int multiplicity) const
const std::vector< bool > restriction_is_additive_flags
Definition fe.h:2564
virtual ~FiniteElement() override=default
unsigned int adjust_line_dof_index_for_line_orientation(const unsigned int index, const unsigned char combined_orientation) const
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > component_to_base_table
Definition fe.h:2557
TableIndices< 2 > interface_constraints_size() const
std::vector< std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > > face_system_to_base_table
Definition fe.h:2528
std::vector< Point< dim > > unit_support_points
Definition fe.h:2436
virtual Tensor< 1, dim > shape_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
bool restriction_is_implemented() const
virtual std::unique_ptr< InternalDataBase > get_face_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim - 1 > &quadrature, internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
std::vector< std::vector< std::pair< unsigned int, unsigned int > > > face_system_to_component_table
Definition fe.h:2502
virtual void fill_fe_face_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_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 InternalDataBase &fe_internal, internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
FiniteElement(FiniteElement< dim, spacedim > &&)=default
unsigned int n_nonzero_components(const unsigned int i) const
FullMatrix< double > interface_constraints
Definition fe.h:2424
const std::vector< Point< dim > > & get_generalized_support_points() const
BlockMask block_mask(const FEValuesExtractors::SymmetricTensor< 2 > &sym_tensor) const
unsigned int n_base_elements() const
virtual Tensor< 2, dim > shape_grad_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual const FullMatrix< double > & get_prolongation_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const
virtual double shape_value(const unsigned int i, const Point< dim > &p) const
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix, const unsigned int face_no=0) const
virtual std::size_t memory_consumption() const
virtual Tensor< 4, dim > shape_4th_derivative(const unsigned int i, const Point< dim > &p) const
GeometryPrimitive get_associated_geometry_primitive(const unsigned int cell_dof_index) const
std::vector< Point< dim > > generalized_support_points
Definition fe.h:2449
unsigned int component_to_system_index(const unsigned int component, const unsigned int index) const
const std::vector< ComponentMask > nonzero_components
Definition fe.h:2573
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
std::pair< unsigned int, unsigned int > face_system_to_component_index(const unsigned int index, const unsigned int face_no=0) const
virtual bool hp_constraints_are_implemented() const
std::vector< std::vector< FullMatrix< double > > > prolongation
Definition fe.h:2412
types::global_dof_index first_block_of_base(const unsigned int b) const
Abstract base class for mapping classes.
Definition mapping.h:318
Definition point.h:111
static constexpr unsigned char default_combined_face_orientation()
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:502
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:503
Point< 2 > first
Definition grid_out.cc:4623
#define DeclException0(Exception0)
Definition exceptions.h:471
static ::ExceptionBase & ExcShapeFunctionNotPrimitive(int arg1)
#define Assert(cond, exc)
static ::ExceptionBase & ExcWrongInterfaceMatrixSize(int arg1, int arg2)
#define DeclException2(Exception2, type1, type2, outsequence)
Definition exceptions.h:539
static ::ExceptionBase & ExcUnitShapeValuesDoNotExist()
static ::ExceptionBase & ExcProjectionVoid()
#define AssertIndexRange(index, range)
#define DeclExceptionMsg(Exception, defaulttext)
Definition exceptions.h:494
static ::ExceptionBase & ExcFENotPrimitive()
static ::ExceptionBase & ExcEmbeddingVoid()
#define DeclException1(Exception1, type1, outsequence)
Definition exceptions.h:516
static ::ExceptionBase & ExcInterpolationNotImplemented()
static ::ExceptionBase & ExcMessage(std::string arg1)
static ::ExceptionBase & ExcFEHasNoSupportPoints()
UpdateFlags
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
Definition utilities.cc:470