|
static void | evaluate (const internal::MatrixFreeFunctions::ShapeInfo< Number > &shape_info, Number *values_dofs_actual, Number *values_quad, Number *gradients_quad, Number *hessians_quad, Number *scratch_data, const bool evaluate_values, const bool evaluate_gradients, const bool evaluate_hessians) |
|
static void | integrate (const internal::MatrixFreeFunctions::ShapeInfo< Number > &shape_info, Number *values_dofs_actual, Number *values_quad, Number *gradients_quad, Number *scratch_data, const bool integrate_values, const bool integrate_gradients, const bool sum_into_values_array=false) |
|
template<int dim, int fe_degree, int n_q_points_1d, int n_components, typename Number>
struct SelectEvaluator< dim, fe_degree, n_q_points_1d, n_components, Number >
This class chooses an appropriate evaluation strategy based on the template parameters and the shape_info variable which contains runtime parameters. In case the template parameters fe_degree and n_q_points_1d contain valid information (i.e. fe_degree>-1 and n_q_points_1d>0), we simply pass these values to the respective template specializations. Otherwise, we perform a runtime matching of the runtime parameters to find the correct specialization. This matching currently supports \(0\leq fe\_degree \leq 9\) and \(degree+1\leq n\_q\_points\_1d\leq fe\_degree+2\).
Definition at line 493 of file evaluation_selector.h.
template<int dim, int fe_degree, int n_q_points_1d, int n_components, typename Number >
static void SelectEvaluator< dim, fe_degree, n_q_points_1d, n_components, Number >::evaluate |
( |
const internal::MatrixFreeFunctions::ShapeInfo< Number > & |
shape_info, |
|
|
Number * |
values_dofs_actual, |
|
|
Number * |
values_quad, |
|
|
Number * |
gradients_quad, |
|
|
Number * |
hessians_quad, |
|
|
Number * |
scratch_data, |
|
|
const bool |
evaluate_values, |
|
|
const bool |
evaluate_gradients, |
|
|
const bool |
evaluate_hessians |
|
) |
| |
|
static |
Chooses an appropriate evaluation strategy for the evaluate function, i.e. this calls internal::FEEvaluationImpl::evaluate(), internal::FEEvaluationImplCollocation::evaluate() or internal::FEEvaluationImplTransformToCollocation::evaluate() with appropriate template parameters.
template<int dim, int fe_degree, int n_q_points_1d, int n_components, typename Number >
static void SelectEvaluator< dim, fe_degree, n_q_points_1d, n_components, Number >::integrate |
( |
const internal::MatrixFreeFunctions::ShapeInfo< Number > & |
shape_info, |
|
|
Number * |
values_dofs_actual, |
|
|
Number * |
values_quad, |
|
|
Number * |
gradients_quad, |
|
|
Number * |
scratch_data, |
|
|
const bool |
integrate_values, |
|
|
const bool |
integrate_gradients, |
|
|
const bool |
sum_into_values_array = false |
|
) |
| |
|
static |
Chooses an appropriate evaluation strategy for the integrate function, i.e. this calls internal::FEEvaluationImpl::integrate(), internal::FEEvaluationImplCollocation::integrate() or internal::FEEvaluationImplTransformToCollocation::integrate() with appropriate template parameters.
template<int dim, int fe_degree, int n_q_points_1d, int n_components, typename Number >
constexpr bool SelectEvaluator< dim, fe_degree, n_q_points_1d, n_components, Number >::use_collocation |
|
static |
Initial value:=
n_q_points_1d > fe_degree &&n_q_points_1d <= 3 * fe_degree / 2 + 1 &&
n_q_points_1d < 200
We enable a transformation to collocation for derivatives if it gives correct results (first condition), if it is the most efficient choice in terms of operation counts (second condition) and if we were able to initialize the fields in shape_info.templates.h from the polynomials (third condition).
Definition at line 502 of file evaluation_selector.h.