]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
vmult functions in Multigrid
authorguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 25 Apr 2005 19:09:42 +0000 (19:09 +0000)
committerguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 25 Apr 2005 19:09:42 +0000 (19:09 +0000)
git-svn-id: https://svn.dealii.org/trunk@10575 0785d39b-7218-0410-832d-ea1e28bc413d

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

index 2de911c30df562694c7786a7b3870583a53895da..a28eb4b1363d77c4bca3e8869a59b8117cbbb85b 100644 (file)
@@ -174,6 +174,24 @@ class Multigrid : public Subscriptor
                                      */
     void vmult(VECTOR& dst, const VECTOR& src) const;
     
+                                    /**
+                                     * @deprecated This function is
+                                     * purely experimental and will
+                                     * probably never be implemented
+                                     * in a way that it can be
+                                     * released.
+                                     *
+                                     * Perform a multigrid cycle with
+                                     * a vector which is already a
+                                     * level vector. Use of this
+                                     * function assumes that there is
+                                     * NO local refinement and that
+                                     * both vectors are on the finest
+                                     * level of this Multigrid
+                                     * object.
+                                     */
+    void vmult_add(VECTOR& dst, const VECTOR& src) const;
+    
                                     /**
                                      * @deprecated Even worse than
                                      * vmult(), this function is not
@@ -184,6 +202,16 @@ class Multigrid : public Subscriptor
                                      */
     void Tvmult(VECTOR& dst, const VECTOR& src) const;
     
+                                    /**
+                                     * @deprecated Even worse than
+                                     * vmult(), this function is not
+                                     * even implemented, but just
+                                     * declared such that certain
+                                     * objects relying on it can be
+                                     * constructed.
+                                     */
+    void Tvmult_add(VECTOR& dst, const VECTOR& src) const;
+    
                                     /**
                                      * Set additional matrices to
                                      * correct residual computation
index 06c1c95b9f9facfbe51226dbd1669371db7a3b8d..33e6c803c881036d8e07403c5096f6eed384b394 100644 (file)
@@ -345,9 +345,32 @@ Multigrid<VECTOR>::vcycle()
   level_v_step (maxlevel);
 }
 
+
 template <class VECTOR>
 void
 Multigrid<VECTOR>::vmult(VECTOR& dst, const VECTOR& src) const
+{
+  Multigrid<VECTOR>& mg = const_cast<Multigrid<VECTOR>&>(*this);
+  mg.defect[maxlevel] = src;
+  mg.cycle();
+  dst = mg.solution[maxlevel];
+}
+
+
+template <class VECTOR>
+void
+Multigrid<VECTOR>::vmult_add(VECTOR& dst, const VECTOR& src) const
+{
+  Multigrid<VECTOR>& mg = const_cast<Multigrid<VECTOR>&>(*this);
+  mg.defect[maxlevel] = src;
+  mg.cycle();
+  dst += mg.solution[maxlevel];
+}
+
+
+template <class VECTOR>
+void
+Multigrid<VECTOR>::Tvmult(VECTOR&, const VECTOR&) const
 {
   Assert(false, ExcNotImplemented());
 }
@@ -355,7 +378,7 @@ Multigrid<VECTOR>::vmult(VECTOR& dst, const VECTOR& src) const
 
 template <class VECTOR>
 void
-Multigrid<VECTOR>::Tvmult(VECTOR& dst, const VECTOR& src) const
+Multigrid<VECTOR>::Tvmult_add(VECTOR&, const VECTOR&) const
 {
   Assert(false, ExcNotImplemented());
 }
index 62a6a106b6ddcaa24d58a84b0de8b81303fc09c2..39e716efff8ce8c572f1fc9833f90fd0ddf5207b 100644 (file)
@@ -513,7 +513,9 @@ MGTools::count_dofs_per_component (
                             true);
          
                                           // finally sanity check
-         Assert (std::accumulate (result[l].begin(),
+         Assert (!dof_handler.get_fe().is_primitive()
+                 ||
+                 std::accumulate (result[l].begin(),
                                   result[l].end(), 0U)
                  ==
                  dof_handler.n_dofs(l),

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.