]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
improve interface of reinit_vector_by_blocks for single block
authorkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 1 May 2007 21:35:56 +0000 (21:35 +0000)
committerkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 1 May 2007 21:35:56 +0000 (21:35 +0000)
git-svn-id: https://svn.dealii.org/trunk@14650 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/deal.II/include/multigrid/mg_tools.h
deal.II/deal.II/source/multigrid/mg_dof_tools.cc

index 187b42f13b3e1ec1fec7129795e47c350e1ab24e..cf89d0fffd75150ede898fd76f29ea75fd18156f 100644 (file)
@@ -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 <int dim, typename number>
     static void
     reinit_vector_by_blocks (
       const MGDoFHandler<dim> &mg_dof,
       MGLevelObject<Vector<number> > &v,
-      const std::vector<bool> &selected,
+      const unsigned int selected,
       std::vector<std::vector<unsigned int> >& cached_sizes);
     
                                     /**
index 4c5f2009e2f6808db278083070c02246985f32c3..67b97db72e5d055a77da895355e99389ac9df1b2 100644 (file)
@@ -1490,22 +1490,15 @@ void
 MGTools::reinit_vector_by_blocks (
   const MGDoFHandler<dim> &mg_dof,
   MGLevelObject<Vector<number> > &v,
-  const std::vector<bool> &selected,
+  const unsigned int selected_block,
   std::vector<std::vector<unsigned int> >& 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<bool> 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<std::vector<unsigned int> >
@@ -1588,53 +1581,36 @@ template void MGTools::reinit_vector_by_components<deal_II_dimension> (
   std::vector<std::vector<unsigned int> >&);
 
 template void MGTools::reinit_vector_by_components<deal_II_dimension> (
-  const MGDoFHandler<deal_II_dimension>&,
-  MGLevelObject<Vector<double> >&,
-  const std::vector<bool>&,
-  const std::vector<unsigned int>&,
+  const MGDoFHandler<deal_II_dimension>&, MGLevelObject<Vector<double> >&,
+  const std::vector<bool>&, const std::vector<unsigned int>&,
   std::vector<std::vector<unsigned int> >&);
 template void MGTools::reinit_vector_by_components<deal_II_dimension> (
-  const MGDoFHandler<deal_II_dimension>&,
-  MGLevelObject<Vector<float> >&,
-  const std::vector<bool>&,
-  const std::vector<unsigned int>&,
+  const MGDoFHandler<deal_II_dimension>&, MGLevelObject<Vector<float> >&,
+  const std::vector<bool>&, const std::vector<unsigned int>&,
   std::vector<std::vector<unsigned int> >&);
 
 template void MGTools::reinit_vector_by_blocks<deal_II_dimension> (
-  const MGDoFHandler<deal_II_dimension>&,
-  MGLevelObject<BlockVector<double> >&,
-  const std::vector<bool> &,
-  std::vector<std::vector<unsigned int> >&);
+  const MGDoFHandler<deal_II_dimension>&, MGLevelObject<BlockVector<double> >&,
+  const std::vector<bool> &, std::vector<std::vector<unsigned int> >&);
 template void MGTools::reinit_vector_by_blocks<deal_II_dimension> (
-  const MGDoFHandler<deal_II_dimension>&,
-  MGLevelObject<BlockVector<float> >&,
-  const std::vector<bool> &,
-  std::vector<std::vector<unsigned int> >&);
+  const MGDoFHandler<deal_II_dimension>&, MGLevelObject<BlockVector<float> >&,
+  const std::vector<bool> &, std::vector<std::vector<unsigned int> >&);
 
 template void MGTools::reinit_vector_by_blocks<deal_II_dimension> (
-  const MGDoFHandler<deal_II_dimension>&,
-  MGLevelObject<Vector<double> >&,
-  const std::vector<bool>&,
-  std::vector<std::vector<unsigned int> >&);
+  const MGDoFHandler<deal_II_dimension>&, MGLevelObject<Vector<double> >&,
+  unsigned int, std::vector<std::vector<unsigned int> >&);
 template void MGTools::reinit_vector_by_blocks<deal_II_dimension> (
-  const MGDoFHandler<deal_II_dimension>&,
-  MGLevelObject<Vector<float> >&,
-  const std::vector<bool>&,
-  std::vector<std::vector<unsigned int> >&);
-
+  const MGDoFHandler<deal_II_dimension>&, MGLevelObject<Vector<float> >&,
+  unsigned int, std::vector<std::vector<unsigned int> >&);
 
 template void MGTools::count_dofs_per_component<deal_II_dimension> (
-  const MGDoFHandler<deal_II_dimension>&,
-  std::vector<std::vector<unsigned int> >&,
-  bool,
-  std::vector<unsigned int>);
+  const MGDoFHandler<deal_II_dimension>&, std::vector<std::vector<unsigned int> >&,
+  bool, std::vector<unsigned int>);
 template void MGTools::count_dofs_per_component<deal_II_dimension> (
-  const MGDoFHandler<deal_II_dimension>&,
-  std::vector<std::vector<unsigned int> >&,
+  const MGDoFHandler<deal_II_dimension>&, std::vector<std::vector<unsigned int> >&,
   std::vector<unsigned int>);
 template void MGTools::count_dofs_per_block<deal_II_dimension> (
-  const MGDoFHandler<deal_II_dimension>&,
-  std::vector<std::vector<unsigned int> >&,
+  const MGDoFHandler<deal_II_dimension>&, std::vector<std::vector<unsigned int> >&,
   std::vector<unsigned int>);
 
 template void MGTools::make_boundary_list(

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.