From 35189f1054fbc18d10b275f1daaf90eadd2dc850 Mon Sep 17 00:00:00 2001 From: Sebastian Proell Date: Tue, 11 Oct 2022 17:00:54 +0200 Subject: [PATCH] DoFInfo: Setup pre and post list for faces --- .../deal.II/matrix_free/dof_info.templates.h | 59 ++++++++++++------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/include/deal.II/matrix_free/dof_info.templates.h b/include/deal.II/matrix_free/dof_info.templates.h index d77348695c..7a036ea670 100644 --- a/include/deal.II/matrix_free/dof_info.templates.h +++ b/include/deal.II/matrix_free/dof_info.templates.h @@ -419,28 +419,47 @@ namespace internal } } if (faces.size() > 0) - for (unsigned int face = task_info.face_partition_data[chunk]; - face < task_info.face_partition_data[chunk + 1]; - ++face) - for (unsigned int v = 0; - v < length && faces[face].cells_exterior[v] != - numbers::invalid_unsigned_int; - ++v) - { - const unsigned int cell = faces[face].cells_exterior[v]; - for (unsigned int it = - row_starts[cell * n_components].first; - it != row_starts[(cell + 1) * n_components].first; - ++it) + { + const auto fill_touched_by_for_face = + [&](const unsigned int face) { + for (unsigned int v = 0; v < length; ++v) { - const unsigned int myindex = - dof_indices[it] / chunk_size_zero_vector; - if (touched_first_by[myindex] == - numbers::invalid_unsigned_int) - touched_first_by[myindex] = chunk; - touched_last_by[myindex] = chunk; + const auto fill_touched_by_for_cell = + [&](const unsigned cell) { + if (cell == numbers::invalid_unsigned_int) + return; + for (unsigned int it = + row_starts[cell * n_components].first; + it != + row_starts[(cell + 1) * n_components].first; + ++it) + { + const unsigned int myindex = + dof_indices[it] / chunk_size_zero_vector; + if (touched_first_by[myindex] == + numbers::invalid_unsigned_int) + touched_first_by[myindex] = chunk; + touched_last_by[myindex] = chunk; + } + }; + + fill_touched_by_for_cell(faces[face].cells_interior[v]); + fill_touched_by_for_cell(faces[face].cells_exterior[v]); } - } + }; + + for (unsigned int face = task_info.face_partition_data[chunk]; + face < task_info.face_partition_data[chunk + 1]; + ++face) + fill_touched_by_for_face(face); + + + for (unsigned int face = + task_info.boundary_partition_data[chunk]; + face < task_info.boundary_partition_data[chunk + 1]; + ++face) + fill_touched_by_for_face(face); + } } // ensure that all indices are touched at least during the last round -- 2.39.5