]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Implement vmult() method in RelaxationBlock{Jacobi,SOR,SSOR} 4506/head
authorMartin Kronbichler <kronbichler@lnm.mw.tum.de>
Sun, 11 Jun 2017 20:53:48 +0000 (22:53 +0200)
committerMartin Kronbichler <kronbichler@lnm.mw.tum.de>
Sun, 11 Jun 2017 20:53:48 +0000 (22:53 +0200)
include/deal.II/lac/relaxation_block.h
include/deal.II/lac/relaxation_block.templates.h

index ad6b0dc641ff326376d7a5bf43e58117c4f2ee16..2292f67b5a5da62ffd31d84a940d1853bd563261 100644 (file)
@@ -227,9 +227,9 @@ protected:
    * Perform one block relaxation step.
    *
    * Depending on the arguments @p dst and @p pref, this performs an SOR step
-   * (both reference the same vector) of a Jacobi step (both are different
+   * (both reference the same vector) or a Jacobi step (both are different
    * vectors). For the Jacobi step, the calling function must copy @p dst to
-   * @p pref after this.
+   * @p prev after this.
    */
   void do_step (
     VectorType       &dst,
@@ -339,6 +339,18 @@ public:
    */
   void Tstep (VectorType &dst, const VectorType &rhs) const;
 
+  /**
+   * Implements a vmult() operation, which for this class first sets the dst()
+   * vector to zero before calling the step() method.
+   */
+  void vmult (VectorType &dst, const VectorType &rhs) const;
+
+  /**
+   * Implements a transpose vmult operation, which for this class first sets
+   * the dst() vector to zero before calling the Tstep() method.
+   */
+  void Tvmult (VectorType &dst, const VectorType &rhs) const;
+
   /**
    * Return the memory allocated in this object.
    */
@@ -426,6 +438,18 @@ public:
    * Perform one step of the transposed SOR iteration.
    */
   void Tstep (VectorType &dst, const VectorType &rhs) const;
+
+  /**
+   * Implements a vmult() operation, which for this class first sets the dst()
+   * vector to zero before calling the step() method.
+   */
+  void vmult (VectorType &dst, const VectorType &rhs) const;
+
+  /**
+   * Implements a transpose vmult operation, which for this class first sets
+   * the dst() vector to zero before calling the Tstep() method.
+   */
+  void Tvmult (VectorType &dst, const VectorType &rhs) const;
 };
 
 
@@ -505,6 +529,18 @@ public:
    * Perform one step of the transposed SSOR iteration.
    */
   void Tstep (VectorType &dst, const VectorType &rhs) const;
+
+  /**
+   * Implements a vmult() operation, which for this class first sets the dst()
+   * vector to zero before calling the step() method.
+   */
+  void vmult (VectorType &dst, const VectorType &rhs) const;
+
+  /**
+   * Implements a transpose vmult operation, which for this class first sets
+   * the dst() vector to zero before calling the Tstep() method.
+   */
+  void Tvmult (VectorType &dst, const VectorType &rhs) const;
 };
 
 
index 1af48da02b945084ab0904bab3ef15e792e9861e..c0b7d03ab6f2432dd6cf36fdc25daf8a843e863c 100644 (file)
@@ -299,6 +299,32 @@ void RelaxationBlockJacobi<MatrixType, InverseNumberType, VectorType>::Tstep
 }
 
 
+template <typename MatrixType, typename InverseNumberType, typename VectorType>
+void RelaxationBlockJacobi<MatrixType, InverseNumberType, VectorType>::vmult
+(VectorType       &dst,
+ const VectorType &src) const
+{
+  GrowingVectorMemory<VectorType> mem;
+  typename VectorMemory<VectorType>::Pointer aux = mem;
+  dst = 0;
+  aux->reinit(dst);
+  this->do_step(dst, *aux, src, false);
+}
+
+
+template <typename MatrixType, typename InverseNumberType, typename VectorType>
+void RelaxationBlockJacobi<MatrixType, InverseNumberType, VectorType>::Tvmult
+(VectorType       &dst,
+ const VectorType &src) const
+{
+  GrowingVectorMemory<VectorType> mem;
+  typename VectorMemory<VectorType>::Pointer aux = mem;
+  dst = 0;
+  aux->reinit(dst);
+  this->do_step(dst, *aux, src, true);
+}
+
+
 //----------------------------------------------------------------------//
 
 template <typename MatrixType, typename InverseNumberType, typename VectorType>
@@ -319,6 +345,26 @@ void RelaxationBlockSOR<MatrixType, InverseNumberType, VectorType>::Tstep
 }
 
 
+template <typename MatrixType, typename InverseNumberType, typename VectorType>
+void RelaxationBlockSOR<MatrixType, InverseNumberType, VectorType>::vmult
+(VectorType &dst,
+ const VectorType &src) const
+{
+  dst = 0;
+  this->do_step(dst, dst, src, false);
+}
+
+
+template <typename MatrixType, typename InverseNumberType, typename VectorType>
+void RelaxationBlockSOR<MatrixType, InverseNumberType, VectorType>::Tvmult
+(VectorType       &dst,
+ const VectorType &src) const
+{
+  dst = 0;
+  this->do_step(dst, dst, src, true);
+}
+
+
 //----------------------------------------------------------------------//
 
 template <typename MatrixType, typename InverseNumberType, typename VectorType>
@@ -341,6 +387,28 @@ void RelaxationBlockSSOR<MatrixType, InverseNumberType, VectorType>::Tstep
 }
 
 
+template <typename MatrixType, typename InverseNumberType, typename VectorType>
+void RelaxationBlockSSOR<MatrixType, InverseNumberType, VectorType>::vmult
+(VectorType       &dst,
+ const VectorType &src) const
+{
+  dst = 0;
+  this->do_step(dst, dst, src, false);
+  this->do_step(dst, dst, src, true);
+}
+
+
+template <typename MatrixType, typename InverseNumberType, typename VectorType>
+void RelaxationBlockSSOR<MatrixType, InverseNumberType, VectorType>::Tvmult
+(VectorType       &dst,
+ const VectorType &src) const
+{
+  dst = 0;
+  this->do_step(dst, dst, src, true);
+  this->do_step(dst, dst, src, false);
+}
+
+
 
 DEAL_II_NAMESPACE_CLOSE
 

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.