From: bangerth Date: Fri, 10 Aug 2012 12:17:56 +0000 (+0000) Subject: Merge from upstream using the command 'svn merge ^/branches/branch_merge_mg_into_dof_... X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=426c34a700499021a5b4553e6acf3bd978b1720c;p=dealii-svn.git Merge from upstream using the command 'svn merge ^/branches/branch_merge_mg_into_dof_handler'. git-svn-id: https://svn.dealii.org/branches/branch_bigger_global_dof_indices_3@25875 0785d39b-7218-0410-832d-ea1e28bc413d --- 426c34a700499021a5b4553e6acf3bd978b1720c diff --cc deal.II/include/deal.II/dofs/dof_tools.h index 05b3369a31,6207efca1c..22361b4286 --- a/deal.II/include/deal.II/dofs/dof_tools.h +++ b/deal.II/include/deal.II/dofs/dof_tools.h @@@ -1243,14 -1243,14 +1243,14 @@@ namespace DoFTool * extract_dofs() for one level * of a multi-grid DoF numbering. */ - template + template void extract_level_dofs (const unsigned int level, - const MGDoFHandler &dof, - const std::vector &select, - std::vector &selected_dofs, - const bool blocks = false); + const DH &dof, + const std::vector &select, + std::vector &selected_dofs, + const bool blocks = false); - + /** * Extract all degrees of freedom * which are at the boundary and @@@ -2134,9 -2099,9 +2134,9 @@@ template void count_dofs_per_block (const DH &dof, - std::vector &dofs_per_block, - const std::vector &target_block - = std::vector()); + std::vector &dofs_per_block, - std::vector target_block ++ const std::vector &target_block + = std::vector()); /** * @deprecated See the previous diff --cc deal.II/source/dofs/block_info.cc index 530c256cc1,f74605a2be..1ae1207819 --- a/deal.II/source/dofs/block_info.cc +++ b/deal.II/source/dofs/block_info.cc @@@ -25,29 -25,12 +25,27 @@@ DEAL_II_NAMESPACE_OPE template void -BlockInfo::initialize(const DoFHandler& dof) +BlockInfo::initialize(const DoFHandler& dof, bool levels_only, bool multigrid) { - const FiniteElement& fe = dof.get_fe(); - std::vector sizes(fe.n_blocks()); - DoFTools::count_dofs_per_block(dof, sizes); - bi_global.reinit(sizes); + if (!levels_only) { + const FiniteElement& fe = dof.get_fe(); + std::vector sizes(fe.n_blocks()); + DoFTools::count_dofs_per_block(dof, sizes); + bi_global.reinit(sizes); + } + + if (multigrid) { + std::vector > sizes (dof.get_tria ().n_levels ()); + + for (unsigned int i = 0; i < sizes.size (); ++i) + sizes[i].resize (dof.get_fe ().n_blocks ()); + - //TODO[MB]: - Assert (false, ExcMessage("Markus: This still needs to be fixed, it doesn't compile.")); - // MGTools::count_dofs_per_block (dof, sizes); ++ MGTools::count_dofs_per_block (dof, sizes); + levels.resize (sizes.size ()); + + for (unsigned int i = 0; i < sizes.size (); ++i) + levels[i].reinit (sizes[i]); + } } diff --cc deal.II/source/dofs/dof_tools.cc index fe6a8dc859,c1204f1f43..b91603fb0c --- a/deal.II/source/dofs/dof_tools.cc +++ b/deal.II/source/dofs/dof_tools.cc @@@ -4871,9 -4871,11 +4871,11 @@@ namespace DoFTool template void count_dofs_per_block (const DH &dof_handler, - std::vector &dofs_per_block, + std::vector &dofs_per_block, - std::vector target_block) + const std::vector &target_block_) { + std::vector target_block = target_block_; + const dealii::hp::FECollection fe_collection (dof_handler.get_fe()); Assert (fe_collection.size() < 256, ExcNotImplemented());