deal.II version GIT relicensing-1962-gd05d5f3b38 2024-10-10 14: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
Static Public Member Functions | List of all members
internal::FEEvaluationImplBasisChange< variant, quantity, dim, basis_size_1, basis_size_2 > Struct Template Reference

#include <deal.II/matrix_free/evaluation_kernels.h>

Static Public Member Functions

template<typename Number , typename Number2 >
static void do_forward (const unsigned int n_components, const AlignedVector< Number2 > &transformation_matrix, const Number *values_in, Number *values_out, const unsigned int basis_size_1_variable=numbers::invalid_unsigned_int, const unsigned int basis_size_2_variable=numbers::invalid_unsigned_int)
 
template<typename Number , typename Number2 >
static void do_backward (const unsigned int n_components, const AlignedVector< Number2 > &transformation_matrix, const bool add_into_result, Number *values_in, Number *values_out, const unsigned int basis_size_1_variable=numbers::invalid_unsigned_int, const unsigned int basis_size_2_variable=numbers::invalid_unsigned_int)
 
template<typename Number , typename Number2 >
static void do_mass (const unsigned int n_components, const AlignedVector< Number2 > &transformation_matrix, const AlignedVector< Number > &coefficients, const Number *values_in, Number *scratch_data, Number *values_out)
 

Detailed Description

template<EvaluatorVariant variant, EvaluatorQuantity quantity, int dim, int basis_size_1, int basis_size_2>
struct internal::FEEvaluationImplBasisChange< variant, quantity, dim, basis_size_1, basis_size_2 >

This struct implements the change between two different bases. This is an ingredient in the FEEvaluationImplTransformToCollocation class where we first transform to the appropriate basis where we can compute the derivative through collocation techniques.

This class allows for dimension-independent application of the operation, implemented by template recursion. It has been tested up to 6d.

Definition at line 777 of file evaluation_kernels.h.

Member Function Documentation

◆ do_forward()

template<EvaluatorVariant variant, EvaluatorQuantity quantity, int dim, int basis_size_1, int basis_size_2>
template<typename Number , typename Number2 >
static void internal::FEEvaluationImplBasisChange< variant, quantity, dim, basis_size_1, basis_size_2 >::do_forward ( const unsigned int  n_components,
const AlignedVector< Number2 > &  transformation_matrix,
const Number *  values_in,
Number *  values_out,
const unsigned int  basis_size_1_variable = numbers::invalid_unsigned_int,
const unsigned int  basis_size_2_variable = numbers::invalid_unsigned_int 
)
inlinestatic

This applies the transformation that contracts over the rows of the coefficient array, generating values along the columns of the coefficient array.

Parameters
n_componentsThe number of vector components.
transformation_matrixThe coefficient matrix handed in as a vector, using basis_size_1 rows and basis_size_2 columns if interpreted as a matrix.
values_inThe array of the input of size basis_size_1^dim. It may alias with values_out
values_outThe array of size basis_size_2^dim where the results of the transformation are stored. It may alias with the values_in array.
basis_size_1_variableIn case the template argument basis_size_1 is zero, the size of the first basis can alternatively be passed in as a run time argument. The template argument takes precedence in case it is nonzero for efficiency reasons.
basis_size_2_variableIn case the template argument basis_size_1 is zero, the size of the second basis can alternatively be passed in as a run time argument.

Definition at line 809 of file evaluation_kernels.h.

◆ do_backward()

template<EvaluatorVariant variant, EvaluatorQuantity quantity, int dim, int basis_size_1, int basis_size_2>
template<typename Number , typename Number2 >
static void internal::FEEvaluationImplBasisChange< variant, quantity, dim, basis_size_1, basis_size_2 >::do_backward ( const unsigned int  n_components,
const AlignedVector< Number2 > &  transformation_matrix,
const bool  add_into_result,
Number *  values_in,
Number *  values_out,
const unsigned int  basis_size_1_variable = numbers::invalid_unsigned_int,
const unsigned int  basis_size_2_variable = numbers::invalid_unsigned_int 
)
inlinestatic

This applies the transformation that contracts over the columns of the coefficient array, generating values along the rows of the coefficient array.

Parameters
n_componentsThe number of vector components.
transformation_matrixThe coefficient matrix handed in as a vector, using basis_size_1 rows and basis_size_2 columns if interpreted as a matrix.
add_into_resultDefine whether the result should be added into the array values_out (if true) or overwrite the previous content. The result is undefined in case values_in and values_out point to the same array and add_into_result is true, in which case an exception is thrown.
values_inThe array of the input of size basis_size_2^dim. It may alias with values_out. Note that the previous content of values_in is overwritten within the function.
values_outThe array of size basis_size_1^dim where the results of the transformation are stored. It may alias with the values_in array.
basis_size_1_variableIn case the template argument basis_size_1 is zero, the size of the first basis can alternatively be passed in as a run time argument. The template argument takes precedence in case it is nonzero for efficiency reasons.
basis_size_2_variableIn case the template argument basis_size_1 is zero, the size of the second basis can alternatively be passed in as a run time argument.

Definition at line 930 of file evaluation_kernels.h.

◆ do_mass()

template<EvaluatorVariant variant, EvaluatorQuantity quantity, int dim, int basis_size_1, int basis_size_2>
template<typename Number , typename Number2 >
static void internal::FEEvaluationImplBasisChange< variant, quantity, dim, basis_size_1, basis_size_2 >::do_mass ( const unsigned int  n_components,
const AlignedVector< Number2 > &  transformation_matrix,
const AlignedVector< Number > &  coefficients,
const Number *  values_in,
Number *  scratch_data,
Number *  values_out 
)
inlinestatic

This operation applies a mass-matrix-like operation, consisting of a do_forward() operation, multiplication by the coefficients in the quadrature points, and the do_backward() operation.

Parameters
n_componentsThe number of vector components.
transformation_matrixThe coefficient matrix handed in as a vector, using basis_size_1 rows and basis_size_2 columns if interpreted as a matrix.
coefficientsThe array of coefficients by which the result is multiplied. Its length must be either basis_size_2^dim or n_components*basis_size_2^dim.
values_inThe array of the input of size basis_size_2^dim. It may alias with values_out.
scratch_dataArray to hold temporary data during the operation. Must be of length basis_size_2^dim.
values_outThe array of size basis_size_1^dim where the results of the transformation are stored. It may alias with the values_in array.

Definition at line 1080 of file evaluation_kernels.h.


The documentation for this struct was generated from the following file: