|
| EvaluatorTensorProduct () |
|
| 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) |
|
| EvaluatorTensorProduct (const Number2 *shape_values, const Number2 *shape_gradients, const 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 |
|
template<int face_direction, bool contract_onto_face, bool add, int max_derivative> |
void | apply_face (const Number *DEAL_II_RESTRICT in, Number *DEAL_II_RESTRICT out) const |
|
template<int dim, int n_rows, int n_columns, typename Number, typename Number2>
struct internal::EvaluatorTensorProduct< evaluate_general, dim, n_rows, n_columns, Number, Number2 >
Internal evaluator for shape function in arbitrary dimension using the tensor product form of the basis functions.
- Template Parameters
-
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 182 of file tensor_product_kernels.h.
template<int dim, int n_rows, int n_columns, typename Number , typename Number2 >
template<int direction, bool contract_over_rows, bool add, bool one_line>
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 in general not correct.
- Template Parameters
-
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 |
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. |
- Parameters
-
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 385 of file tensor_product_kernels.h.
template<int dim, int n_rows, int n_columns, typename Number , typename Number2 >
template<int face_direction, bool contract_onto_face, bool add, int max_derivative>
This function applies the tensor product operation to produce face values from cell values. As opposed to the apply method, this method assumes that the directions orthogonal to the face have n_rows degrees of freedom per direction and not n_columns for those directions lower than the one currently applied. In other words, apply_face() must be called before calling any interpolation within the face.
- Template Parameters
-
face_direction | Direction of the normal vector (0=x, 1=y, etc) |
contract_onto_face | If true, the input vector is of size n_rows^dim and interpolation into n_rows^(dim-1) points is performed. This is a typical scenario in FEFaceEvaluation::evaluate() calls. If false, data from n_rows^(dim-1) points is expanded into the n_rows^dim points of the higher- dimensional data array. Derivatives in the case contract_onto_face==false are summed together |
add | If true, the result is added to the output vector, else the computed values overwrite the content in the output |
max_derivative | Sets the number of derivatives that should be computed. 0 means only values, 1 means values and first derivatives, 2 second derivates. Note that all the derivatives access the data in shape_values passed to the constructor of the class |
- Parameters
-
in | address of the input data vector |
out | address of the output data vector |
Definition at line 468 of file tensor_product_kernels.h.