Reference documentation for deal.II version 9.1.1
\(\newcommand{\dealcoloneq}{\mathrel{\vcenter{:}}=}\)
fe_nedelec_sz.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2015 - 2019 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_fe_nedelec_sz_h
17 #define dealii_fe_nedelec_sz_h
18 
19 #include <deal.II/base/derivative_form.h>
20 #include <deal.II/base/polynomials_integrated_legendre_sz.h>
21 #include <deal.II/base/qprojector.h>
22 
23 #include <deal.II/fe/fe.h>
24 #include <deal.II/fe/fe_values.h>
25 #include <deal.II/fe/mapping.h>
26 
27 DEAL_II_NAMESPACE_OPEN
28 
31 
72 template <int dim, int spacedim = dim>
73 class FE_NedelecSZ : public FiniteElement<dim, dim>
74 {
75 public:
76  static_assert(dim == spacedim,
77  "FE_NedelecSZ is only implemented for dim==spacedim!");
78 
82  FE_NedelecSZ(const unsigned int degree);
83 
84  virtual UpdateFlags
85  requires_update_flags(const UpdateFlags update_flags) const override;
86 
87  virtual std::string
88  get_name() const override;
89 
90  virtual std::unique_ptr<FiniteElement<dim, dim>>
91  clone() const override;
92 
97  virtual double
98  shape_value(const unsigned int i, const Point<dim> &p) const override;
99 
103  virtual double
104  shape_value_component(const unsigned int i,
105  const Point<dim> & p,
106  const unsigned int component) const override;
107 
112  virtual Tensor<1, dim>
113  shape_grad(const unsigned int i, const Point<dim> &p) const override;
114 
118  virtual Tensor<1, dim>
119  shape_grad_component(const unsigned int i,
120  const Point<dim> & p,
121  const unsigned int component) const override;
122 
127  virtual Tensor<2, dim>
128  shape_grad_grad(const unsigned int i, const Point<dim> &p) const override;
129 
133  virtual Tensor<2, dim>
134  shape_grad_grad_component(const unsigned int i,
135  const Point<dim> & p,
136  const unsigned int component) const override;
137 
143  UpdateFlags
144  update_once(const UpdateFlags flags) const;
145 
151  UpdateFlags
152  update_each(const UpdateFlags flags) const;
153 
154 protected:
160 
161  virtual std::unique_ptr<
162  typename ::FiniteElement<dim, spacedim>::InternalDataBase>
163  get_data(
164  const UpdateFlags update_flags,
165  const Mapping<dim, spacedim> &mapping,
166  const Quadrature<dim> & quadrature,
168  spacedim>
169  &output_data) const override;
170 
176  virtual void
178  const typename Triangulation<dim, dim>::cell_iterator &cell,
179  const CellSimilarity::Similarity cell_similarity,
180  const Quadrature<dim> & quadrature,
181  const Mapping<dim, dim> & mapping,
182  const typename Mapping<dim, dim>::InternalDataBase & mapping_internal,
183  const ::internal::FEValuesImplementation::MappingRelatedData<dim, dim>
184  & mapping_data,
185  const typename FiniteElement<dim, dim>::InternalDataBase &fedata,
187  &data) const override;
188 
194  virtual void
196  const typename Triangulation<dim, dim>::cell_iterator &cell,
197  const unsigned int face_no,
198  const Quadrature<dim - 1> & quadrature,
199  const Mapping<dim, dim> & mapping,
200  const typename Mapping<dim, dim>::InternalDataBase & mapping_internal,
201  const ::internal::FEValuesImplementation::MappingRelatedData<dim, dim>
202  & mapping_data,
203  const typename FiniteElement<dim, dim>::InternalDataBase &fedata,
205  &data) const override;
206 
210  virtual void
212  const typename Triangulation<dim, dim>::cell_iterator &cell,
213  const unsigned int face_no,
214  const unsigned int sub_no,
215  const Quadrature<dim - 1> & quadrature,
216  const Mapping<dim, dim> & mapping,
217  const typename Mapping<dim, dim>::InternalDataBase & mapping_internal,
218  const ::internal::FEValuesImplementation::MappingRelatedData<dim, dim>
219  & mapping_data,
220  const typename FiniteElement<dim, dim>::InternalDataBase &fedata,
222  &data) const override;
223 
243  class InternalData : public FiniteElement<dim, dim>::InternalDataBase
244  {
245  public:
252  mutable std::vector<std::vector<Tensor<1, dim>>> shape_values;
253 
261  mutable std::vector<std::vector<DerivativeForm<1, dim, dim>>> shape_grads;
262 
278  std::vector<std::vector<std::vector<double>>> sigma_imj_values;
279 
295  std::vector<std::vector<std::vector<double>>> sigma_imj_grads;
296 
308  std::vector<std::vector<double>> edge_sigma_values;
309 
322  std::vector<std::vector<double>> edge_sigma_grads;
323 
339  std::vector<std::vector<double>> edge_lambda_values;
340 
350  std::vector<std::vector<double>> edge_lambda_grads_2d;
351 
361  std::vector<std::vector<std::vector<double>>> edge_lambda_grads_3d;
362 
373  std::vector<std::vector<std::vector<double>>> edge_lambda_gradgrads_3d;
374 
391  std::vector<std::vector<double>> face_lambda_values;
392 
401  std::vector<std::vector<double>> face_lambda_grads;
402  };
403 
404 private:
413  static std::vector<unsigned int>
414  get_dpo_vector(const unsigned int degree);
415 
419  std::vector<Polynomials::Polynomial<double>> IntegratedLegendrePolynomials;
420 
425  void
426  create_polynomials(const unsigned int degree);
427 
431  unsigned int
432  compute_num_dofs(const unsigned int degree) const;
433 
438  void
440  const Quadrature<dim> &quadrature,
441  const InternalData & fedata) const;
442 
447  void
449  const Quadrature<dim> &quadrature,
450  const InternalData & fedata) const;
451 };
452 
453 
454 
457 DEAL_II_NAMESPACE_CLOSE
458 
459 #endif
internal::FEValuesImplementation::FiniteElementRelatedData
Definition: fe_update_flags.h:519
FE_NedelecSZ::InternalData::edge_lambda_grads_2d
std::vector< std::vector< double > > edge_lambda_grads_2d
Definition: fe_nedelec_sz.h:350
FE_NedelecSZ::InternalData::edge_sigma_values
std::vector< std::vector< double > > edge_sigma_values
Definition: fe_nedelec_sz.h:308
FE_NedelecSZ::create_polynomials
void create_polynomials(const unsigned int degree)
Definition: fe_nedelec_sz.cc:2275
Triangulation
Definition: dof_handler.h:50
FE_NedelecSZ::fill_fe_subface_values
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
Definition: fe_nedelec_sz.cc:2145
FE_NedelecSZ::IntegratedLegendrePolynomials
std::vector< Polynomials::Polynomial< double > > IntegratedLegendrePolynomials
Definition: fe_nedelec_sz.h:419
FE_NedelecSZ::shape_grad
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_nedelec_sz.cc:79
FE_NedelecSZ::get_data
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
Definition: fe_nedelec_sz.cc:126
CellSimilarity::Similarity
Similarity
Definition: fe_update_flags.h:373
FE_NedelecSZ::shape_grad_grad
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const override
Definition: fe_nedelec_sz.cc:103
FE_NedelecSZ::clone
virtual std::unique_ptr< FiniteElement< dim, dim > > clone() const override
Definition: fe_nedelec_sz.cc:2225
FE_NedelecSZ::InternalData::face_lambda_values
std::vector< std::vector< double > > face_lambda_values
Definition: fe_nedelec_sz.h:391
FE_NedelecSZ
Definition: fe_nedelec_sz.h:73
FE_NedelecSZ::compute_num_dofs
unsigned int compute_num_dofs(const unsigned int degree) const
Definition: fe_nedelec_sz.cc:2253
FE_NedelecSZ::InternalData
Definition: fe_nedelec_sz.h:243
FiniteElementData::degree
const unsigned int degree
Definition: fe_base.h:298
FE_NedelecSZ::update_each
UpdateFlags update_each(const UpdateFlags flags) const
Definition: fe_nedelec_sz.cc:2184
FE_NedelecSZ::InternalData::edge_lambda_gradgrads_3d
std::vector< std::vector< std::vector< double > > > edge_lambda_gradgrads_3d
Definition: fe_nedelec_sz.h:373
FE_NedelecSZ::update_once
UpdateFlags update_once(const UpdateFlags flags) const
Definition: fe_nedelec_sz.cc:2171
Mapping
Abstract base class for mapping classes.
Definition: dof_tools.h:57
FE_NedelecSZ::get_dpo_vector
static std::vector< unsigned int > get_dpo_vector(const unsigned int degree)
Definition: fe_nedelec_sz.cc:2232
FE_NedelecSZ::shape_grad_grad_component
virtual Tensor< 2, dim > shape_grad_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_nedelec_sz.cc:114
FE_NedelecSZ::shape_value
virtual double shape_value(const unsigned int i, const Point< dim > &p) const override
Definition: fe_nedelec_sz.cc:54
Tensor< 1, dim >
FE_NedelecSZ::mapping_type
MappingType mapping_type
Definition: fe_nedelec_sz.h:159
FE_NedelecSZ::InternalData::shape_values
std::vector< std::vector< Tensor< 1, dim > > > shape_values
Definition: fe_nedelec_sz.h:252
FE_NedelecSZ::requires_update_flags
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
Definition: fe_nedelec_sz.cc:2163
FE_NedelecSZ::InternalData::shape_grads
std::vector< std::vector< DerivativeForm< 1, dim, dim > > > shape_grads
Definition: fe_nedelec_sz.h:261
FE_NedelecSZ::fill_fe_values
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
Definition: fe_nedelec_sz.cc:1904
FE_NedelecSZ::shape_value_component
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_nedelec_sz.cc:65
FE_NedelecSZ::shape_grad_component
virtual Tensor< 1, dim > shape_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
Definition: fe_nedelec_sz.cc:90
FiniteElement
Definition: dof_accessor.h:43
FE_NedelecSZ::fill_edge_values
void fill_edge_values(const typename Triangulation< dim, dim >::cell_iterator &cell, const Quadrature< dim > &quadrature, const InternalData &fedata) const
Definition: fe_nedelec_sz.cc:1105
FE_NedelecSZ::fill_face_values
void fill_face_values(const typename Triangulation< dim, dim >::cell_iterator &cell, const Quadrature< dim > &quadrature, const InternalData &fedata) const
Definition: fe_nedelec_sz.cc:1530
FE_NedelecSZ::InternalData::edge_lambda_values
std::vector< std::vector< double > > edge_lambda_values
Definition: fe_nedelec_sz.h:339
FE_NedelecSZ::fill_fe_face_values
virtual void fill_fe_face_values(const typename Triangulation< dim, dim >::cell_iterator &cell, const unsigned int face_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
Definition: fe_nedelec_sz.cc:2016
Mapping::InternalDataBase
Definition: mapping.h:595
FE_NedelecSZ::InternalData::face_lambda_grads
std::vector< std::vector< double > > face_lambda_grads
Definition: fe_nedelec_sz.h:401
MappingType
MappingType
Definition: mapping.h:61
Point< dim >
FE_NedelecSZ::InternalData::edge_lambda_grads_3d
std::vector< std::vector< std::vector< double > > > edge_lambda_grads_3d
Definition: fe_nedelec_sz.h:361
FE_NedelecSZ::get_name
virtual std::string get_name() const override
Definition: fe_nedelec_sz.cc:2208
FE_NedelecSZ::InternalData::sigma_imj_grads
std::vector< std::vector< std::vector< double > > > sigma_imj_grads
Definition: fe_nedelec_sz.h:295
Quadrature
Definition: quadrature.h:85
FE_NedelecSZ::FE_NedelecSZ
FE_NedelecSZ(const unsigned int degree)
Definition: fe_nedelec_sz.cc:24
FE_NedelecSZ::InternalData::edge_sigma_grads
std::vector< std::vector< double > > edge_sigma_grads
Definition: fe_nedelec_sz.h:322
FE_NedelecSZ::InternalData::sigma_imj_values
std::vector< std::vector< std::vector< double > > > sigma_imj_values
Definition: fe_nedelec_sz.h:278