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_face.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) 2009 - 2024 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_face_h
14#define dealii_fe_face_h
15
16#include <deal.II/base/config.h>
17
20
22
24
25
51template <int dim, int spacedim = dim>
53 : public FE_PolyFace<TensorProductPolynomials<dim - 1>, dim, spacedim>
54{
55public:
61 FE_FaceQ(const unsigned int p);
62
63 virtual std::unique_ptr<FiniteElement<dim, spacedim>>
64 clone() const override;
65
71 virtual std::string
72 get_name() const override;
73
81 virtual void
83 const std::vector<Vector<double>> &support_point_values,
84 std::vector<double> &nodal_values) const override;
85
94 virtual void
96 FullMatrix<double> &matrix,
97 const unsigned int face_no = 0) const override;
98
107 virtual void
109 const FiniteElement<dim, spacedim> &source,
110 const unsigned int subface,
111 FullMatrix<double> &matrix,
112 const unsigned int face_no = 0) const override;
113
118 virtual bool
119 has_support_on_face(const unsigned int shape_index,
120 const unsigned int face_index) const override;
121
144 virtual std::vector<std::pair<unsigned int, unsigned int>>
146 const FiniteElement<dim, spacedim> &fe_other) const override;
147
154 virtual std::vector<std::pair<unsigned int, unsigned int>>
156 const FiniteElement<dim, spacedim> &fe_other) const override;
157
164 virtual std::vector<std::pair<unsigned int, unsigned int>>
166 const unsigned int face_no = 0) const override;
167
172 virtual bool
173 hp_constraints_are_implemented() const override;
174
180 const unsigned int codim = 0) const override final;
181
190 virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
191 get_constant_modes() const override;
192
193private:
197 static std::vector<unsigned int>
198 get_dpo_vector(const unsigned int deg);
199};
200
201
202
213template <int spacedim>
214class FE_FaceQ<1, spacedim> : public FiniteElement<1, spacedim>
215{
216public:
220 FE_FaceQ(const unsigned int p);
221
222 virtual std::unique_ptr<FiniteElement<1, spacedim>>
223 clone() const override;
224
230 virtual std::string
231 get_name() const override;
232
233 // for documentation, see the FiniteElement base class
234 virtual UpdateFlags
235 requires_update_flags(const UpdateFlags update_flags) const override;
236
245 virtual void
247 FullMatrix<double> &matrix,
248 const unsigned int face_no = 0) const override;
249
258 virtual void
260 const FiniteElement<1, spacedim> &source,
261 const unsigned int subface,
262 FullMatrix<double> &matrix,
263 const unsigned int face_no = 0) const override;
264
269 virtual bool
270 has_support_on_face(const unsigned int shape_index,
271 const unsigned int face_index) const override;
272
277 virtual bool
278 hp_constraints_are_implemented() const override;
279
297 virtual std::vector<std::pair<unsigned int, unsigned int>>
299 const FiniteElement<1, spacedim> &fe_other) const override;
300
307 virtual std::vector<std::pair<unsigned int, unsigned int>>
309 const FiniteElement<1, spacedim> &fe_other) const override;
310
317 virtual std::vector<std::pair<unsigned int, unsigned int>>
319 const unsigned int face_no = 0) const override;
320
325 virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
326 get_constant_modes() const override;
327
328protected:
329 /*
330 * NOTE: The following functions have their definitions inlined into the class
331 * declaration because we otherwise run into a compiler error with MS Visual
332 * Studio.
333 */
334
335
336 virtual std::unique_ptr<typename FiniteElement<1, spacedim>::InternalDataBase>
338 const UpdateFlags /*update_flags*/,
339 const Mapping<1, spacedim> & /*mapping*/,
340 const Quadrature<1> & /*quadrature*/,
342 spacedim>
343 & /*output_data*/) const override
344 {
345 return std::make_unique<
347 }
348
349 using FiniteElement<1, spacedim>::get_face_data;
350
351 std::unique_ptr<typename FiniteElement<1, spacedim>::InternalDataBase>
353 const UpdateFlags update_flags,
354 const Mapping<1, spacedim> & /*mapping*/,
355 const hp::QCollection<0> &quadrature,
357 spacedim>
358 & /*output_data*/) const override
359 {
360 AssertDimension(quadrature.size(), 1);
361
362 // generate a new data object and initialize some fields
363 auto data_ptr =
364 std::make_unique<typename FiniteElement<1, spacedim>::InternalDataBase>();
365 data_ptr->update_each = requires_update_flags(update_flags);
366
367 const unsigned int n_q_points = quadrature[0].size();
368 AssertDimension(n_q_points, 1);
369 (void)n_q_points;
370
371 // No derivatives of this element are implemented.
372 if (data_ptr->update_each & update_gradients ||
373 data_ptr->update_each & update_hessians)
374 {
376 }
377
378 return data_ptr;
379 }
380
381 std::unique_ptr<typename FiniteElement<1, spacedim>::InternalDataBase>
383 const UpdateFlags update_flags,
384 const Mapping<1, spacedim> &mapping,
385 const Quadrature<0> &quadrature,
387 spacedim>
388 &output_data) const override
389 {
390 return get_face_data(update_flags,
391 mapping,
392 hp::QCollection<0>(quadrature),
393 output_data);
394 }
395
396 virtual void
399 const CellSimilarity::Similarity cell_similarity,
400 const Quadrature<1> &quadrature,
401 const Mapping<1, spacedim> &mapping,
402 const typename Mapping<1, spacedim>::InternalDataBase &mapping_internal,
404 &mapping_data,
405 const typename FiniteElement<1, spacedim>::InternalDataBase &fe_internal,
407 spacedim>
408 &output_data) const override;
409
410 using FiniteElement<1, spacedim>::fill_fe_face_values;
411
412 virtual void
415 const unsigned int face_no,
416 const hp::QCollection<0> &quadrature,
417 const Mapping<1, spacedim> &mapping,
418 const typename Mapping<1, spacedim>::InternalDataBase &mapping_internal,
420 &mapping_data,
421 const typename FiniteElement<1, spacedim>::InternalDataBase &fe_internal,
423 spacedim>
424 &output_data) const override;
425
426 virtual void
429 const unsigned int face_no,
430 const unsigned int sub_no,
431 const Quadrature<0> &quadrature,
432 const Mapping<1, spacedim> &mapping,
433 const typename Mapping<1, spacedim>::InternalDataBase &mapping_internal,
435 &mapping_data,
436 const typename FiniteElement<1, spacedim>::InternalDataBase &fe_internal,
438 spacedim>
439 &output_data) const override;
440
441private:
445 static std::vector<unsigned int>
446 get_dpo_vector(const unsigned int deg);
447};
448
449
450
473template <int dim, int spacedim = dim>
474class FE_FaceP : public FE_PolyFace<PolynomialSpace<dim - 1>, dim, spacedim>
475{
476public:
482 FE_FaceP(unsigned int p);
483
484 virtual std::unique_ptr<FiniteElement<dim, spacedim>>
485 clone() const override;
486
492 virtual std::string
493 get_name() const override;
494
503 virtual void
505 FullMatrix<double> &matrix,
506 const unsigned int face_no = 0) const override;
507
516 virtual void
518 const FiniteElement<dim, spacedim> &source,
519 const unsigned int subface,
520 FullMatrix<double> &matrix,
521 const unsigned int face_no = 0) const override;
522
527 virtual bool
528 has_support_on_face(const unsigned int shape_index,
529 const unsigned int face_index) const override;
530
535 virtual bool
536 hp_constraints_are_implemented() const override;
537
543 const unsigned int codim = 0) const override final;
544
551 virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
552 get_constant_modes() const override;
553
554private:
558 static std::vector<unsigned int>
559 get_dpo_vector(const unsigned int deg);
560};
561
562
563
568template <int spacedim>
569class FE_FaceP<1, spacedim> : public FE_FaceQ<1, spacedim>
570{
571public:
575 FE_FaceP(const unsigned int p);
576
580 std::string
581 get_name() const override;
582};
583
584
586
587#endif
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const override
Definition fe_face.cc:986
virtual bool hp_constraints_are_implemented() const override
Definition fe_face.cc:818
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
Definition fe_face.cc:791
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const override final
Definition fe_face.cc:827
virtual std::string get_name() const override
Definition fe_face.cc:775
static std::vector< unsigned int > get_dpo_vector(const unsigned int deg)
Definition fe_face.cc:802
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
Definition fe_face.cc:880
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
Definition fe_face.cc:766
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix, const unsigned int face_no=0) const override
Definition fe_face.cc:865
std::unique_ptr< typename FiniteElement< 1, spacedim >::InternalDataBase > get_face_data(const UpdateFlags update_flags, const Mapping< 1, spacedim > &, const hp::QCollection< 0 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< 1, spacedim > &) const override
Definition fe_face.h:352
virtual std::unique_ptr< typename FiniteElement< 1, spacedim >::InternalDataBase > get_data(const UpdateFlags, const Mapping< 1, spacedim > &, const Quadrature< 1 > &, ::internal::FEValuesImplementation::FiniteElementRelatedData< 1, spacedim > &) const override
Definition fe_face.h:337
std::unique_ptr< typename FiniteElement< 1, spacedim >::InternalDataBase > get_subface_data(const UpdateFlags update_flags, const Mapping< 1, spacedim > &mapping, const Quadrature< 0 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< 1, spacedim > &output_data) const override
Definition fe_face.h:382
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const override final
Definition fe_face.cc:446
virtual std::string get_name() const override
Definition fe_face.cc:128
static std::vector< unsigned int > get_dpo_vector(const unsigned int deg)
Definition fe_face.cc:264
virtual void convert_generalized_support_point_values_to_dof_values(const std::vector< Vector< double > > &support_point_values, std::vector< double > &nodal_values) const override
Definition fe_face.cc:493
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const override
Definition fe_face.cc:482
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix, const unsigned int face_no=0) const override
Definition fe_face.cc:144
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
Definition fe_face.cc:297
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
Definition fe_face.cc:119
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
Definition fe_face.cc:159
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
Definition fe_face.cc:253
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
Definition fe_face.cc:286
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
Definition fe_face.cc:367
virtual bool hp_constraints_are_implemented() const override
Definition fe_face.cc:277
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
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
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 UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
virtual void fill_fe_subface_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int sub_no, const Quadrature< dim - 1 > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, const typename FiniteElement< dim, spacedim >::InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
Abstract base class for mapping classes.
Definition mapping.h:318
unsigned int size() const
Definition collection.h:314
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
#define DEAL_II_NOT_IMPLEMENTED()
#define AssertDimension(dim1, dim2)
UpdateFlags
@ update_hessians
Second derivatives of shape functions.
@ update_gradients
Shape function gradients.