Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MatrixFree: Only set up the inner faces when so requested #15381

Merged
merged 1 commit into from
Jul 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 9 additions & 0 deletions doc/news/changes/incompatibilities/20230619Kronbichler
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
MatrixFree::reinit() would always set up the data structures for inner faces,
also in case only
MatrixFree::AdditionalData::mapping_updates_flags_boundary_faces was set. As
this can lead to considerably higher memory consumption, the inner faces are
now only set up when requested, increasing efficiency. When inner faces are
desired, make sure to set
MatrixFree::AdditionalData::mapping_updates_flags_inner_faces.
<br>
(Martin Kronbichler, 2023/06/19)
13 changes: 7 additions & 6 deletions include/deal.II/matrix_free/matrix_free.templates.h
Original file line number Diff line number Diff line change
Expand Up @@ -1969,12 +1969,13 @@ MatrixFree<dim, Number, VectorizedArrayType>::initialize_indices(
true);
}

internal::MatrixFreeFunctions::collect_faces_vectorization(
face_setup.inner_faces,
hard_vectorization_boundary,
task_info.face_partition_data,
face_info.faces,
dof_info[0].cell_active_fe_index);
if (additional_data.mapping_update_flags_inner_faces != update_default)
internal::MatrixFreeFunctions::collect_faces_vectorization(
face_setup.inner_faces,
hard_vectorization_boundary,
task_info.face_partition_data,
face_info.faces,
dof_info[0].cell_active_fe_index);

// on boundary faces, we must also respect the vectorization boundary of
// the inner faces because we might have dependencies on ghosts of
Expand Down