--- /dev/null
+// $Id$
+// Driver file for SparseMatrix functions with two types.
+
+// TYPEMAT and TYPE2 are defined in sparsematrix?.cc
+
+template SparseMatrix<TYPEMAT> &
+SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
+
+template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
+ const SparseMatrix<TYPE2> &);
+
+template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
+ const Vector<TYPE2> &) const;
+template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
+ const Vector<TYPE2> &) const;
+template void SparseMatrix<TYPEMAT>::vmult_add (Vector<TYPE2> &,
+ const Vector<TYPE2> &) const;
+template void SparseMatrix<TYPEMAT>::Tvmult_add (Vector<TYPE2> &,
+ const Vector<TYPE2> &) const;
+
+template TYPE2
+SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
+
+template TYPE2 SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
+ const Vector<TYPE2> &,
+ const Vector<TYPE2> &) const;
+
+template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
+ const Vector<TYPE2> &,
+ TYPEMAT) const;
+
+template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
+ const Vector<TYPE2> &,
+ TYPEMAT) const;
+
+template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
+ const Vector<TYPE2> &,
+ TYPEMAT) const;
+
+template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
+template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
+template void SparseMatrix<TYPEMAT>::SOR_step (Vector<TYPE2> &, const Vector<TYPE2> &, TYPEMAT) const;
+template void SparseMatrix<TYPEMAT>::TSOR_step (Vector<TYPE2> &, const Vector<TYPE2> &, TYPEMAT) const;
+template void SparseMatrix<TYPEMAT>::SSOR_step (Vector<TYPE2> &, const Vector<TYPE2> &, TYPEMAT) const;
template <typename somenumber>
void Tvmult (Vector<somenumber>& dst, const Vector<somenumber>& src) const;
+ /**
+ * Adding Matrix-vector multiplication. Add
+ * $M*src$ on $dst$ with $M$ being this matrix.
+ */
+ template <typename somenumber>
+ void vmult_add (Vector<somenumber>& dst, const Vector<somenumber>& src) const;
+
+ /**
+ * Adding Matrix-vector multiplication. Add
+ * $M^T*src$ to $dst$ with $M$ being this
+ * matrix. This function does the same as
+ * #vmult_add# but takes the transposed matrix.
+ */
+ template <typename somenumber>
+ void Tvmult_add (Vector<somenumber>& dst, const Vector<somenumber>& src) const;
+
/**
* Return the norm of the vector $v$ with
* respect to the norm induced by this
void precondition_Jacobi (Vector<somenumber> &dst,
const Vector<somenumber> &src,
const number om = 1.) const;
- //
+ /**
+ * Apply SOR preconditioning to #src#.
+ */
template <typename somenumber>
void precondition_SSOR (Vector<somenumber> &dst,
const Vector<somenumber> &src,
const number om = 1.) const;
- //
+
+ /**
+ * Apply SOR preconditioning matrix to #src#.
+ * The result of this method is
+ * $dst = (om D - L)^{-1} src$.
+ */
template <typename somenumber>
void precondition_SOR (Vector<somenumber> &dst,
const Vector<somenumber> &src,
const number om = 1.) const;
/**
- * Perform an SSOR step in-place, i.e.
- * without copying to a second vector.
- * #omega# is the damping parameter.
+ * Perform SSOR preconditioning in-place.
+ * Apply the preconditioner matrix without
+ * copying to a second vector.
+ * #omega# is the relaxation parameter.
*/
template <typename somenumber>
- void SSOR (Vector<somenumber> &dst,
+ void SSOR (Vector<somenumber> &v,
const number omega = 1.) const;
/**
- * Perform an SOR step in-place, i.e.
- * without copying to a second vector.
+ * Perform an SOR preconditioning in-place.
+ * The result is $v = (\omega D - L)^{-1} v$.
* #omega# is the damping parameter.
*/
template <typename somenumber>
- void SOR (Vector<somenumber> &dst,
+ void SOR (Vector<somenumber> &v,
const number om = 1.) const;
+ /**
+ * Do one SOR step on #v#.
+ * Performs a direct SOR step with right hand
+ * side #b#.
+ */
+ template <typename somenumber>
+ void SOR_step (Vector<somenumber> &v,
+ const Vector<somenumber> &b,
+ const number om = 1.) const;
+
+ /**
+ * Do one adjoint SOR step on #v#.
+ * Performs a direct TSOR step with right hand
+ * side #b#.
+ */
+ template <typename somenumber>
+ void TSOR_step (Vector<somenumber> &v,
+ const Vector<somenumber> &b,
+ const number om = 1.) const;
+
+ /**
+ * Do one adjoint SSOR step on #v#.
+ * Performs a direct SSOR step with right hand
+ * side #b# by performing TSOR after SOR.
+ */
+ template <typename somenumber>
+ void SSOR_step (Vector<somenumber> &v,
+ const Vector<somenumber> &b,
+ const number om = 1.) const;
+
/**
* Return a (constant) reference to the
* underlying sparsity pattern of this
+template <typename number>
+template <typename somenumber>
+void
+SparseMatrix<number>::vmult_add (Vector<somenumber>& dst, const Vector<somenumber>& src) const
+{
+ Assert (cols != 0, ExcMatrixNotInitialized());
+ Assert (val != 0, ExcMatrixNotInitialized());
+ Assert(m() == dst.size(), ExcDimensionsDontMatch(m(),dst.size()));
+ Assert(n() == src.size(), ExcDimensionsDontMatch(n(),src.size()));
+
+ const unsigned int n_rows = m();
+ const number *val_ptr = &val[cols->rowstart[0]];
+ const int *colnum_ptr = &cols->colnums[cols->rowstart[0]];
+ somenumber *dst_ptr = &dst(0);
+ for (unsigned int row=0; row<n_rows; ++row)
+ {
+ somenumber s = 0.;
+ const number *const val_end_of_row = &val[cols->rowstart[row+1]];
+ while (val_ptr != val_end_of_row)
+ s += *val_ptr++ * src(*colnum_ptr++);
+ *dst_ptr++ += s;
+ };
+};
+
+
+template <typename number>
+template <typename somenumber>
+void
+SparseMatrix<number>::Tvmult_add (Vector<somenumber>& dst, const Vector<somenumber>& src) const
+{
+ Assert (val != 0, ExcMatrixNotInitialized());
+ Assert (cols != 0, ExcMatrixNotInitialized());
+ Assert(n() == dst.size(), ExcDimensionsDontMatch(n(),dst.size()));
+ Assert(m() == src.size(), ExcDimensionsDontMatch(m(),src.size()));
+
+ for (unsigned int i=0;i<m();i++)
+ {
+ for (unsigned int j=cols->rowstart[i]; j<cols->rowstart[i+1] ;j++)
+ {
+ int p = cols->colnums[j];
+ dst(p) += val[j] * src(i);
+ }
+ }
+}
+
+
+
template <typename number>
template <typename somenumber>
somenumber
}
+template <typename number>
+template <typename somenumber>
+void
+SparseMatrix<number>::SOR_step (Vector<somenumber> &v,
+ const Vector<somenumber> &b,
+ const number om) const
+{
+ Assert (cols != 0, ExcMatrixNotInitialized());
+ Assert (val != 0, ExcMatrixNotInitialized());
+ Assert (m() == n(), ExcMatrixNotSquare());
+ Assert (m() == v.size(), ExcDimensionsDontMatch(m(),v.size()));
+ Assert (m() == b.size(), ExcDimensionsDontMatch(m(),b.size()));
+
+ for (unsigned int row=0; row<m(); ++row)
+ {
+ somenumber s = b(row);
+ for (unsigned int j=cols->rowstart[row]; j<cols->rowstart[row+1]; ++j)
+ {
+ s -= val[j] * v(cols->colnums[j]);
+ }
+ v(row) += s * om / val[cols->rowstart[row]];
+ }
+}
+
+template <typename number>
+template <typename somenumber>
+void
+SparseMatrix<number>::TSOR_step (Vector<somenumber> &v,
+ const Vector<somenumber> &b,
+ const number om) const
+{
+ Assert (cols != 0, ExcMatrixNotInitialized());
+ Assert (val != 0, ExcMatrixNotInitialized());
+ Assert (m() == n(), ExcMatrixNotSquare());
+ Assert (m() == v.size(), ExcDimensionsDontMatch(m(),v.size()));
+ Assert (m() == b.size(), ExcDimensionsDontMatch(m(),b.size()));
+
+ for (int row=m()-1; row>=0; --row)
+ {
+ somenumber s = b(row);
+ for (unsigned int j=cols->rowstart[row]; j<cols->rowstart[row+1]; ++j)
+ {
+ s -= val[j] * v(cols->colnums[j]);
+ }
+ v(row) += s * om / val[cols->rowstart[row]];
+ }
+}
+
+template <typename number>
+template <typename somenumber>
+void
+SparseMatrix<number>::SSOR_step (Vector<somenumber> &v,
+ const Vector<somenumber> &b,
+ const number om) const
+{
+ SOR_step(v,b,om);
+ TSOR_step(v,b,om);
+}
+
template <typename number>
template <typename somenumber>
{
Assert (cols != 0, ExcMatrixNotInitialized());
Assert (val != 0, ExcMatrixNotInitialized());
+ Assert (m() == n(), ExcMatrixNotSquare());
+ Assert (m() == dst.size(), ExcDimensionsDontMatch(m(),dst.size()));
int p;
const unsigned int n = dst.size();
#define TYPE2 float
-template SparseMatrix<TYPEMAT> &
-SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
- const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template TYPE2
-SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
-
-template TYPE2 SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
-template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
+#include <lac/sparsematrix.2.templates>
#undef TYPE2
#define TYPE2 double
-template SparseMatrix<TYPEMAT> &
-SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
+#include <lac/sparsematrix.2.templates>
-template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
- const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template TYPE2
-SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
-
-template TYPE2 SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
+#undef TYPE2
+#define TYPE2 long double
-template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
-template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
+#include <lac/sparsematrix.2.templates>
#define TYPE2 float
-template SparseMatrix<TYPEMAT> &
-SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
- const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template TYPE2
-SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
-
-template TYPE2 SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
-template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
+#include <lac/sparsematrix.2.templates>
#undef TYPE2
#define TYPE2 double
-template SparseMatrix<TYPEMAT> &
-SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
+#include <lac/sparsematrix.2.templates>
-template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
- const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template double
-SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
-
-template double SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
+#undef TYPE2
+#define TYPE2 long double
-template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
-template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
+#include <lac/sparsematrix.2.templates>
#define TYPE2 float
-template SparseMatrix<TYPEMAT> &
-SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
- const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template TYPE2
-SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
-
-template TYPE2 SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
-template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
+#include <lac/sparsematrix.2.templates>
#undef TYPE2
#define TYPE2 double
-template SparseMatrix<TYPEMAT> &
-SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
- const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template TYPE2
-SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
-
-template TYPE2 SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
-template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
+#include <lac/sparsematrix.2.templates>
#undef TYPE2
#define TYPE2 long double
-template SparseMatrix<TYPEMAT> &
-SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
- const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template TYPE2
-SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
-
-template TYPE2 SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
-template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
-
-#undef TYPEMAT
-#define TYPEMAT double
-
-template SparseMatrix<TYPEMAT> &
-SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
- const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template TYPE2
-SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
-
-template TYPE2 SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
-template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
-
-#undef TYPEMAT
-#define TYPEMAT float
-
-template SparseMatrix<TYPEMAT> &
-SparseMatrix<TYPEMAT>::copy_from (const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::add_scaled (const TYPEMAT,
- const SparseMatrix<TYPE2> &);
-
-template void SparseMatrix<TYPEMAT>::vmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-template void SparseMatrix<TYPEMAT>::Tvmult (Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template TYPE2
-SparseMatrix<TYPEMAT>::matrix_norm (const Vector<TYPE2> &) const;
-
-template TYPE2 SparseMatrix<TYPEMAT>::residual (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- const Vector<TYPE2> &) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SSOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_SOR (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::precondition_Jacobi (Vector<TYPE2> &,
- const Vector<TYPE2> &,
- TYPEMAT) const;
-
-template void SparseMatrix<TYPEMAT>::SOR (Vector<TYPE2> &, TYPEMAT) const;
-template void SparseMatrix<TYPEMAT>::SSOR (Vector<TYPE2> &, TYPEMAT) const;
+#include <lac/sparsematrix.2.templates>