deal.II version GIT relicensing-6834-g5b78e6bcdf 2026-10-01 11: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_hermite.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) 2023 - 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_hermite_h
14#define dealii_fe_hermite_h
15
16#include <deal.II/base/config.h>
17
19
20#include <deal.II/fe/fe_poly.h>
21
22#include <string>
23#include <vector>
24
26
95template <int dim, int spacedim = dim>
96class FE_Hermite : public FE_Poly<dim, spacedim>
97{
98public:
105 FE_Hermite(const unsigned int fe_degree);
106
107 // Other functions
113 virtual std::string
114 get_name() const override;
115
119 virtual std::unique_ptr<FiniteElement<dim, spacedim>>
120 clone() const override;
121
125 virtual UpdateFlags
126 requires_update_flags(const UpdateFlags update_flags) const override;
127
131 virtual std::vector<std::pair<unsigned int, unsigned int>>
133 const FiniteElement<dim, spacedim> &fe_other) const override;
134
138 virtual std::vector<std::pair<unsigned int, unsigned int>>
140 const FiniteElement<dim, spacedim> &fe_other) const override;
141
145 virtual std::vector<std::pair<unsigned int, unsigned int>>
147 const unsigned int face_no = 0) const override;
148
154 const unsigned int codim) const override;
155
161 std::vector<unsigned int>
163
190 const unsigned int derivative_order) const;
191
206 virtual void
209 const CellSimilarity::Similarity cell_similarity,
210 const Quadrature<dim> &quadrature,
211 const Mapping<dim, spacedim> &mapping,
212 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
213 const ::internal::FEValuesImplementation::MappingRelatedData<dim,
214 spacedim>
215 &mapping_data,
216 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
218 spacedim>
219 &output_data) const override;
220
221 using FiniteElement<dim, spacedim>::fill_fe_face_values;
222
228 virtual void
231 const unsigned int face_no,
232 const hp::QCollection<dim - 1> &quadrature,
233 const Mapping<dim, spacedim> &mapping,
234 const typename Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
235 const ::internal::FEValuesImplementation::MappingRelatedData<dim,
236 spacedim>
237 &mapping_data,
238 const typename FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
240 spacedim>
241 &output_data) const override;
242
243
244
245protected:
250 virtual std::unique_ptr<
253 const UpdateFlags update_flags,
254 const Mapping<dim, spacedim> &mapping,
255 const Quadrature<dim> &quadrature,
257 spacedim>
258 &output_data) const override
259 {
260 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>
261 data_ptr = FE_Poly<dim, spacedim>::get_data(update_flags,
262 mapping,
263 quadrature,
264 output_data);
265 auto &data =
266 dynamic_cast<typename FE_Poly<dim, spacedim>::InternalData &>(*data_ptr);
267
268 const unsigned int n_q_points = quadrature.size();
269
270 if ((update_flags & update_values) &&
271 ((output_data.shape_values.n_rows() > 0) &&
272 (output_data.shape_values.n_cols() == n_q_points)))
273 data.shape_values = output_data.shape_values;
274
275 return data_ptr;
276 }
277
278private:
286 unsigned int regularity;
287
288public:
292 inline unsigned int
294 {
295 return this->regularity;
296 };
297};
298
304
305#endif
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
Table< 2, unsigned int > get_dofs_corresponding_to_outward_normal_derivatives(const unsigned int derivative_order) const
unsigned int get_regularity() const
Definition fe_hermite.h:293
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &other_fe, const unsigned int codim) const override
virtual void fill_fe_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const CellSimilarity::Similarity cell_similarity, const Quadrature< dim > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const ::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, const typename FiniteElement< dim, spacedim >::InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
virtual std::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
Definition fe_hermite.h:252
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
virtual std::string get_name() const override
std::vector< unsigned int > get_lexicographic_to_hierarchic_numbering() 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 override
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
unsigned int regularity
Definition fe_hermite.h:286
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_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
Definition fe_poly.h:260
Abstract base class for mapping classes.
Definition mapping.h:318
unsigned int size() const
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
UpdateFlags
@ update_values
Shape function values.
std::vector< index_type > data
Definition mpi.cc:734