/* $Id$ */
/* */
-/* Copyright (C) 2005-2008, 2010-2012 by the deal.II authors */
+/* Copyright (C) 2005-2008, 2010-2013 by the deal.II authors */
/* */
/* This file is subject to QPL and may not be distributed */
/* without copyright and license information. Please refer */
// represents. As a consequence, in the code below, we also
// implement a <tt>Tvmult</tt> function here that represents the
// product of the transpose matrix with a vector. It is easy to see
- // how this needs to be implemented here. (Note, however, that even
- // though we implement this function here, there will in fact not be
- // any need for it as long as we use SolverCG as the solver since
- // that solver does not ever call the function that provides this
- // operation.)
+ // how this needs to be implemented here: since the matrix is
+ // symmetric, we can as well call <code>vmult</code> wherever the
+ // product with the transpose matrix is required. (Note, however,
+ // that even though we implement this function here, there will in
+ // fact not be any need for it as long as we use SolverCG as the
+ // solver since that solver does not ever call the function that
+ // provides this operation.)
class ApproximateSchurComplement : public Subscriptor
{
public:
void ApproximateSchurComplement::Tvmult (Vector<double> &dst,
const Vector<double> &src) const
{
- system_matrix->block(1,0).Tvmult (dst, tmp2);
- system_matrix->block(0,0).precondition_Jacobi (tmp2, tmp1);
- system_matrix->block(0,1).Tvmult (tmp1, src);
+ vmult (dst, src);
}