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
mapping_fe_field.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) 2015 - 2026 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_mapping_fe_field_h
14#define dealii_mapping_fe_field_h
15
16
17#include <deal.II/base/config.h>
18
20#include <deal.II/base/mutex.h>
21
23
24#include <deal.II/fe/fe.h>
26#include <deal.II/fe/mapping.h>
27
28#include <deal.II/lac/vector.h>
29
30#include <boost/container/small_vector.hpp>
31
32#include <array>
33
34
36
37namespace internal
38{
52 template <int dim, int spacedim = dim>
54 {
55 public:
61 const ComponentMask &mask);
62
67 bool
69
75 operator[](const unsigned int component) const;
76
77 private:
82
86 std::array<unsigned int, spacedim + 1> offsets;
87
91 std::vector<unsigned int> component_dofs;
92 };
93} // namespace internal
94
135template <int dim, int spacedim = dim, typename VectorType = Vector<double>>
136class MappingFEField : public Mapping<dim, spacedim>
137{
138public:
172 const VectorType &euler_vector,
173 const ComponentMask &mask = {});
174
185 const std::vector<VectorType> &euler_vector,
186 const ComponentMask &mask = {});
187
197 const ComponentMask &mask = {});
198
203
208 virtual std::unique_ptr<Mapping<dim, spacedim>>
209 clone() const override;
210
216 virtual bool
218
219 virtual bool
221
229 virtual boost::container::small_vector<Point<spacedim>,
230#ifndef _MSC_VER
231 ReferenceCells::max_n_vertices<dim>()
232#else
234#endif
235 >
237 const override;
238
244 // for documentation, see the Mapping base class
245 virtual Point<spacedim>
248 const Point<dim> &p) const override;
249
250 // for documentation, see the Mapping base class
251 virtual Point<dim>
254 const Point<spacedim> &p) const override;
255
265 // for documentation, see the Mapping base class
266 virtual void
267 transform(const ArrayView<const Tensor<1, dim>> &input,
268 const MappingKind kind,
270 const ArrayView<Tensor<1, spacedim>> &output) const override;
271
272 // for documentation, see the Mapping base class
273 virtual void
275 const MappingKind kind,
277 const ArrayView<Tensor<2, spacedim>> &output) const override;
278
279 // for documentation, see the Mapping base class
280 virtual void
281 transform(const ArrayView<const Tensor<2, dim>> &input,
282 const MappingKind kind,
284 const ArrayView<Tensor<2, spacedim>> &output) const override;
285
286 // for documentation, see the Mapping base class
287 virtual void
289 const MappingKind kind,
291 const ArrayView<Tensor<3, spacedim>> &output) const override;
292
293 // for documentation, see the Mapping base class
294 virtual void
295 transform(const ArrayView<const Tensor<3, dim>> &input,
296 const MappingKind kind,
298 const ArrayView<Tensor<3, spacedim>> &output) const override;
299
308 unsigned int
309 get_degree() const;
310
317
322
323private:
329 // documentation can be found in Mapping::requires_update_flags()
330 virtual UpdateFlags
331 requires_update_flags(const UpdateFlags update_flags) const override;
332
333public:
345 class InternalData : public Mapping<dim, spacedim>::InternalDataBase
346 {
347 public:
352 const ComponentMask &mask);
353
354 // Documentation see Mapping::InternalDataBase.
355 virtual void
356 reinit(const UpdateFlags update_flags,
357 const Quadrature<dim> &quadrature) override;
358
363 const double &
364 shape(const unsigned int qpoint, const unsigned int shape_nr) const;
365
369 double &
370 shape(const unsigned int qpoint, const unsigned int shape_nr);
371
375 const Tensor<1, dim> &
376 derivative(const unsigned int qpoint, const unsigned int shape_nr) const;
377
382 derivative(const unsigned int qpoint, const unsigned int shape_nr);
383
387 const Tensor<2, dim> &
388 second_derivative(const unsigned int qpoint,
389 const unsigned int shape_nr) const;
390
395 second_derivative(const unsigned int qpoint, const unsigned int shape_nr);
396
400 const Tensor<3, dim> &
401 third_derivative(const unsigned int qpoint,
402 const unsigned int shape_nr) const;
403
408 third_derivative(const unsigned int qpoint, const unsigned int shape_nr);
409
413 const Tensor<4, dim> &
414 fourth_derivative(const unsigned int qpoint,
415 const unsigned int shape_nr) const;
416
421 fourth_derivative(const unsigned int qpoint, const unsigned int shape_nr);
422
426 virtual std::size_t
427 memory_consumption() const override;
428
433
439 std::vector<double> shape_values;
440
446 std::vector<Tensor<1, dim>> shape_derivatives;
447
454 std::vector<Tensor<2, dim>> shape_second_derivatives;
455
462 std::vector<Tensor<3, dim>> shape_third_derivatives;
463
470 std::vector<Tensor<4, dim>> shape_fourth_derivatives;
471
485 std::array<std::vector<Tensor<1, dim>>,
488
495 unsigned int n_shape_functions;
496
510
520 mutable std::vector<DerivativeForm<1, dim, spacedim>> covariant;
521
529 mutable std::vector<DerivativeForm<1, dim, spacedim>> contravariant;
530
535 mutable std::vector<double> volume_elements;
536
540 mutable std::vector<double> quadrature_weights;
541
545 mutable std::vector<std::vector<Tensor<1, spacedim>>> aux;
546
550 mutable std::vector<types::global_dof_index> local_dof_indices;
551
555 mutable std::vector<double> local_dof_values;
556 };
557
558protected:
559 // documentation can be found in Mapping::get_data()
560 virtual std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
561 get_data(const UpdateFlags, const Quadrature<dim> &quadrature) const override;
562
563 using Mapping<dim, spacedim>::get_face_data;
564
565 // documentation can be found in Mapping::get_face_data()
566 virtual std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
568 const hp::QCollection<dim - 1> &quadrature) const override;
569
570 // documentation can be found in Mapping::get_subface_data()
571 virtual std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
573 const Quadrature<dim - 1> &quadrature) const override;
574
575 // documentation can be found in Mapping::fill_fe_values()
579 const CellSimilarity::Similarity cell_similarity,
580 const Quadrature<dim> &quadrature,
581 const typename Mapping<dim, spacedim>::InternalDataBase &internal_data,
583 &output_data) const override;
584
585 using Mapping<dim, spacedim>::fill_fe_face_values;
586
587 // documentation can be found in Mapping::fill_fe_face_values()
588 virtual void
591 const unsigned int face_no,
592 const hp::QCollection<dim - 1> &quadrature,
593 const typename Mapping<dim, spacedim>::InternalDataBase &internal_data,
595 &output_data) const override;
596
597 // documentation can be found in Mapping::fill_fe_subface_values()
598 virtual void
601 const unsigned int face_no,
602 const unsigned int subface_no,
603 const Quadrature<dim - 1> &quadrature,
604 const typename Mapping<dim, spacedim>::InternalDataBase &internal_data,
606 &output_data) const override;
607
608 virtual void
612 const typename Mapping<dim, spacedim>::InternalDataBase &internal_data,
614 &output_data) const override;
615
625
630 const bool uses_level_dofs;
631
635 std::vector<ObserverPointer<const VectorType,
638
645
646private:
664
682 const Point<spacedim> &p,
683 const Point<dim> &starting_guess,
684 InternalData &mdata) const;
685
689 void
693 &data) const;
694
695 /*
696 * Which components to use for the mapping.
697 */
699
704
710
714 mutable std::vector<types::global_dof_index> dof_indices;
715
723
724 void
725 compute_face_data(const unsigned int n_original_q_points,
726 InternalData &data) const;
727
728 // Declare other MappingFEField classes friends.
729 template <int, int, class>
730 friend class MappingFEField;
731};
732
735/* -------------- declaration of explicit specializations ------------- */
736
737#ifndef DOXYGEN
738
739#endif // DOXYGEN
740
742
743#endif
const Tensor< 3, dim > & third_derivative(const unsigned int qpoint, const unsigned int shape_nr) const
std::array< std::vector< Tensor< 1, dim > >, GeometryInfo< dim >::faces_per_cell *(dim - 1)> unit_tangentials
InternalData(const FiniteElement< dim, spacedim > &fe, const ComponentMask &mask)
std::vector< double > quadrature_weights
std::vector< DerivativeForm< 1, dim, spacedim > > contravariant
Tensor< 3, dim > & third_derivative(const unsigned int qpoint, const unsigned int shape_nr)
std::vector< std::vector< Tensor< 1, spacedim > > > aux
Tensor< 4, dim > & fourth_derivative(const unsigned int qpoint, const unsigned int shape_nr)
double & shape(const unsigned int qpoint, const unsigned int shape_nr)
std::vector< Tensor< 4, dim > > shape_fourth_derivatives
ObserverPointer< const FiniteElement< dim, spacedim > > fe
std::vector< Tensor< 3, dim > > shape_third_derivatives
const Tensor< 2, dim > & second_derivative(const unsigned int qpoint, const unsigned int shape_nr) const
virtual void reinit(const UpdateFlags update_flags, const Quadrature< dim > &quadrature) override
std::vector< types::global_dof_index > local_dof_indices
const Tensor< 4, dim > & fourth_derivative(const unsigned int qpoint, const unsigned int shape_nr) const
std::vector< Tensor< 1, dim > > shape_derivatives
Tensor< 2, dim > & second_derivative(const unsigned int qpoint, const unsigned int shape_nr)
std::vector< DerivativeForm< 1, dim, spacedim > > covariant
const Tensor< 1, dim > & derivative(const unsigned int qpoint, const unsigned int shape_nr) const
std::vector< double > local_dof_values
const double & shape(const unsigned int qpoint, const unsigned int shape_nr) const
std::vector< double > shape_values
virtual std::size_t memory_consumption() const override
std::vector< Tensor< 2, dim > > shape_second_derivatives
std::vector< double > volume_elements
Tensor< 1, dim > & derivative(const unsigned int qpoint, const unsigned int shape_nr)
ReferenceCell< dim > reference_cell
virtual Point< spacedim > transform_unit_to_real_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< dim > &p) const override
const ComponentMask fe_mask
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
virtual void transform(const ArrayView< const Tensor< 2, dim > > &input, const MappingKind kind, const typename Mapping< dim, spacedim >::InternalDataBase &internal, const ArrayView< Tensor< 2, spacedim > > &output) const override
void update_internal_dofs(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const typename MappingFEField< dim, spacedim, VectorType >::InternalData &data) const
MappingFEField(const MappingFEField< dim, spacedim, VectorType > &mapping)
virtual void transform(const ArrayView< const Tensor< 1, dim > > &input, const MappingKind kind, const typename Mapping< dim, spacedim >::InternalDataBase &internal, const ArrayView< Tensor< 1, spacedim > > &output) const override
internal::ComponentDoFs< dim, spacedim > component_dofs
virtual void fill_fe_immersed_surface_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const NonMatching::ImmersedSurfaceQuadrature< dim > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
Point< dim > do_transform_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< spacedim > &p, const Point< dim > &starting_guess, InternalData &mdata) const
virtual std::unique_ptr< Mapping< dim, spacedim > > clone() const override
virtual CellSimilarity::Similarity fill_fe_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const CellSimilarity::Similarity cell_similarity, const Quadrature< dim > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
void compute_face_data(const unsigned int n_original_q_points, InternalData &data) const
std::vector< types::global_dof_index > dof_indices
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_subface_data(const UpdateFlags flags, const Quadrature< dim - 1 > &quadrature) const override
std::vector< ObserverPointer< const VectorType, MappingFEField< dim, spacedim, VectorType > > > euler_vector
MappingFEField(const DoFHandler< dim, spacedim > &euler_dof_handler, const MGLevelObject< VectorType > &euler_vector, const ComponentMask &mask={})
MappingFEField(const DoFHandler< dim, spacedim > &euler_dof_handler, const VectorType &euler_vector, const ComponentMask &mask={})
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 typename Mapping< dim, spacedim >::InternalDataBase &internal_data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
unsigned int get_degree() const
Point< spacedim > do_transform_unit_to_real_cell(const InternalData &mdata) const
virtual bool preserves_vertex_locations() const override
virtual boost::container::small_vector< Point< spacedim >, ReferenceCells::max_n_vertices< dim >() > get_vertices(const typename Triangulation< dim, spacedim >::cell_iterator &cell) const override
Threads::Mutex fe_values_mutex
virtual void transform(const ArrayView< const DerivativeForm< 1, dim, spacedim > > &input, const MappingKind kind, const typename Mapping< dim, spacedim >::InternalDataBase &internal, const ArrayView< Tensor< 2, spacedim > > &output) const override
const bool uses_level_dofs
virtual void transform(const ArrayView< const Tensor< 3, dim > > &input, const MappingKind kind, const typename Mapping< dim, spacedim >::InternalDataBase &internal, const ArrayView< Tensor< 3, spacedim > > &output) const override
virtual Point< dim > transform_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< spacedim > &p) const override
virtual void fill_fe_subface_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no, const Quadrature< dim - 1 > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
ComponentMask get_component_mask() const
ObserverPointer< const DoFHandler< dim, spacedim >, MappingFEField< dim, spacedim, VectorType > > euler_dof_handler
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_data(const UpdateFlags, const Quadrature< dim > &quadrature) const override
MappingFEField(const DoFHandler< dim, spacedim > &euler_dof_handler, const std::vector< VectorType > &euler_vector, const ComponentMask &mask={})
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_face_data(const UpdateFlags flags, const hp::QCollection< dim - 1 > &quadrature) const override
virtual void transform(const ArrayView< const DerivativeForm< 2, dim, spacedim > > &input, const MappingKind kind, const typename Mapping< dim, spacedim >::InternalDataBase &internal, const ArrayView< Tensor< 3, spacedim > > &output) const override
FEValues< dim, spacedim > fe_values
virtual bool is_compatible_with(const ReferenceCell< dim > &reference_cell) const override
Abstract base class for mapping classes.
Definition mapping.h:318
Definition point.h:111
ArrayView< const unsigned int > operator[](const unsigned int component) const
std::array< unsigned int, spacedim+1 > offsets
bool all_components_are_primitive() const
ComponentDoFs(const FiniteElement< dim, spacedim > &fe, const ComponentMask &mask)
std::vector< unsigned int > component_dofs
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
#define DeclException0(Exception0)
static ::ExceptionBase & ExcInactiveCell()
UpdateFlags
MappingKind
Definition mapping.h:79
std::vector< index_type > data
Definition mpi.cc:734