From e3d66eeac83a96880c9eab947e243dc0950e8472 Mon Sep 17 00:00:00 2001 From: Daniel Arndt Date: Mon, 14 Aug 2017 02:55:37 +0200 Subject: [PATCH] Use EvaluationSelector in MappingQGeneric --- source/fe/mapping_q_generic.cc | 36 ++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/source/fe/mapping_q_generic.cc b/source/fe/mapping_q_generic.cc index 6e2ce1442f..08c6b24fbb 100644 --- a/source/fe/mapping_q_generic.cc +++ b/source/fe/mapping_q_generic.cc @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -1614,11 +1615,16 @@ namespace internal VectorizedArray *values_dofs_ptr[n_comp]; data.values_quad.resize(n_comp*n_q_points); VectorizedArray *values_quad_ptr[n_comp]; + // Some evaluators need to write into the gradients array. + data.gradients_quad.resize (n_comp*n_q_points*dim); + VectorizedArray *gradients_quad_ptr[n_comp][dim]; for (unsigned int c=0; c &renumber_to_lexicographic @@ -1632,9 +1638,9 @@ namespace internal = data.mapping_support_points[renumber_to_lexicographic[i]][d]; } - internal::FEEvaluationImpl::evaluate - (data.shape_info, &(values_dofs_ptr[0]), &(values_quad_ptr[0]), nullptr, nullptr, - &(data.scratch[0]), true, false, false); + SelectEvaluator::evaluate + (data.shape_info, &(values_dofs_ptr[0]), &(values_quad_ptr[0]), + &(gradients_quad_ptr[0]), nullptr, &(data.scratch[0]), true, false, false); for (unsigned int out_comp=0; out_comp *values_dofs_ptr[n_comp]; data.gradients_quad.resize (n_comp*n_q_points*dim); VectorizedArray *gradients_quad_ptr[n_comp][dim]; + // Some evaluators need to write into the values array. + data.values_quad.resize(n_comp*n_q_points); + VectorizedArray *values_quad_ptr[n_comp]; // transform data appropriately const std::vector &renumber_to_lexicographic @@ -1719,13 +1728,14 @@ namespace internal for (unsigned int c=0; c::evaluate - (data.shape_info, &(values_dofs_ptr[0]), nullptr, &(gradients_quad_ptr[0]), nullptr, - &(data.scratch[0]), false, true, false); + SelectEvaluator::evaluate + (data.shape_info, &(values_dofs_ptr[0]), &(values_quad_ptr[0]), + &(gradients_quad_ptr[0]), nullptr, &(data.scratch[0]), false, true, false); // We need to reinterpret the data after evaluate has been applied. for (unsigned int out_comp=0; out_comp *values_dofs_ptr[n_comp]; data.hessians_quad.resize(n_comp*n_q_points*n_hessians); VectorizedArray *hessians_quad_ptr[n_comp][n_hessians]; + // Some evaluators need to write into the gradients array + // and into the values array. + data.gradients_quad.resize (n_comp*n_q_points*dim); + VectorizedArray *gradients_quad_ptr[n_comp][dim]; + data.values_quad.resize(n_comp*n_q_points); + VectorizedArray *values_quad_ptr[n_comp]; // transform data appropriately const std::vector &renumber_to_lexicographic @@ -1847,12 +1863,16 @@ namespace internal for (unsigned int c=0; c::evaluate - (data.shape_info, &(values_dofs_ptr[0]), nullptr, nullptr, &(hessians_quad_ptr[0]), + SelectEvaluator::evaluate + (data.shape_info, &(values_dofs_ptr[0]), &(values_quad_ptr[0]), + &(gradients_quad_ptr[0]), &(hessians_quad_ptr[0]), &(data.scratch[0]), false, false, true); constexpr int desymmetrize_3d [6][2] = {{0,0},{1,1},{2,2},{0,1},{0,2},{1,2}}; -- 2.39.5