Reference documentation for deal.II version GIT 3779fa9eb4 2023-09-28 13:00:02+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\}}\)
Classes | Namespaces | Enumerations | Functions
tensor_product_kernels.h File Reference
#include <deal.II/base/config.h>
#include <deal.II/base/aligned_vector.h>
#include <deal.II/base/ndarray.h>
#include <deal.II/base/polynomial.h>
#include <deal.II/base/utilities.h>
#include <deal.II/matrix_free/shape_info.h>

Go to the source code of this file.

Classes

struct  internal::EvaluatorTensorProduct< variant, dim, n_rows, n_columns, Number, Number2 >
 
struct  internal::EvaluatorTensorProduct< variant, dim, 0, 0, Number, Number2 >
 
struct  internal::EvaluatorTensorProductAnisotropic< dim, fe_degree, n_q_points_1d, contract_over_rows, symmetric_evaluate >
 
struct  internal::ProductTypeNoPoint< Number, Number2 >
 
struct  internal::ProductTypeNoPoint< Point< dim, Number >, Number2 >
 

Namespaces

 internal
 

Enumerations

enum  internal::EvaluatorVariant { internal::evaluate_general , internal::evaluate_symmetric , internal::evaluate_evenodd , internal::evaluate_symmetric_hierarchical }
 
enum class  internal::EvaluatorQuantity { internal::value , internal::gradient , internal::hessian }
 

Functions

template<EvaluatorVariant variant, EvaluatorQuantity quantity, int n_rows, int n_columns, int stride_in, int stride_out, bool transpose_matrix, bool add, typename Number , typename Number2 >
std::enable_if_t<(variant==evaluate_general), void > internal::apply_matrix_vector_product (const Number2 *matrix, const Number *in, Number *out)
 
template<EvaluatorVariant variant, EvaluatorQuantity quantity, bool transpose_matrix, bool add, typename Number , typename Number2 >
std::enable_if_t<(variant==evaluate_general), void > internal::apply_matrix_vector_product (const Number2 *matrix, const Number *in, Number *out, const int n_rows, const int n_columns, const int stride_in, const int stride_out)
 
template<EvaluatorVariant variant, EvaluatorQuantity quantity, int n_rows, int n_columns, int stride_in, int stride_out, bool transpose_matrix, bool add, typename Number , typename Number2 >
std::enable_if_t<(variant==evaluate_symmetric), void > internal::apply_matrix_vector_product (const Number2 *matrix, const Number *in, Number *out)
 
template<EvaluatorVariant variant, EvaluatorQuantity quantity, int n_rows_static, int n_columns_static, int stride_in_static, int stride_out_static, bool transpose_matrix, bool add, typename Number , typename Number2 >
std::enable_if_t<(variant==evaluate_evenodd), void > internal::apply_matrix_vector_product (const Number2 *DEAL_II_RESTRICT matrix, const Number *in, Number *out, int n_rows_runtime=0, int n_columns_runtime=0, int stride_in_runtime=0, int stride_out_runtime=0)
 
template<EvaluatorVariant variant, EvaluatorQuantity quantity, bool transpose_matrix, bool add, typename Number , typename Number2 >
std::enable_if_t<(variant==evaluate_evenodd), void > internal::apply_matrix_vector_product (const Number2 *matrix, const Number *in, Number *out, int n_rows, int n_columns, int stride_in, int stride_out)
 
template<EvaluatorVariant variant, EvaluatorQuantity quantity, int n_rows, int n_columns, int stride_in, int stride_out, bool transpose_matrix, bool add, typename Number , typename Number2 >
std::enable_if_t<(variant==evaluate_symmetric_hierarchical), void > internal::apply_matrix_vector_product (const Number2 *matrix, const Number *in, Number *out)
 
template<int n_rows_template, int stride_template, bool contract_onto_face, bool add, int max_derivative, typename Number , typename Number2 >
std::enable_if_t< contract_onto_face, void > internal::interpolate_to_face (const Number2 *shape_values, const std::array< int, 2 > &n_blocks, const std::array< int, 2 > &steps, const Number *input, Number *DEAL_II_RESTRICT output, const int n_rows_runtime=0, const int stride_runtime=1)
 
constexpr bool internal::use_collocation_evaluation (const unsigned int fe_degree, const unsigned int n_q_points_1d)
 
template<int n_rows_template, int stride_template, bool contract_onto_face, bool add, int max_derivative, typename Number , typename Number2 >
std::enable_if_t<!contract_onto_face, void > internal::interpolate_to_face (const Number2 *shape_values, const std::array< int, 2 > &n_blocks, const std::array< int, 2 > &steps, const Number *input, Number *DEAL_II_RESTRICT output, const int n_rows_runtime=0, const int stride_runtime=1)
 
template<int dim, typename Number >
void internal::compute_values_of_array (::ndarray< Number, 2, dim > *shapes, const std::vector< Polynomials::Polynomial< double >> &poly, const Point< dim, Number > &p, const unsigned int derivative=1)
 
template<typename Number >
void internal::compute_values_of_array (::ndarray< Number, 2, 0 > *, const std::vector< Polynomials::Polynomial< double >> &, const Point< 0, Number > &, const unsigned int)
 
template<int dim, int length, typename Number2 , typename Number , int n_values = 1, bool do_renumber = true>
std::array< typename ProductTypeNoPoint< Number, Number2 >::type, 2+n_values > internal::do_interpolate_xy (const Number *values, const std::vector< unsigned int > &renumber, const ::ndarray< Number2, 2, dim > *shapes, const int n_shapes_runtime, int &i)
 
template<int dim, typename Number , typename Number2 , int n_values = 1, bool do_renumber = true>
std::array< typename ProductTypeNoPoint< Number, Number2 >::type, dim+n_values > internal::evaluate_tensor_product_value_and_gradient_shapes (const ::ndarray< Number2, 2, dim > *shapes, const int n_shapes, const Number *values, const std::vector< unsigned int > &renumber={})
 
template<int dim, typename Number , typename Number2 , int n_values = 1, int stride = 1>
std::array< typename ProductTypeNoPoint< Number, Number2 >::type, dim+n_values > internal::evaluate_tensor_product_value_and_gradient_linear (const Number *values, const Point< dim, Number2 > &p)
 
template<int dim, typename Number , typename Number2 >
std::pair< typename ProductTypeNoPoint< Number, Number2 >::type, Tensor< 1, dim, typename ProductTypeNoPoint< Number, Number2 >::type > > internal::evaluate_tensor_product_value_and_gradient (const std::vector< Polynomials::Polynomial< double >> &poly, const std::vector< Number > &values, const Point< dim, Number2 > &p, const bool d_linear=false, const std::vector< unsigned int > &renumber={})
 
template<int dim, int length, typename Number2 , typename Number , bool do_renumber = true>
ProductTypeNoPoint< Number, Number2 >::type internal::do_interpolate_xy_value (const Number *values, const std::vector< unsigned int > &renumber, const ::ndarray< Number2, 2, dim > *shapes, const int n_shapes_runtime, int &i)
 
template<int dim, typename Number , typename Number2 , bool do_renumber = true>
ProductTypeNoPoint< Number, Number2 >::type internal::evaluate_tensor_product_value_shapes (const ::ndarray< Number2, 2, dim > *shapes, const int n_shapes, const Number *values, const std::vector< unsigned int > &renumber={})
 
template<int dim, typename Number , typename Number2 , int stride = 1>
ProductTypeNoPoint< Number, Number2 >::type internal::evaluate_tensor_product_value_linear (const Number *values, const Point< dim, Number2 > &p)
 
template<int dim, typename Number , typename Number2 >
ProductTypeNoPoint< Number, Number2 >::type internal::evaluate_tensor_product_value (const std::vector< Polynomials::Polynomial< double >> &poly, const std::vector< Number > &values, const Point< dim, Number2 > &p, const bool d_linear=false, const std::vector< unsigned int > &renumber={})
 
template<int derivative_order, typename Number , typename Number2 >
Tensor< 1, 1, typename ProductTypeNoPoint< Number, Number2 >::type > internal::evaluate_tensor_product_higher_derivatives (const std::vector< Polynomials::Polynomial< double >> &poly, const std::vector< Number > &values, const Point< 1, Number2 > &p, const std::vector< unsigned int > &renumber={})
 
template<int derivative_order, typename Number , typename Number2 >
Tensor< 1, derivative_order+1, typename ProductTypeNoPoint< Number, Number2 >::type > internal::evaluate_tensor_product_higher_derivatives (const std::vector< Polynomials::Polynomial< double >> &poly, const std::vector< Number > &values, const Point< 2, Number2 > &p, const std::vector< unsigned int > &renumber={})
 
template<int derivative_order, typename Number , typename Number2 >
Tensor< 1,((derivative_order+1) *(derivative_order+2))/2, typename ProductTypeNoPoint< Number, Number2 >::type > internal::evaluate_tensor_product_higher_derivatives (const std::vector< Polynomials::Polynomial< double >> &poly, const std::vector< Number > &values, const Point< 3, Number2 > &p, const std::vector< unsigned int > &renumber={})
 
template<int dim, typename Number , typename Number2 >
SymmetricTensor< 2, dim, typename ProductTypeNoPoint< Number, Number2 >::type > internal::evaluate_tensor_product_hessian (const std::vector< Polynomials::Polynomial< double >> &poly, const std::vector< Number > &values, const Point< dim, Number2 > &p, const std::vector< unsigned int > &renumber={})
 
template<int dim, int length, typename Number2 , typename Number , bool add, int n_values = 1>
void internal::do_apply_test_functions_xy (Number2 *values, const ::ndarray< Number, 2, dim > *shapes, const std::array< Number2, 2+n_values > &test_grads_value, const int n_shapes_runtime, int &i)
 
template<int dim, typename Number , typename Number2 , bool add, int n_values = 1>
void internal::integrate_add_tensor_product_value_and_gradient_shapes (const ::ndarray< Number, 2, dim > *shapes, const int n_shapes, const Number2 *value, const Tensor< 1, dim, Number2 > &gradient, Number2 *values)
 
template<int dim, typename Number , typename Number2 , bool add, int n_values = 1>
void internal::integrate_add_tensor_product_value_and_gradient_linear (const Number2 *value, const Tensor< 1, dim, Number2 > &gradient, Number2 *values, const Point< dim, Number > &p)
 
template<bool is_linear, int dim, typename Number , typename Number2 , int n_values = 1>
void internal::integrate_tensor_product_value_and_gradient (const ::ndarray< Number, 2, dim > *shapes, const unsigned int n_shapes, const Number2 *value, const Tensor< 1, dim, Number2 > &gradient, Number2 *values, const Point< dim, Number > &p, const bool do_add)
 
template<int dim, int length, typename Number2 , typename Number , bool add>
void internal::do_apply_test_functions_xy_value (Number2 *values, const ::ndarray< Number, 2, dim > *shapes, const Number2 &test_value, const int n_shapes_runtime, int &i)
 
template<int dim, typename Number , typename Number2 , bool add>
void internal::integrate_add_tensor_product_value_shapes (const ::ndarray< Number, 2, dim > *shapes, const int n_shapes, const Number2 &value, Number2 *values)
 
template<int dim, typename Number , typename Number2 , bool add>
void internal::integrate_add_tensor_product_value_linear (const Number2 &value, Number2 *values, const Point< dim, Number > &p)
 
template<bool is_linear, int dim, typename Number , typename Number2 >
void internal::integrate_tensor_product_value (const ::ndarray< Number, 2, dim > *shapes, const unsigned int n_shapes, const Number2 &value, Number2 *values, const Point< dim, Number > &p, const bool do_add)
 
template<int dim, int n_points_1d_template, typename Number >
void internal::weight_fe_q_dofs_by_entity (const Number *weights, const unsigned int n_components, const int n_points_1d_non_template, Number *data)
 
template<int dim, int n_points_1d_template, typename Number >
void internal::weight_fe_q_dofs_by_entity_shifted (const Number *weights, const unsigned int n_components, const int n_points_1d_non_template, Number *data)
 
template<int dim, int n_points_1d_template, typename Number >
bool internal::compute_weights_fe_q_dofs_by_entity (const Number *data, const unsigned int n_components, const int n_points_1d_non_template, Number *weights)
 
template<int dim, int n_points_1d_template, typename Number >
bool internal::compute_weights_fe_q_dofs_by_entity_shifted (const Number *data, const unsigned int n_components, const int n_points_1d_non_template, Number *weights)