* 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,
*/
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.
*/
* 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;
};
* 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;
};
}
+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>
}
+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>
}
+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