From: Peter Munch Date: Sat, 15 Aug 2020 15:41:35 +0000 (+0200) Subject: Fix bug in FEFaceEvaluationSelector::process_and_io X-Git-Tag: v9.3.0-rc1~1181^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d028fc4a67f325b9246b472ecc8b081b01d6087f;p=dealii.git Fix bug in FEFaceEvaluationSelector::process_and_io --- diff --git a/include/deal.II/matrix_free/evaluation_kernels.h b/include/deal.II/matrix_free/evaluation_kernels.h index 1a06ec4a52..76256a27e2 100644 --- a/include/deal.II/matrix_free/evaluation_kernels.h +++ b/include/deal.II/matrix_free/evaluation_kernels.h @@ -2361,9 +2361,34 @@ namespace internal { const unsigned int cell = cells[0]; + + // In the case of integration, we do not need to reshuffle the + // data at the quadrature points to adjust for the face + // orientation if the shape functions are nodal at the cell + // boundaries (and we only requested the integration of the + // values) or Hermite shape functions are used. These cases are + // handled later when the values are written back into the + // glrobal vector. if (integrate && (face_orientations[0] > 0 && - subface_index < GeometryInfo::max_children_per_cell)) + (subface_index < GeometryInfo::max_children_per_cell || + !(((do_gradients == false && + data.data.front().nodal_at_cell_boundaries == true) || + (data.element_type == + MatrixFreeFunctions::tensor_symmetric_hermite && + fe_degree > 1)) && + (dof_info.index_storage_variants[dof_access_index][cell] == + MatrixFreeFunctions::DoFInfo::IndexStorageVariants:: + interleaved_contiguous || + dof_info.index_storage_variants[dof_access_index][cell] == + MatrixFreeFunctions::DoFInfo::IndexStorageVariants:: + interleaved_contiguous_strided || + dof_info.index_storage_variants[dof_access_index][cell] == + MatrixFreeFunctions::DoFInfo::IndexStorageVariants:: + interleaved_contiguous_mixed_strides || + dof_info.index_storage_variants[dof_access_index][cell] == + MatrixFreeFunctions::DoFInfo::IndexStorageVariants:: + contiguous))))) { AssertDimension(face_orientations.size(), 1); adjust_for_face_orientation(face_orientations[0],