deal.II version GIT relicensing-2206-gaa53ff9447 2024-12-02 09:10:00+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
Classes | Functions
internal::MappingQImplementation Namespace Reference

Classes

class  InverseQuadraticApproximation
 

Functions

template<int dim>
std::vector< Point< dim > > unit_support_points (const std::vector< Point< 1 > > &line_support_points, const std::vector< unsigned int > &renumbering)
 
inline ::Table< 2, double > compute_support_point_weights_on_quad (const unsigned int polynomial_degree)
 
inline ::Table< 2, double > compute_support_point_weights_on_hex (const unsigned int polynomial_degree)
 
std::vector<::Table< 2, double > > compute_support_point_weights_perimeter_to_interior (const unsigned int polynomial_degree, const unsigned int dim)
 
template<int dim>
inline ::Table< 2, double > compute_support_point_weights_cell (const unsigned int polynomial_degree)
 
template<int dim, int spacedim>
Point< spacedim > compute_mapped_location_of_point (const typename ::MappingQ< dim, spacedim >::InternalData &data)
 
template<int dim, int spacedim, typename Number >
Point< dim, Number > do_transform_real_to_unit_cell_internal (const Point< spacedim, Number > &p, const Point< dim, Number > &initial_p_unit, const ArrayView< const Point< spacedim > > &points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber, const bool print_iterations_to_deallog=false)
 
template<int dim>
Point< dim > do_transform_real_to_unit_cell_internal_codim1 (const Point< dim+1 > &p, const Point< dim > &initial_p_unit, const ArrayView< const Point< dim+1 > > &points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber)
 
template<int dim, int spacedim>
void maybe_update_q_points_Jacobians_and_grads_tensor (const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, std::vector< Point< spacedim > > &quadrature_points, std::vector< DerivativeForm< 1, dim, spacedim > > &jacobians, std::vector< DerivativeForm< 1, spacedim, dim > > &inverse_jacobians, std::vector< DerivativeForm< 2, dim, spacedim > > &jacobian_grads)
 
template<int dim, int spacedim>
void maybe_update_q_points_Jacobians_generic (const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< Point< spacedim > > &quadrature_points, std::vector< DerivativeForm< 1, dim, spacedim > > &jacobians, std::vector< DerivativeForm< 1, spacedim, dim > > &inverse_jacobians)
 
template<int dim, int spacedim>
void maybe_update_jacobian_grads (const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< DerivativeForm< 2, dim, spacedim > > &jacobian_grads)
 
template<int dim, int spacedim>
void maybe_update_jacobian_pushed_forward_grads (const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< Tensor< 3, spacedim > > &jacobian_pushed_forward_grads)
 
template<int dim, int spacedim, int length_tensor>
DerivativeForm< 3, dim, spacedim > expand_3rd_derivatives (const Tensor< 1, length_tensor, Tensor< 1, spacedim > > &compressed)
 
template<int dim, int spacedim>
void maybe_update_jacobian_2nd_derivatives (const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< DerivativeForm< 3, dim, spacedim > > &jacobian_2nd_derivatives)
 
template<int dim, int spacedim>
void maybe_update_jacobian_pushed_forward_2nd_derivatives (const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< Tensor< 4, spacedim > > &jacobian_pushed_forward_2nd_derivatives)
 
template<int dim, int spacedim, int length_tensor>
DerivativeForm< 4, dim, spacedim > expand_4th_derivatives (const Tensor< 1, length_tensor, Tensor< 1, spacedim > > &compressed)
 
template<int dim, int spacedim>
void maybe_update_jacobian_3rd_derivatives (const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< DerivativeForm< 4, dim, spacedim > > &jacobian_3rd_derivatives)
 
template<int dim, int spacedim>
void maybe_update_jacobian_pushed_forward_3rd_derivatives (const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< Tensor< 5, spacedim > > &jacobian_pushed_forward_3rd_derivatives)
 
template<int dim, int spacedim>
void maybe_compute_face_data (const ::MappingQ< dim, spacedim > &mapping, const typename ::Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no, const unsigned int n_q_points, const std::vector< double > &weights, const typename ::MappingQ< dim, spacedim >::InternalData &data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data)
 
template<int dim, int spacedim>
void do_fill_fe_face_values (const ::MappingQ< dim, spacedim > &mapping, const typename ::Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no, const typename QProjector< dim >::DataSetDescriptor data_set, const Quadrature< dim - 1 > &quadrature, const typename ::MappingQ< dim, spacedim >::InternalData &data, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data)
 
template<int dim, int spacedim, int rank>
void transform_fields (const ArrayView< const Tensor< rank, dim > > &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< rank, spacedim > > &output)
 
template<int dim, int spacedim, int rank>
void transform_gradients (const ArrayView< const Tensor< rank, dim > > &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< rank, spacedim > > &output)
 
template<int dim, int spacedim>
void transform_hessians (const ArrayView< const Tensor< 3, dim > > &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< 3, spacedim > > &output)
 
template<int dim, int spacedim, int rank>
void transform_differential_forms (const ArrayView< const DerivativeForm< rank, dim, spacedim > > &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< rank+1, spacedim > > &output)
 

Detailed Description

Internal namespace to implement methods of MappingQ, such as the evaluation of the mapping and the transformation between real and unit cell.

Function Documentation

◆ unit_support_points()

template<int dim>
std::vector< Point< dim > > internal::MappingQImplementation::unit_support_points ( const std::vector< Point< 1 > > &  line_support_points,
const std::vector< unsigned int > &  renumbering 
)

This function generates the reference cell support points from the 1d support points by expanding the tensor product.

Definition at line 217 of file mapping_q_internal.h.

◆ compute_support_point_weights_on_quad()

inline ::Table< 2, double > internal::MappingQImplementation::compute_support_point_weights_on_quad ( const unsigned int  polynomial_degree)

This function is needed by the constructor of MappingQ<dim,spacedim> for dim= 2 and 3.

For the definition of the support_point_weights_on_quad please refer to the description of TransfiniteInterpolationManifold.

Definition at line 247 of file mapping_q_internal.h.

◆ compute_support_point_weights_on_hex()

inline ::Table< 2, double > internal::MappingQImplementation::compute_support_point_weights_on_hex ( const unsigned int  polynomial_degree)

This function is needed by the constructor of MappingQ<3>.

For the definition of the support_point_weights_on_quad please refer to the description of TransfiniteInterpolationManifold.

Definition at line 299 of file mapping_q_internal.h.

◆ compute_support_point_weights_perimeter_to_interior()

std::vector<::Table< 2, double > > internal::MappingQImplementation::compute_support_point_weights_perimeter_to_interior ( const unsigned int  polynomial_degree,
const unsigned int  dim 
)
inline

This function collects the output of compute_support_point_weights_on_{quad,hex} in a single data structure.

Definition at line 388 of file mapping_q_internal.h.

◆ compute_support_point_weights_cell()

template<int dim>
inline ::Table< 2, double > internal::MappingQImplementation::compute_support_point_weights_cell ( const unsigned int  polynomial_degree)

Collects all interior points for the various dimensions.

Definition at line 423 of file mapping_q_internal.h.

◆ compute_mapped_location_of_point()

template<int dim, int spacedim>
Point< spacedim > internal::MappingQImplementation::compute_mapped_location_of_point ( const typename ::MappingQ< dim, spacedim >::InternalData &  data)
inline

Using the relative weights of the shape functions evaluated at one point on the reference cell (and stored in data.shape_values and accessed via data.shape(0,i)) and the locations of mapping support points (stored in data.mapping_support_points), compute the mapped location of that point in real space.

Definition at line 455 of file mapping_q_internal.h.

◆ do_transform_real_to_unit_cell_internal()

template<int dim, int spacedim, typename Number >
Point< dim, Number > internal::MappingQImplementation::do_transform_real_to_unit_cell_internal ( const Point< spacedim, Number > &  p,
const Point< dim, Number > &  initial_p_unit,
const ArrayView< const Point< spacedim > > &  points,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber,
const bool  print_iterations_to_deallog = false 
)
inline

Implementation of transform_real_to_unit_cell for either type double or VectorizedArray<double>

Definition at line 477 of file mapping_q_internal.h.

◆ do_transform_real_to_unit_cell_internal_codim1()

template<int dim>
Point< dim > internal::MappingQImplementation::do_transform_real_to_unit_cell_internal_codim1 ( const Point< dim+1 > &  p,
const Point< dim > &  initial_p_unit,
const ArrayView< const Point< dim+1 > > &  points,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber 
)
inline

Implementation of transform_real_to_unit_cell for dim==spacedim-1

Definition at line 740 of file mapping_q_internal.h.

◆ maybe_update_q_points_Jacobians_and_grads_tensor()

template<int dim, int spacedim>
void internal::MappingQImplementation::maybe_update_q_points_Jacobians_and_grads_tensor ( const CellSimilarity::Similarity  cell_similarity,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
std::vector< Point< spacedim > > &  quadrature_points,
std::vector< DerivativeForm< 1, dim, spacedim > > &  jacobians,
std::vector< DerivativeForm< 1, spacedim, dim > > &  inverse_jacobians,
std::vector< DerivativeForm< 2, dim, spacedim > > &  jacobian_grads 
)
inline

In case the quadrature formula is a tensor product, this is a replacement for maybe_compute_q_points(), maybe_update_Jacobians() and maybe_update_jacobian_grads()

Definition at line 1062 of file mapping_q_internal.h.

◆ maybe_update_q_points_Jacobians_generic()

template<int dim, int spacedim>
void internal::MappingQImplementation::maybe_update_q_points_Jacobians_generic ( const CellSimilarity::Similarity  cell_similarity,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
const ArrayView< const Point< dim > > &  unit_points,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber_lexicographic_to_hierarchic,
std::vector< Point< spacedim > > &  quadrature_points,
std::vector< DerivativeForm< 1, dim, spacedim > > &  jacobians,
std::vector< DerivativeForm< 1, spacedim, dim > > &  inverse_jacobians 
)
inline

Definition at line 1244 of file mapping_q_internal.h.

◆ maybe_update_jacobian_grads()

template<int dim, int spacedim>
void internal::MappingQImplementation::maybe_update_jacobian_grads ( const CellSimilarity::Similarity  cell_similarity,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
const ArrayView< const Point< dim > > &  unit_points,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber_lexicographic_to_hierarchic,
std::vector< DerivativeForm< 2, dim, spacedim > > &  jacobian_grads 
)
inline

Update the Hessian of the transformation from unit to real cell, the Jacobian gradients.

Skip the computation if possible as indicated by the first argument.

Definition at line 1405 of file mapping_q_internal.h.

◆ maybe_update_jacobian_pushed_forward_grads()

template<int dim, int spacedim>
void internal::MappingQImplementation::maybe_update_jacobian_pushed_forward_grads ( const CellSimilarity::Similarity  cell_similarity,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
const ArrayView< const Point< dim > > &  unit_points,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber_lexicographic_to_hierarchic,
std::vector< Tensor< 3, spacedim > > &  jacobian_pushed_forward_grads 
)
inline

Update the Hessian of the transformation from unit to real cell, the Jacobian gradients, pushed forward to the real cell coordinates.

Skip the computation if possible as indicated by the first argument.

Definition at line 1447 of file mapping_q_internal.h.

◆ expand_3rd_derivatives()

template<int dim, int spacedim, int length_tensor>
DerivativeForm< 3, dim, spacedim > internal::MappingQImplementation::expand_3rd_derivatives ( const Tensor< 1, length_tensor, Tensor< 1, spacedim > > &  compressed)
inline

Definition at line 1510 of file mapping_q_internal.h.

◆ maybe_update_jacobian_2nd_derivatives()

template<int dim, int spacedim>
void internal::MappingQImplementation::maybe_update_jacobian_2nd_derivatives ( const CellSimilarity::Similarity  cell_similarity,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
const ArrayView< const Point< dim > > &  unit_points,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber_lexicographic_to_hierarchic,
std::vector< DerivativeForm< 3, dim, spacedim > > &  jacobian_2nd_derivatives 
)
inline

Update the third derivatives of the transformation from unit to real cell, the Jacobian hessians.

Skip the computation if possible as indicated by the first argument.

Definition at line 1562 of file mapping_q_internal.h.

◆ maybe_update_jacobian_pushed_forward_2nd_derivatives()

template<int dim, int spacedim>
void internal::MappingQImplementation::maybe_update_jacobian_pushed_forward_2nd_derivatives ( const CellSimilarity::Similarity  cell_similarity,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
const ArrayView< const Point< dim > > &  unit_points,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber_lexicographic_to_hierarchic,
std::vector< Tensor< 4, spacedim > > &  jacobian_pushed_forward_2nd_derivatives 
)
inline

Update the Hessian of the Hessian of the transformation from unit to real cell, the Jacobian Hessian gradients, pushed forward to the real cell coordinates.

Skip the computation if possible as indicated by the first argument.

Definition at line 1602 of file mapping_q_internal.h.

◆ expand_4th_derivatives()

template<int dim, int spacedim, int length_tensor>
DerivativeForm< 4, dim, spacedim > internal::MappingQImplementation::expand_4th_derivatives ( const Tensor< 1, length_tensor, Tensor< 1, spacedim > > &  compressed)
inline

Definition at line 1683 of file mapping_q_internal.h.

◆ maybe_update_jacobian_3rd_derivatives()

template<int dim, int spacedim>
void internal::MappingQImplementation::maybe_update_jacobian_3rd_derivatives ( const CellSimilarity::Similarity  cell_similarity,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
const ArrayView< const Point< dim > > &  unit_points,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber_lexicographic_to_hierarchic,
std::vector< DerivativeForm< 4, dim, spacedim > > &  jacobian_3rd_derivatives 
)
inline

Update the fourth derivatives of the transformation from unit to real cell, the Jacobian hessian gradients.

Skip the computation if possible as indicated by the first argument.

Definition at line 1749 of file mapping_q_internal.h.

◆ maybe_update_jacobian_pushed_forward_3rd_derivatives()

template<int dim, int spacedim>
void internal::MappingQImplementation::maybe_update_jacobian_pushed_forward_3rd_derivatives ( const CellSimilarity::Similarity  cell_similarity,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
const ArrayView< const Point< dim > > &  unit_points,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber_lexicographic_to_hierarchic,
std::vector< Tensor< 5, spacedim > > &  jacobian_pushed_forward_3rd_derivatives 
)
inline

Update the Hessian gradient of the transformation from unit to real cell, the Jacobian Hessians, pushed forward to the real cell coordinates.

Skip the computation if possible as indicated by the first argument.

Definition at line 1789 of file mapping_q_internal.h.

◆ maybe_compute_face_data()

template<int dim, int spacedim>
void internal::MappingQImplementation::maybe_compute_face_data ( const ::MappingQ< dim, spacedim > &  mapping,
const typename ::Triangulation< dim, spacedim >::cell_iterator &  cell,
const unsigned int  face_no,
const unsigned int  subface_no,
const unsigned int  n_q_points,
const std::vector< double > &  weights,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &  output_data 
)
inline

Depending on what information is called for in the update flags of the data object, compute the various pieces of information that is required by the fill_fe_face_values() and fill_fe_subface_values() functions. This function simply unifies the work that would be done by those two functions.

The resulting data is put into the output_data argument.

Definition at line 1900 of file mapping_q_internal.h.

◆ do_fill_fe_face_values()

template<int dim, int spacedim>
void internal::MappingQImplementation::do_fill_fe_face_values ( const ::MappingQ< dim, spacedim > &  mapping,
const typename ::Triangulation< dim, spacedim >::cell_iterator &  cell,
const unsigned int  face_no,
const unsigned int  subface_no,
const typename QProjector< dim >::DataSetDescriptor  data_set,
const Quadrature< dim - 1 > &  quadrature,
const typename ::MappingQ< dim, spacedim >::InternalData &  data,
const std::vector< Polynomials::Polynomial< double > > &  polynomials_1d,
const std::vector< unsigned int > &  renumber_lexicographic_to_hierarchic,
internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &  output_data 
)
inline

Do the work of MappingQ::fill_fe_face_values() and MappingQ::fill_fe_subface_values() in a generic way, using the 'data_set' to differentiate whether we will work on a face (and if so, which one) or subface.

Definition at line 2052 of file mapping_q_internal.h.

◆ transform_fields()

template<int dim, int spacedim, int rank>
void internal::MappingQImplementation::transform_fields ( const ArrayView< const Tensor< rank, dim > > &  input,
const MappingKind  mapping_kind,
const typename Mapping< dim, spacedim >::InternalDataBase &  mapping_data,
const ArrayView< Tensor< rank, spacedim > > &  output 
)
inline

Implementation of MappingQ::transform() for generic tensors.

Definition at line 2150 of file mapping_q_internal.h.

◆ transform_gradients()

template<int dim, int spacedim, int rank>
void internal::MappingQImplementation::transform_gradients ( const ArrayView< const Tensor< rank, dim > > &  input,
const MappingKind  mapping_kind,
const typename Mapping< dim, spacedim >::InternalDataBase &  mapping_data,
const ArrayView< Tensor< rank, spacedim > > &  output 
)
inline

Implementation of MappingQ::transform() for gradients.

Definition at line 2230 of file mapping_q_internal.h.

◆ transform_hessians()

template<int dim, int spacedim>
void internal::MappingQImplementation::transform_hessians ( const ArrayView< const Tensor< 3, dim > > &  input,
const MappingKind  mapping_kind,
const typename Mapping< dim, spacedim >::InternalDataBase &  mapping_data,
const ArrayView< Tensor< 3, spacedim > > &  output 
)
inline

Implementation of MappingQ::transform() for hessians.

Definition at line 2332 of file mapping_q_internal.h.

◆ transform_differential_forms()

template<int dim, int spacedim, int rank>
void internal::MappingQImplementation::transform_differential_forms ( const ArrayView< const DerivativeForm< rank, dim, spacedim > > &  input,
const MappingKind  mapping_kind,
const typename Mapping< dim, spacedim >::InternalDataBase &  mapping_data,
const ArrayView< Tensor< rank+1, spacedim > > &  output 
)
inline

Implementation of MappingQ::transform() for DerivativeForm arguments.

Definition at line 2509 of file mapping_q_internal.h.