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_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) 2004 - 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_hp_fe_values_h
14#define dealii_hp_fe_values_h
15
16#include <deal.II/base/config.h>
17
19
20#include <deal.II/fe/fe.h>
22
23#include <deal.II/grid/tria.h>
25
29
30#include <memory>
31
33
34// Forward declaration
35#ifndef DOXYGEN
36template <int dim, int spacedim>
37class FiniteElement;
38#endif
39
40
41namespace hp
42{
64 template <int dim, int q_dim, typename FEValuesType>
66 {
67 public:
78
88 const std::vector<QCollection<q_dim>> &q_collection,
90
100
108 const std::vector<QCollection<q_dim>> &q_collection,
110
115
121 operator=(const FEValuesBase &) = delete;
122
132 void
133 precalculate_fe_values(const std::vector<unsigned int> &fe_indices,
134 const std::vector<unsigned int> &mapping_indices,
135 const std::vector<unsigned int> &q_indices);
136
149 void
151
158
164
168 const QCollection<q_dim> &
170
176
183 const FEValuesType &
185
186 protected:
194 FEValuesType &
195 select_fe_values(const unsigned int fe_index,
196 const unsigned int mapping_index,
197 const unsigned int q_index);
198
199 protected:
203 const ObserverPointer<
207
211 const ObserverPointer<
215
220
229 const std::vector<QCollection<q_dim>> q_collections;
230
231 private:
244
250
255 };
256
257} // namespace hp
258
259
260namespace hp
261{
311 template <int dim, int spacedim = dim>
313 : public hp::FEValuesBase<dim, dim, ::FEValues<dim, spacedim>>
314 {
315 public:
316 static constexpr unsigned int dimension = dim;
317
318 static constexpr unsigned int space_dimension = spacedim;
319
327
328
337
338
384 template <bool lda>
385 void
387 const unsigned int q_index = numbers::invalid_unsigned_int,
388 const unsigned int mapping_index = numbers::invalid_unsigned_int,
389 const unsigned int fe_index = numbers::invalid_unsigned_int);
390
403 void
405 const unsigned int q_index = numbers::invalid_unsigned_int,
406 const unsigned int mapping_index = numbers::invalid_unsigned_int,
407 const unsigned int fe_index = numbers::invalid_unsigned_int);
408 };
409
410
411
435 template <int dim, int spacedim = dim>
437 : public hp::FEValuesBase<dim, dim - 1, ::FEFaceValues<dim, spacedim>>
438 {
439 public:
447
459 const std::vector<hp::QCollection<dim - 1>> &q_collections,
461
462
471
482 const std::vector<hp::QCollection<dim - 1>> &q_collections,
484
533 template <bool lda>
534 void
536 const unsigned int face_no,
537 const unsigned int q_index = numbers::invalid_unsigned_int,
538 const unsigned int mapping_index = numbers::invalid_unsigned_int,
539 const unsigned int fe_index = numbers::invalid_unsigned_int);
540
546 template <bool lda>
547 void
550 const unsigned int q_index = numbers::invalid_unsigned_int,
551 const unsigned int mapping_index = numbers::invalid_unsigned_int,
552 const unsigned int fe_index = numbers::invalid_unsigned_int);
553
566 void
568 const unsigned int face_no,
569 const unsigned int q_index = numbers::invalid_unsigned_int,
570 const unsigned int mapping_index = numbers::invalid_unsigned_int,
571 const unsigned int fe_index = numbers::invalid_unsigned_int);
572
578 void
581 const unsigned int q_index = numbers::invalid_unsigned_int,
582 const unsigned int mapping_index = numbers::invalid_unsigned_int,
583 const unsigned int fe_index = numbers::invalid_unsigned_int);
584 };
585
586
587
594 template <int dim, int spacedim = dim>
596 : public hp::
597 FEValuesBase<dim, dim - 1, ::FESubfaceValues<dim, spacedim>>
598 {
599 public:
604 const hp::MappingCollection<dim, spacedim> &mapping_collection,
605 const hp::FECollection<dim, spacedim> &fe_collection,
606 const hp::QCollection<dim - 1> &q_collection,
607 const UpdateFlags update_flags);
608
609
616 const hp::QCollection<dim - 1> &q_collection,
617 const UpdateFlags update_flags);
618
654 template <bool lda>
655 void
657 const unsigned int face_no,
658 const unsigned int subface_no,
659 const unsigned int q_index = numbers::invalid_unsigned_int,
660 const unsigned int mapping_index = numbers::invalid_unsigned_int,
661 const unsigned int fe_index = numbers::invalid_unsigned_int);
662
675 void
677 const unsigned int face_no,
678 const unsigned int subface_no,
679 const unsigned int q_index = numbers::invalid_unsigned_int,
680 const unsigned int mapping_index = numbers::invalid_unsigned_int,
681 const unsigned int fe_index = numbers::invalid_unsigned_int);
682 };
683
684} // namespace hp
685
686
687// -------------- inline and template functions --------------
688
689namespace hp
690{
691 template <int dim, int q_dim, typename FEValuesType>
692 inline const FEValuesType &
694 {
695 Assert(
696 present_fe_values_index != TableIndices<3>(numbers::invalid_unsigned_int,
700 "The indices of the present FEValues object are all invalid. The reason"
701 " is likely that you have forgotten to call the reinit() function."));
702
703 return *fe_values_table(present_fe_values_index);
704 }
705
706
707
708 template <int dim, int q_dim, typename FEValuesType>
711 {
712 return *fe_collection;
713 }
714
715
716
717 template <int dim, int q_dim, typename FEValuesType>
720 {
721 return *mapping_collection;
722 }
723
724
725
726 template <int dim, int q_dim, typename FEValuesType>
727 inline const QCollection<q_dim> &
729 {
730 return q_collection;
731 }
732
733
734
735 template <int dim, int q_dim, typename FEValuesType>
736 inline UpdateFlags
738 {
739 return update_flags;
740 }
741} // namespace hp
742
744
745#endif
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, lda > > &cell, const unsigned int face_no, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int)
Definition fe_values.cc:424
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, lda > > &cell, const unsigned int face_no, const unsigned int subface_no, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int)
Definition fe_values.cc:564
const QCollection< q_dim > & get_quadrature_collection() const
Definition fe_values.h:728
const ObserverPointer< const FECollection< dim, FEValuesType::space_dimension >, FEValuesBase< dim, q_dim, FEValuesType > > fe_collection
Definition fe_values.h:206
FEValuesBase & operator=(const FEValuesBase &)=delete
const FEValuesType & get_present_fe_values() const
Definition fe_values.h:693
const std::vector< QCollection< q_dim > > q_collections
Definition fe_values.h:229
FEValuesType & select_fe_values(const unsigned int fe_index, const unsigned int mapping_index, const unsigned int q_index)
Definition fe_values.cc:176
const QCollection< q_dim > q_collection
Definition fe_values.h:219
UpdateFlags get_update_flags() const
Definition fe_values.h:737
const MappingCollection< dim, FEValuesType::space_dimension > & get_mapping_collection() const
Definition fe_values.h:719
const ObserverPointer< const MappingCollection< dim, FEValuesType::space_dimension >, FEValuesBase< dim, q_dim, FEValuesType > > mapping_collection
Definition fe_values.h:214
Table< 3, std::unique_ptr< FEValuesType > > fe_values_table
Definition fe_values.h:243
const FECollection< dim, FEValuesType::space_dimension > & get_fe_collection() const
Definition fe_values.h:710
TableIndices< 3 > present_fe_values_index
Definition fe_values.h:249
void precalculate_fe_values()
Definition fe_values.cc:243
const UpdateFlags update_flags
Definition fe_values.h:254
static constexpr unsigned int dimension
Definition fe_values.h:316
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, lda > > &cell, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int)
Definition fe_values.cc:294
static constexpr unsigned int space_dimension
Definition fe_values.h:318
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
#define Assert(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)
UpdateFlags
Definition hp.h:115
constexpr unsigned int invalid_unsigned_int
Definition types.h:228