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_values.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) 1998 - 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_values_h
14#define dealii_fe_values_h
15
16
17#include <deal.II/base/config.h>
18
22#include <deal.II/base/point.h>
26
29
30#include <deal.II/fe/fe.h>
34#include <deal.II/fe/mapping.h>
36
37#include <deal.II/grid/tria.h>
39
41
43
44#include <algorithm>
45#include <memory>
46#include <type_traits>
47
49
59template <int dim, int spacedim = dim>
60class FEValues : public FEValuesBase<dim, spacedim>
61{
62public:
67 static constexpr unsigned int integral_dimension = dim;
68
77
88
97
107
114 template <bool level_dof_access>
115 void
118
132 void
134
139 const Quadrature<dim> &
141
146 std::size_t
148
165
166private:
171
175 void
177
184 void
186};
187
188
198template <int dim, int spacedim = dim>
199class FEFaceValuesBase : public FEValuesBase<dim, spacedim>
200{
201public:
206 static constexpr unsigned int integral_dimension = dim - 1;
207
219 FEFaceValuesBase(const unsigned int dofs_per_cell,
224
231 FEFaceValuesBase(const unsigned int dofs_per_cell,
236
244 const Tensor<1, spacedim> &
245 boundary_form(const unsigned int q_point) const;
246
253 const std::vector<Tensor<1, spacedim>> &
255
260 unsigned int
262
267 unsigned int
269
274 const Quadrature<dim - 1> &
276
281 std::size_t
283
284protected:
289 unsigned int present_face_no;
290
295 unsigned int present_face_index;
296
301};
302
303
304
318template <int dim, int spacedim = dim>
319class FEFaceValues : public FEFaceValuesBase<dim, spacedim>
320{
321public:
326 static constexpr unsigned int dimension = dim;
327
328 static constexpr unsigned int space_dimension = spacedim;
329
334 static constexpr unsigned int integral_dimension = dim - 1;
335
344
355
364
374
379 template <bool level_dof_access>
380 void
383 const unsigned int face_no);
384
391 template <bool level_dof_access>
392 void
396
410 void
412 const unsigned int face_no);
413
414 /*
415 * Reinitialize the gradients, Jacobi determinants, etc for the given face
416 * on a given cell of type "iterator into a Triangulation object", and the
417 * given finite element. Since iterators into a triangulation alone only
418 * convey information about the geometry of a cell, but not about degrees of
419 * freedom possibly associated with this cell, you will not be able to call
420 * some functions of this class if they need information about degrees of
421 * freedom. These functions are, above all, the
422 * <tt>get_function_value/gradients/hessians/third_derivatives</tt>
423 * functions. If you want to call these functions, you have to call the @p
424 * reinit variants that take iterators into DoFHandler or other DoF handler
425 * type objects.
426 *
427 * @note @p face must be one of @p cell's face iterators.
428 */
429 void
432
449
450private:
454 void
456
463 void
464 do_reinit(const unsigned int face_no);
465};
466
467
484template <int dim, int spacedim = dim>
485class FESubfaceValues : public FEFaceValuesBase<dim, spacedim>
486{
487public:
491 static constexpr unsigned int dimension = dim;
492
496 static constexpr unsigned int space_dimension = spacedim;
497
502 static constexpr unsigned int integral_dimension = dim - 1;
503
510 const Quadrature<dim - 1> &face_quadrature,
512
521 const hp::QCollection<dim - 1> &face_quadrature,
523
530 const Quadrature<dim - 1> &face_quadrature,
532
540 const hp::QCollection<dim - 1> &face_quadrature,
542
549 template <bool level_dof_access>
550 void
553 const unsigned int face_no,
554 const unsigned int subface_no);
555
560 template <bool level_dof_access>
561 void
565 const typename Triangulation<dim, spacedim>::face_iterator &subface);
566
580 void
582 const unsigned int face_no,
583 const unsigned int subface_no);
584
604 void
607 const typename Triangulation<dim, spacedim>::face_iterator &subface);
608
625
632
639
640private:
644 void
646
653 void
654 do_reinit(const unsigned int face_no, const unsigned int subface_no);
655};
656
657
658#ifndef DOXYGEN
659
660
661/*--------------------- Inline functions: FEValues --------------------------*/
662
663
664template <int dim, int spacedim>
665inline const Quadrature<dim> &
667{
668 return quadrature;
669}
670
671
672
673template <int dim, int spacedim>
674inline const FEValues<dim, spacedim> &
676{
677 return *this;
678}
679
680
681/*---------------------- Inline functions: FEFaceValuesBase -----------------*/
682
683
684template <int dim, int spacedim>
685inline unsigned int
687{
688 return present_face_no;
689}
690
691
692template <int dim, int spacedim>
693inline unsigned int
695{
696 return present_face_index;
697}
698
699
700/*----------------------- Inline functions: FE*FaceValues -------------------*/
701
702template <int dim, int spacedim>
703inline const Quadrature<dim - 1> &
705{
706 return quadrature[quadrature.size() == 1 ? 0 : present_face_no];
707}
708
709
710
711template <int dim, int spacedim>
712inline const FEFaceValues<dim, spacedim> &
714{
715 return *this;
716}
717
718
719
720template <int dim, int spacedim>
723{
724 return *this;
725}
726
727
728
729template <int dim, int spacedim>
730inline const Tensor<1, spacedim> &
731FEFaceValuesBase<dim, spacedim>::boundary_form(const unsigned int q_point) const
732{
733 AssertIndexRange(q_point, this->mapping_output.boundary_forms.size());
734 Assert(this->update_flags & update_boundary_forms,
736 "update_boundary_forms")));
737
738 return this->mapping_output.boundary_forms[q_point];
739}
740
741#endif // DOXYGEN
742
744
745#endif
const Tensor< 1, spacedim > & boundary_form(const unsigned int q_point) const
static constexpr unsigned int integral_dimension
Definition fe_values.h:206
const Quadrature< dim - 1 > & get_quadrature() const
unsigned int get_face_index() const
unsigned int present_face_no
Definition fe_values.h:289
FEFaceValuesBase(const unsigned int dofs_per_cell, const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &quadrature)
unsigned int present_face_index
Definition fe_values.h:295
FEFaceValuesBase(const unsigned int dofs_per_cell, const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature)
std::size_t memory_consumption() const
const std::vector< Tensor< 1, spacedim > > & get_boundary_forms() const
unsigned int get_face_number() const
const hp::QCollection< dim - 1 > quadrature
Definition fe_values.h:300
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const typename Triangulation< dim, spacedim >::face_iterator &face)
const FEFaceValues< dim, spacedim > & get_present_fe_values() const
FEFaceValues(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature, const UpdateFlags update_flags)
void initialize(const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no)
static constexpr unsigned int integral_dimension
Definition fe_values.h:334
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const unsigned int face_no)
void do_reinit(const unsigned int face_no)
FEFaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature, const UpdateFlags update_flags)
static constexpr unsigned int space_dimension
Definition fe_values.h:328
static constexpr unsigned int dimension
Definition fe_values.h:326
FEFaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &quadrature, const UpdateFlags update_flags)
FEFaceValues(const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &quadrature, const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const typename Triangulation< dim, spacedim >::face_iterator &face)
FESubfaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &face_quadrature, const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no)
static constexpr unsigned int space_dimension
Definition fe_values.h:496
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const unsigned int face_no, const unsigned int subface_no)
static constexpr unsigned int integral_dimension
Definition fe_values.h:502
void initialize(const UpdateFlags update_flags)
static constexpr unsigned int dimension
Definition fe_values.h:491
const FESubfaceValues< dim, spacedim > & get_present_fe_values() const
FESubfaceValues(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &face_quadrature, const UpdateFlags update_flags)
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const typename Triangulation< dim, spacedim >::face_iterator &face, const typename Triangulation< dim, spacedim >::face_iterator &subface)
void do_reinit(const unsigned int face_no, const unsigned int subface_no)
FESubfaceValues(const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &face_quadrature, const UpdateFlags update_flags)
FESubfaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &face_quadrature, const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const typename Triangulation< dim, spacedim >::face_iterator &face, const typename Triangulation< dim, spacedim >::face_iterator &subface)
const unsigned int dofs_per_cell
UpdateFlags update_flags
const ObserverPointer< const Mapping< dim, spacedim >, FEValuesBase< dim, spacedim > > mapping
const ObserverPointer< const FiniteElement< dim, spacedim >, FEValuesBase< dim, spacedim > > fe
FEValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim > &quadrature, const UpdateFlags update_flags)
void do_reinit()
const Quadrature< dim > & get_quadrature() const
const Quadrature< dim > quadrature
Definition fe_values.h:170
FEValues(const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim > &quadrature, const UpdateFlags update_flags)
const FEValues< dim, spacedim > & get_present_fe_values() const
FEValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim > &quadrature, const UpdateFlags update_flags)
FEValues(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim > &quadrature, const UpdateFlags update_flags)
void initialize(const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell)
static constexpr unsigned int integral_dimension
Definition fe_values.h:67
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell)
std::size_t memory_consumption() const
Abstract base class for mapping classes.
Definition mapping.h:318
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
#define DeclException0(Exception0)
static ::ExceptionBase & ExcFaceHasNoSubfaces()
static ::ExceptionBase & ExcReinitCalledWithBoundaryFace()
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
UpdateFlags
@ update_boundary_forms
Outer normal vector, not normalized.