From c0f6e6a91f945db4fa13011ca3e2c4d14ee2b609 Mon Sep 17 00:00:00 2001 From: Martin Kronbichler Date: Tue, 1 Nov 2022 17:31:01 +0100 Subject: [PATCH] ShapeInfo: Implement evaluation of derivatives on faces --- include/deal.II/matrix_free/shape_info.h | 9 ++++----- include/deal.II/matrix_free/shape_info.templates.h | 9 +++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/include/deal.II/matrix_free/shape_info.h b/include/deal.II/matrix_free/shape_info.h index 36ee133b22..2715745dc5 100644 --- a/include/deal.II/matrix_free/shape_info.h +++ b/include/deal.II/matrix_free/shape_info.h @@ -247,8 +247,8 @@ namespace internal /** * Collects all data of 1D shape values evaluated at the point 0 and 1 - * (the vertices) in one data structure. Sorting is first the values, - * then gradients, then second derivatives. + * (the vertices) in one data structure. The sorting of data is to + * start with the values, then gradients, then second derivatives. */ std::array, 2> shape_data_on_face; @@ -258,9 +258,8 @@ namespace internal * point 0 and 1 (the vertices) in one data structure. * * This data structure can be used to interpolate from the cell to the - * face quadrature points. - * - * @note In contrast to shape_data_on_face, only the vales are evaluated. + * face quadrature points. The sorting of data is to start with the + * values, then gradients, then second derivatives. */ std::array, 2> quadrature_data_on_face; diff --git a/include/deal.II/matrix_free/shape_info.templates.h b/include/deal.II/matrix_free/shape_info.templates.h index b9a7ba4419..dd289ccd1a 100644 --- a/include/deal.II/matrix_free/shape_info.templates.h +++ b/include/deal.II/matrix_free/shape_info.templates.h @@ -748,8 +748,13 @@ namespace internal for (unsigned int i = 0; i < quad.size(); ++i) { - quadrature_data_on_face[0][i] = poly_coll[i].value(0.0); - quadrature_data_on_face[1][i] = poly_coll[i].value(1.0); + std::array values; + poly_coll[i].value(0.0, 2, values.data()); + for (unsigned int d = 0; d < 3; ++d) + quadrature_data_on_face[0][i + d * quad.size()] = values[d]; + poly_coll[i].value(1.0, 2, values.data()); + for (unsigned int d = 0; d < 3; ++d) + quadrature_data_on_face[1][i + d * quad.size()] = values[d]; } } -- 2.39.5