From 29c5030bfa875412c8be0297587a665b9e8a09a7 Mon Sep 17 00:00:00 2001 From: Simon Sticko Date: Fri, 17 Jan 2020 17:59:07 +0100 Subject: [PATCH] Fix 1D bug in one version of make_flux_sparsity_pattern. When a neighbor has children, the function loops over each face and the children of each face_iterator. But in 1D the number of children of a face is always zero. The result is that flux-couplings are missed in the 1D case when not all cells are on the same level. Fix this by avoiding to iterate over the children of the face in 1D. This is the same solutions that is already used in line 597 of source/dofs/dof_tools_sparsity.cc. --- source/dofs/dof_tools_sparsity.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source/dofs/dof_tools_sparsity.cc b/source/dofs/dof_tools_sparsity.cc index 67c1536dce..b3c05e9e93 100644 --- a/source/dofs/dof_tools_sparsity.cc +++ b/source/dofs/dof_tools_sparsity.cc @@ -880,6 +880,16 @@ namespace DoFTools cell->periodic_neighbor_face_no(face_n) : cell->neighbor_face_no(face_n); + + // In 1D, go straight to the cell behind this particular + // cell's most terminal cell. This makes us skip the + // if (neighbor->has_children()) section below. We need to + // do this since we otherwise iterate over the children of + // the face, which are always 0 in 1D. + if (DoFHandlerType::dimension == 1) + while (neighbor->has_children()) + neighbor = neighbor->child(face_n == 0 ? 1 : 0); + if (neighbor->has_children()) { for (unsigned int sub_nr = 0; @@ -1174,6 +1184,15 @@ namespace DoFTools neighbor->is_locally_owned()) continue; // (the neighbor is finer) + // In 1D, go straight to the cell behind this particular + // cell's most terminal cell. This makes us skip the + // if (neighbor->has_children()) section below. We need to + // do this since we otherwise iterate over the children of + // the face, which are always 0 in 1D. + if (dim == 1) + while (neighbor->has_children()) + neighbor = neighbor->child(face == 0 ? 1 : 0); + if (neighbor->has_children()) { for (unsigned int sub_nr = 0; -- 2.39.5