From 068faadba396be6f2b604bd61e05220354006f1c Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Tue, 7 Nov 2017 15:51:55 -0700 Subject: [PATCH] Revert an if-else and other restructuring. --- source/dofs/dof_renumbering.cc | 59 ++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/source/dofs/dof_renumbering.cc b/source/dofs/dof_renumbering.cc index ffd18ac1a8..dbdd1364da 100644 --- a/source/dofs/dof_renumbering.cc +++ b/source/dofs/dof_renumbering.cc @@ -397,23 +397,36 @@ namespace DoFRenumbering const IndexSet &locally_owned_dofs = dof_handler.locally_owned_dofs(); - // otherwise compute the Cuthill-McKee permutation - DynamicSparsityPattern dsp (dof_handler.n_dofs(), - dof_handler.n_dofs(), - locally_owned_dofs); - DoFTools::make_sparsity_pattern (dof_handler, dsp, constraints); - - // constraints are not needed anymore - constraints.clear (); - - // If the index set is not complete, then we need to work on only the - // local index space. - if (locally_owned_dofs.n_elements() != locally_owned_dofs.size()) + // see if we can get away with the sequential algorithm + if (locally_owned_dofs.n_elements() == locally_owned_dofs.size()) { - // Create sparsity pattern from dsp by transferring its indices to - // processor-local index space and doing Cuthill-McKee there - DynamicSparsityPattern sparsity(locally_owned_dofs.n_elements(), - locally_owned_dofs.n_elements()); + AssertDimension(new_indices.size(), dof_handler.n_dofs()); + + DynamicSparsityPattern dsp (dof_handler.n_dofs(), + dof_handler.n_dofs()); + DoFTools::make_sparsity_pattern (dof_handler, dsp, constraints); + + SparsityTools::reorder_Cuthill_McKee (dsp, new_indices, + starting_indices); + if (reversed_numbering) + new_indices = Utilities::reverse_permutation (new_indices); + } + else + { + // we are in the parallel case where we need to work in the + // local index space, i.e., the locally owned part of the + // sparsity pattern. + // + // create first the global sparsity pattern, and then the local + // sparsity pattern from the global one by transferring its indices to + // processor-local index space + DynamicSparsityPattern dsp (dof_handler.n_dofs(), + dof_handler.n_dofs(), + locally_owned_dofs); + DoFTools::make_sparsity_pattern (dof_handler, dsp, constraints); + + DynamicSparsityPattern local_sparsity(locally_owned_dofs.n_elements(), + locally_owned_dofs.n_elements()); std::vector row_entries; for (unsigned int i=0; i