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_nedelec_sz.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) 2018 - 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_fe_nedelec_sz_h
14#define dealii_fe_nedelec_sz_h
15
16#include <deal.II/base/config.h>
17
20
21#include <deal.II/fe/fe.h>
22#include <deal.II/fe/mapping.h>
23
25
70template <int dim, int spacedim = dim>
71class FE_NedelecSZ : public FiniteElement<dim, dim>
72{
73public:
74 static_assert(dim == spacedim,
75 "FE_NedelecSZ is only implemented for dim==spacedim!");
76
91 FE_NedelecSZ(const unsigned int order);
92
93 virtual UpdateFlags
94 requires_update_flags(const UpdateFlags update_flags) const override;
95
96 virtual std::string
97 get_name() const override;
98
99 virtual std::unique_ptr<FiniteElement<dim, dim>>
100 clone() const override;
101
110 virtual double
111 shape_value(const unsigned int i, const Point<dim> &p) const override;
112
119 virtual double
120 shape_value_component(const unsigned int i,
121 const Point<dim> &p,
122 const unsigned int component) const override;
123
132 virtual Tensor<1, dim>
133 shape_grad(const unsigned int i, const Point<dim> &p) const override;
134
141 virtual Tensor<1, dim>
142 shape_grad_component(const unsigned int i,
143 const Point<dim> &p,
144 const unsigned int component) const override;
145
154 virtual Tensor<2, dim>
155 shape_grad_grad(const unsigned int i, const Point<dim> &p) const override;
156
163 virtual Tensor<2, dim>
164 shape_grad_grad_component(const unsigned int i,
165 const Point<dim> &p,
166 const unsigned int component) const override;
167
188 virtual const FullMatrix<double> &
190 const unsigned int child,
191 const RefinementCase<dim> &refinement_case =
193
194protected:
200
205 void
206 evaluate(const std::vector<Point<dim>> &p_list,
207 const UpdateFlags update_flags,
208 std::unique_ptr<
209 typename ::FiniteElement<dim, spacedim>::InternalDataBase>
210 &data_ptr) const;
211
212 virtual std::unique_ptr<
213 typename ::FiniteElement<dim, spacedim>::InternalDataBase>
214 get_data(
215 const UpdateFlags update_flags,
216 const Mapping<dim, spacedim> &mapping,
217 const Quadrature<dim> &quadrature,
219 spacedim>
220 &output_data) const override;
221
227 virtual void
229 const typename Triangulation<dim, dim>::cell_iterator &cell,
230 const CellSimilarity::Similarity cell_similarity,
231 const Quadrature<dim> &quadrature,
232 const Mapping<dim, dim> &mapping,
233 const typename Mapping<dim, dim>::InternalDataBase &mapping_internal,
235 &mapping_data,
236 const typename FiniteElement<dim, dim>::InternalDataBase &fedata,
238 &data) const override;
239
240 using FiniteElement<dim, spacedim>::fill_fe_face_values;
241
247 virtual void
249 const typename Triangulation<dim, dim>::cell_iterator &cell,
250 const unsigned int face_no,
251 const hp::QCollection<dim - 1> &quadrature,
252 const Mapping<dim, dim> &mapping,
253 const typename Mapping<dim, dim>::InternalDataBase &mapping_internal,
255 &mapping_data,
256 const typename FiniteElement<dim, dim>::InternalDataBase &fedata,
258 &data) const override;
259
263 virtual void
265 const typename Triangulation<dim, dim>::cell_iterator &cell,
266 const unsigned int face_no,
267 const unsigned int sub_no,
268 const Quadrature<dim - 1> &quadrature,
269 const Mapping<dim, dim> &mapping,
270 const typename Mapping<dim, dim>::InternalDataBase &mapping_internal,
272 &mapping_data,
273 const typename FiniteElement<dim, dim>::InternalDataBase &fedata,
275 &data) const override;
276
297 {
298 public:
305 mutable std::vector<std::vector<Tensor<1, dim>>> shape_values;
306
314 mutable std::vector<std::vector<DerivativeForm<1, dim, dim>>> shape_grads;
315
323 mutable std::vector<std::vector<DerivativeForm<2, dim, dim>>>
325
341 std::vector<std::vector<std::vector<double>>> sigma_imj_values;
342
358 std::vector<std::vector<std::vector<double>>> sigma_imj_grads;
359
371 std::vector<std::vector<double>> edge_sigma_values;
372
384 std::vector<std::vector<double>> edge_sigma_grads;
385
401 std::vector<std::vector<double>> edge_lambda_values;
402
412 std::vector<std::vector<double>> edge_lambda_grads_2d;
413
423 std::vector<std::vector<std::vector<double>>> edge_lambda_grads_3d;
424
435 std::vector<std::vector<std::vector<double>>> edge_lambda_gradgrads_3d;
436
453 std::vector<std::vector<double>> face_lambda_values;
454
463 std::vector<std::vector<double>> face_lambda_grads;
464 };
465
466private:
475 static std::vector<unsigned int>
476 get_dpo_vector(const unsigned int degree);
477
481 std::vector<Polynomials::Polynomial<double>> IntegratedLegendrePolynomials;
482
487 void
488 create_polynomials(const unsigned int degree);
489
493 unsigned int
494 compute_num_dofs(const unsigned int degree) const;
495
500 void
502 const Quadrature<dim> &quadrature,
503 const InternalData &fedata) const;
504
509 void
511 const Quadrature<dim> &quadrature,
512 const InternalData &fedata) const;
513
519};
520
521
522
526
527#endif
std::vector< std::vector< double > > edge_lambda_grads_2d
std::vector< std::vector< Tensor< 1, dim > > > shape_values
std::vector< std::vector< std::vector< double > > > sigma_imj_values
std::vector< std::vector< double > > edge_sigma_grads
std::vector< std::vector< double > > edge_sigma_values
std::vector< std::vector< DerivativeForm< 2, dim, dim > > > shape_hessians
std::vector< std::vector< std::vector< double > > > sigma_imj_grads
std::vector< std::vector< double > > face_lambda_values
std::vector< std::vector< DerivativeForm< 1, dim, dim > > > shape_grads
std::vector< std::vector< std::vector< double > > > edge_lambda_grads_3d
std::vector< std::vector< double > > edge_lambda_values
std::vector< std::vector< std::vector< double > > > edge_lambda_gradgrads_3d
std::vector< std::vector< double > > face_lambda_grads
void evaluate(const std::vector< Point< dim > > &p_list, const UpdateFlags update_flags, std::unique_ptr< typename ::FiniteElement< dim, spacedim >::InternalDataBase > &data_ptr) const
unsigned int compute_num_dofs(const unsigned int degree) const
virtual void fill_fe_values(const typename Triangulation< dim, dim >::cell_iterator &cell, const CellSimilarity::Similarity cell_similarity, const Quadrature< dim > &quadrature, const Mapping< dim, dim > &mapping, const typename Mapping< dim, dim >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< dim, dim > &mapping_data, const typename FiniteElement< dim, dim >::InternalDataBase &fedata, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, dim > &data) const override
virtual std::unique_ptr< FiniteElement< dim, dim > > clone() const override
virtual void fill_fe_subface_values(const typename Triangulation< dim, dim >::cell_iterator &cell, const unsigned int face_no, const unsigned int sub_no, const Quadrature< dim - 1 > &quadrature, const Mapping< dim, dim > &mapping, const typename Mapping< dim, dim >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< dim, dim > &mapping_data, const typename FiniteElement< dim, dim >::InternalDataBase &fedata, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, dim > &data) const override
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
static std::vector< unsigned int > get_dpo_vector(const unsigned int degree)
void create_polynomials(const unsigned int degree)
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
virtual void fill_fe_face_values(const typename Triangulation< dim, dim >::cell_iterator &cell, const unsigned int face_no, const hp::QCollection< dim - 1 > &quadrature, const Mapping< dim, dim > &mapping, const typename Mapping< dim, dim >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< dim, dim > &mapping_data, const typename FiniteElement< dim, dim >::InternalDataBase &fedata, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, dim > &data) const override
virtual const FullMatrix< double > & get_prolongation_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const override
virtual std::string get_name() const override
virtual Tensor< 2, dim > shape_grad_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual Tensor< 1, dim > shape_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const override
Threads::Mutex prolongation_matrix_mutex
std::vector< Polynomials::Polynomial< double > > IntegratedLegendrePolynomials
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const override
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
void fill_face_values(const typename Triangulation< dim, dim >::cell_iterator &cell, const Quadrature< dim > &quadrature, const InternalData &fedata) const
void fill_edge_values(const typename Triangulation< dim, dim >::cell_iterator &cell, const Quadrature< dim > &quadrature, const InternalData &fedata) const
MappingKind mapping_kind
virtual double shape_value(const unsigned int i, const Point< dim > &p) const override
const unsigned int degree
Definition fe_data.h:450
friend class InternalDataBase
Definition fe.h:3217
Abstract base class for mapping classes.
Definition mapping.h:318
Definition point.h:111
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
UpdateFlags
MappingKind
Definition mapping.h:79
std::vector< index_type > data
Definition mpi.cc:734