From: Martin Kronbichler Date: Tue, 1 Nov 2022 16:31:01 +0000 (+0100) Subject: ShapeInfo: Implement evaluation of derivatives on faces X-Git-Tag: v9.5.0-rc1~884^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F14383%2Fhead;p=dealii.git ShapeInfo: Implement evaluation of derivatives on faces --- 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]; } }