]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Cleanup: Use LinearOperator instead of PointerMatrix
authorMatthias Maier <tamiko@43-1.org>
Thu, 13 Jul 2017 17:57:47 +0000 (12:57 -0500)
committerMatthias Maier <tamiko@43-1.org>
Thu, 13 Jul 2017 19:43:04 +0000 (14:43 -0500)
include/deal.II/multigrid/mg_matrix.h

index a717e34e883bb8af8a7f80057d1801330e218f4f..3d01770e18f68e7c363ea113d9a80e0ad1fcd9b5 100644 (file)
 #ifndef dealii__mg_matrix_h
 #define dealii__mg_matrix_h
 
-#include <deal.II/lac/vector.h>
-#include <deal.II/lac/pointer_matrix.h>
+#include <deal.II/base/mg_level_object.h>
+#include <deal.II/lac/linear_operator.h>
 #include <deal.II/lac/sparse_matrix.h>
+#include <deal.II/lac/vector.h>
 #include <deal.II/multigrid/mg_base.h>
-#include <deal.II/base/mg_level_object.h>
 
 #include <memory>
 
@@ -33,8 +33,8 @@ namespace mg
 {
   /**
    * Multilevel matrix. This matrix stores an MGLevelObject of
-   * PointerMatrixBase objects. It implements the interface defined in
-   * MGMatrixBase, so that it can be used as a matrix in Multigrid.
+   * LinearOpetors. It implements the interface defined in MGMatrixBase, so
+   * that it can be used as a matrix in Multigrid.
    *
    * @author Guido Kanschat
    * @date 2002, 2010
@@ -72,7 +72,7 @@ namespace mg
     /**
      * Access matrix on a level.
      */
-    const PointerMatrixBase<VectorType> &operator[] (unsigned int level) const;
+    const LinearOperator<VectorType> &operator[] (unsigned int level) const;
 
     virtual void vmult (const unsigned int level, VectorType &dst, const VectorType &src) const;
     virtual void vmult_add (const unsigned int level, VectorType &dst, const VectorType &src) const;
@@ -86,7 +86,7 @@ namespace mg
      */
     std::size_t memory_consumption () const;
   private:
-    MGLevelObject<std::shared_ptr<PointerMatrixBase<VectorType> > > matrices;
+    MGLevelObject<LinearOperator<VectorType> > matrices;
   };
 
 }
@@ -184,8 +184,7 @@ namespace mg
   {
     matrices.resize(p.min_level(), p.max_level());
     for (unsigned int level=p.min_level(); level <= p.max_level(); ++level)
-      matrices[level] = std::shared_ptr<PointerMatrixBase<VectorType> >
-                        (new_pointer_matrix_base(p[level], VectorType()));
+      matrices[level] = linear_operator<VectorType>(p[level]);
   }
 
 
@@ -212,10 +211,10 @@ namespace mg
 
   template <typename VectorType>
   inline
-  const PointerMatrixBase<VectorType> &
+  const LinearOperator<VectorType> &
   Matrix<VectorType>::operator[] (unsigned int level) const
   {
-    return *matrices[level];
+    return matrices[level];
   }
 
 
@@ -226,7 +225,7 @@ namespace mg
                              VectorType         &dst,
                              const VectorType   &src) const
   {
-    matrices[level]->vmult(dst, src);
+    matrices[level].vmult(dst, src);
   }
 
 
@@ -237,7 +236,7 @@ namespace mg
                                  VectorType         &dst,
                                  const VectorType   &src) const
   {
-    matrices[level]->vmult_add(dst, src);
+    matrices[level].vmult_add(dst, src);
   }
 
 
@@ -248,7 +247,7 @@ namespace mg
                               VectorType         &dst,
                               const VectorType   &src) const
   {
-    matrices[level]->Tvmult(dst, src);
+    matrices[level].Tvmult(dst, src);
   }
 
 
@@ -259,7 +258,7 @@ namespace mg
                                   VectorType         &dst,
                                   const VectorType   &src) const
   {
-    matrices[level]->Tvmult_add(dst, src);
+    matrices[level].Tvmult_add(dst, src);
   }
 
 

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.