From be454cbc84a8097d9016c3c41f7e2311f5c35e85 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Mon, 25 Jul 2016 12:30:30 +0200 Subject: [PATCH] transpose moved to dune-matrix-vector --- dune/solvers/common/arithmetic.hh | 95 +------------------------------ 1 file changed, 3 insertions(+), 92 deletions(-) diff --git a/dune/solvers/common/arithmetic.hh b/dune/solvers/common/arithmetic.hh index bee60bae..fee061f6 100644 --- a/dune/solvers/common/arithmetic.hh +++ b/dune/solvers/common/arithmetic.hh @@ -14,6 +14,7 @@ #include <dune/istl/scaledidmatrix.hh> #include <dune/matrix-vector/axpy.hh> +#include <dune/matrix-vector/transpose.hh> #include <dune/solvers/common/resize.hh> @@ -170,98 +171,8 @@ namespace Arithmetic } }; - template<class A> - struct TransposeHelper; - template <class MatrixType> - using Transposed = typename TransposeHelper<MatrixType>::TransposedType; - - template<class A> - struct TransposeHelper - { - typedef A TransposedType; - - static void transpose(const A& a, TransposedType& aT) - { - DUNE_UNUSED_PARAMETER(a); - DUNE_UNUSED_PARAMETER(aT); - DUNE_THROW(Dune::Exception, "Not implemented for general matrix types!"); - } - }; - - //! Specialization for Dune::FieldMatrix - template<class T, int n, int m> - struct TransposeHelper<Dune::FieldMatrix<T,n,m> > - { - typedef Dune::FieldMatrix<T,n,m> MatrixType; - typedef Dune::FieldMatrix<T,m,n> TransposedType; - - static void transpose(const MatrixType& a, TransposedType& aT) - { - for (int row = 0; row < m; ++row) - for (int col = 0 ; col < n; ++col) - aT[row][col] = a[col][row]; - } - }; - - template<class T, int n> - struct TransposeHelper<Dune::DiagonalMatrix<T,n> > - { - typedef Dune::DiagonalMatrix<T,n> MatrixType; - typedef Dune::DiagonalMatrix<T,n> TransposedType; - - static void transpose(const MatrixType& a, TransposedType& aT) - { - aT = a; - } - }; - - template<class T, int n> - struct TransposeHelper<Dune::ScaledIdentityMatrix<T,n> > - { - typedef Dune::ScaledIdentityMatrix<T,n> MatrixType; - typedef Dune::ScaledIdentityMatrix<T,n> TransposedType; - - static void transpose(const MatrixType& a, TransposedType& aT) - { - aT = a; - } - }; - - //! Specialization for Dune::BCRSMatrix Type - template<class A> - struct TransposeHelper<Dune::BCRSMatrix<A> > - { - typedef Dune::BCRSMatrix<Transposed<A> > TransposedType; - - static void transpose(const Dune::BCRSMatrix<A>& a, TransposedType& aT) - { - Dune::MatrixIndexSet idxSetaT(a.M(),a.N()); - - typedef typename Dune::BCRSMatrix<A>::ConstColIterator ColIterator; - - // add indices into transposed matrix - for (size_t row = 0; row < a.N(); ++row) - { - ColIterator col = a[row].begin(); - ColIterator end = a[row].end(); - - for ( ; col != end; ++col) - idxSetaT.add(col.index(),row); - } - - idxSetaT.exportIdx(aT); - - for (size_t row = 0; row < a.N(); ++row) - { - ColIterator col = a[row].begin(); - ColIterator end = a[row].end(); - - for ( ; col != end; ++col) - TransposeHelper<A>::transpose(*col, aT[col.index()][row]); - } - } - }; + using Transposed = typename Dune::MatrixVector::Transposed<MatrixType>; /** \brief Add a product to some matrix or vector * @@ -308,7 +219,7 @@ namespace Arithmetic template <class A> void transpose(const A& a, Transposed<A>& aT) { - TransposeHelper<A>::transpose(a,aT); + Dune::MatrixVector::transpose(a,aT); } /** \brief Add a scaled product to some matrix or vector -- GitLab