Reference documentation for deal.II version 9.5.0
|
#include <deal.II/matrix_free/tensor_product_kernels.h>
Public Member Functions | |
EvaluatorTensorProduct () | |
EvaluatorTensorProduct (const AlignedVector< Number2 > &shape_values) | |
EvaluatorTensorProduct (const AlignedVector< Number2 > &shape_values, const AlignedVector< Number2 > &shape_gradients, const AlignedVector< Number2 > &shape_hessians, const unsigned int dummy1=0, const unsigned int dummy2=0) | |
template<int direction, bool contract_over_rows, bool add> | |
void | values (const Number in[], Number out[]) const |
template<int direction, bool contract_over_rows, bool add> | |
void | gradients (const Number in[], Number out[]) const |
template<int direction, bool contract_over_rows, bool add> | |
void | hessians (const Number in[], Number out[]) const |
template<int direction, bool contract_over_rows, bool add> | |
void | values_one_line (const Number in[], Number out[]) const |
template<int direction, bool contract_over_rows, bool add> | |
void | gradients_one_line (const Number in[], Number out[]) const |
template<int direction, bool contract_over_rows, bool add> | |
void | hessians_one_line (const Number in[], Number out[]) const |
Static Public Member Functions | |
template<int direction, bool contract_over_rows, bool add, int type, bool one_line = false> | |
static void | apply (const Number2 *DEAL_II_RESTRICT shape_data, const Number *in, Number *out) |
Static Public Attributes | |
static constexpr unsigned int | n_rows_of_product |
static constexpr unsigned int | n_columns_of_product |
Private Attributes | |
const Number2 * | shape_values |
const Number2 * | shape_gradients |
const Number2 * | shape_hessians |
Internal evaluator for 1d-3d shape function using the tensor product form of the basis functions.
This class implements a different approach to the symmetric case for values, gradients, and Hessians also treated with the above functions: It is possible to reduce the cost per dimension from N^2 to N^2/2, where N is the number of 1d dofs (there are only N^2/2 different entries in the shape matrix, so this is plausible). The approach is based on the idea of applying the operator on the even and odd part of the input vectors separately, given that the shape functions evaluated on quadrature points are symmetric. This method is presented e.g. in the book "Implementing Spectral Methods for Partial Differential Equations" by David A. Kopriva, Springer, 2009, section 3.5.3 (Even-Odd-Decomposition). Even though the experiments in the book say that the method is not efficient for N<20, it is more efficient in the context where the loop bounds are compile-time constants (templates).
dim | Space dimension in which this class is applied |
n_rows | Number of rows in the transformation matrix, which corresponds to the number of 1d shape functions in the usual tensor contraction setting |
n_columns | Number of columns in the transformation matrix, which corresponds to the number of 1d shape functions in the usual tensor contraction setting |
Number | Abstract number type for input and output arrays |
Number2 | Abstract number type for coefficient arrays (defaults to same type as the input/output arrays); must implement operator* with Number and produce Number as an output to be a valid type |
Definition at line 1834 of file tensor_product_kernels.h.
|
inline |
Empty constructor. Does nothing. Be careful when using 'values' and related methods because they need to be filled with the other constructor passing in at least an array for the values.
Definition at line 1851 of file tensor_product_kernels.h.
|
inline |
Constructor, taking the data from ShapeInfo (using the even-odd variants stored there)
Definition at line 1861 of file tensor_product_kernels.h.
|
inline |
Constructor, taking the data from ShapeInfo (using the even-odd variants stored there)
Definition at line 1873 of file tensor_product_kernels.h.
|
inline |
Definition at line 1896 of file tensor_product_kernels.h.
|
inline |
Definition at line 1904 of file tensor_product_kernels.h.
|
inline |
Definition at line 1912 of file tensor_product_kernels.h.
|
inline |
Definition at line 1920 of file tensor_product_kernels.h.
|
inline |
Definition at line 1928 of file tensor_product_kernels.h.
|
inline |
Definition at line 1938 of file tensor_product_kernels.h.
|
inlinestatic |
This function applies the tensor product kernel, corresponding to a multiplication of 1d stripes, along the given direction
of the tensor data in the input array. This function allows the in
and out
arrays to alias for the case n_rows == n_columns, i.e., it is safe to perform the contraction in place where in
and out
point to the same address. For the case n_rows != n_columns, the output is only correct if one_line
is set to true.
direction | Direction that is evaluated |
contract_over_rows | If true, the tensor contraction sums over the rows in the given shape_data array, otherwise it sums over the columns |
add | If true, the result is added to the output vector, else the computed values overwrite the content in the output |
type | Determines whether to use the symmetries appearing in shape values (type=0), shape gradients (type=1) or second derivatives (type=2, similar to type 0 but without two additional zero entries) |
one_line | If true, the kernel is only applied along a single 1d stripe within a dim-dimensional tensor, not the full n_rows^dim points as in the false case. |
shape_data | Transformation matrix with n_rows rows and n_columns columns, stored in row-major format |
in | Pointer to the start of the input data vector |
out | Pointer to the start of the output data vector |
Definition at line 1980 of file tensor_product_kernels.h.
|
staticconstexpr |
Definition at line 1841 of file tensor_product_kernels.h.
|
staticconstexpr |
Definition at line 1843 of file tensor_product_kernels.h.
|
private |
Definition at line 1997 of file tensor_product_kernels.h.
|
private |
Definition at line 1998 of file tensor_product_kernels.h.
|
private |
Definition at line 1999 of file tensor_product_kernels.h.