From: kanschat Date: Tue, 1 May 2007 21:35:56 +0000 (+0000) Subject: improve interface of reinit_vector_by_blocks for single block X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38b1bee0dd5592c8887e7dafc24ccd77a3dcbcf2;p=dealii-svn.git improve interface of reinit_vector_by_blocks for single block git-svn-id: https://svn.dealii.org/trunk@14650 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/include/multigrid/mg_tools.h b/deal.II/deal.II/include/multigrid/mg_tools.h index 187b42f13b..cf89d0fffd 100644 --- a/deal.II/deal.II/include/multigrid/mg_tools.h +++ b/deal.II/deal.II/include/multigrid/mg_tools.h @@ -282,17 +282,18 @@ class MGTools /** - * Adjust block vectors on all - * levels to correct size. The - * degrees of freedom on each - * level are counted by block. + * Adjust vectors on all levels + * to correct size. The degrees + * of freedom on each level are + * counted by block and only the + * block selected is used. */ template static void reinit_vector_by_blocks ( const MGDoFHandler &mg_dof, MGLevelObject > &v, - const std::vector &selected, + const unsigned int selected, std::vector >& cached_sizes); /** diff --git a/deal.II/deal.II/source/multigrid/mg_dof_tools.cc b/deal.II/deal.II/source/multigrid/mg_dof_tools.cc index 4c5f2009e2..67b97db72e 100644 --- a/deal.II/deal.II/source/multigrid/mg_dof_tools.cc +++ b/deal.II/deal.II/source/multigrid/mg_dof_tools.cc @@ -1490,22 +1490,15 @@ void MGTools::reinit_vector_by_blocks ( const MGDoFHandler &mg_dof, MGLevelObject > &v, - const std::vector &selected, + const unsigned int selected_block, std::vector >& ndofs) { - // Compute the number of blocks needed -#ifdef DEBUG - const unsigned int n_selected - = std::accumulate(selected.begin(), - selected.end(), - 0U); - Assert(n_selected == 1, ExcDimensionMismatch(n_selected, 1)); -#endif + const unsigned int n_blocks = mg_dof.get_fe().n_blocks(); + Assert(selected_block < n_blocks, ExcIndexRange(selected_block, 0, n_blocks)); + + std::vector selected(n_blocks, false); + selected[selected_block] = true; - unsigned int selected_block = 0; - while (!selected[selected_block]) - ++selected_block; - if (ndofs.size() == 0) { std::vector > @@ -1588,53 +1581,36 @@ template void MGTools::reinit_vector_by_components ( std::vector >&); template void MGTools::reinit_vector_by_components ( - const MGDoFHandler&, - MGLevelObject >&, - const std::vector&, - const std::vector&, + const MGDoFHandler&, MGLevelObject >&, + const std::vector&, const std::vector&, std::vector >&); template void MGTools::reinit_vector_by_components ( - const MGDoFHandler&, - MGLevelObject >&, - const std::vector&, - const std::vector&, + const MGDoFHandler&, MGLevelObject >&, + const std::vector&, const std::vector&, std::vector >&); template void MGTools::reinit_vector_by_blocks ( - const MGDoFHandler&, - MGLevelObject >&, - const std::vector &, - std::vector >&); + const MGDoFHandler&, MGLevelObject >&, + const std::vector &, std::vector >&); template void MGTools::reinit_vector_by_blocks ( - const MGDoFHandler&, - MGLevelObject >&, - const std::vector &, - std::vector >&); + const MGDoFHandler&, MGLevelObject >&, + const std::vector &, std::vector >&); template void MGTools::reinit_vector_by_blocks ( - const MGDoFHandler&, - MGLevelObject >&, - const std::vector&, - std::vector >&); + const MGDoFHandler&, MGLevelObject >&, + unsigned int, std::vector >&); template void MGTools::reinit_vector_by_blocks ( - const MGDoFHandler&, - MGLevelObject >&, - const std::vector&, - std::vector >&); - + const MGDoFHandler&, MGLevelObject >&, + unsigned int, std::vector >&); template void MGTools::count_dofs_per_component ( - const MGDoFHandler&, - std::vector >&, - bool, - std::vector); + const MGDoFHandler&, std::vector >&, + bool, std::vector); template void MGTools::count_dofs_per_component ( - const MGDoFHandler&, - std::vector >&, + const MGDoFHandler&, std::vector >&, std::vector); template void MGTools::count_dofs_per_block ( - const MGDoFHandler&, - std::vector >&, + const MGDoFHandler&, std::vector >&, std::vector); template void MGTools::make_boundary_list(