diff --git a/dune/solvers/transferoperators/truncatedcompressedmgtransfer.cc b/dune/solvers/transferoperators/truncatedcompressedmgtransfer.cc index 5b2694447faa95189506b701933491ec42e41ca7..38d1514c7c5e682775a823517deab3475827c7a9 100644 --- a/dune/solvers/transferoperators/truncatedcompressedmgtransfer.cc +++ b/dune/solvers/transferoperators/truncatedcompressedmgtransfer.cc @@ -1,5 +1,5 @@ -template<class DiscFuncType, class BitVectorType, class OperatorType> -void TruncatedCompressedMGTransfer<DiscFuncType, BitVectorType, OperatorType>::prolong(const DiscFuncType& f, DiscFuncType& t, +template<class VectorType, class BitVectorType, class MatrixType> +void TruncatedCompressedMGTransfer<VectorType, BitVectorType, MatrixType>::prolong(const VectorType& f, VectorType& t, const BitVectorType& critical) const { if (f.size() != this->matrix_->M()) @@ -12,8 +12,8 @@ void TruncatedCompressedMGTransfer<DiscFuncType, BitVectorType, OperatorType>::p t.resize(this->matrix_->N()); - typedef typename DiscFuncType::Iterator Iterator; - typedef typename DiscFuncType::ConstIterator ConstIterator; + typedef typename VectorType::Iterator Iterator; + typedef typename VectorType::ConstIterator ConstIterator; typedef typename TransferOperatorType::row_type RowType; typedef typename RowType::ConstIterator ColumnIterator; @@ -43,8 +43,8 @@ void TruncatedCompressedMGTransfer<DiscFuncType, BitVectorType, OperatorType>::p } } -template<class DiscFuncType, class BitVectorType, class OperatorType> -void TruncatedCompressedMGTransfer<DiscFuncType, BitVectorType, OperatorType>::restrict(const DiscFuncType& f, DiscFuncType& t, +template<class VectorType, class BitVectorType, class MatrixType> +void TruncatedCompressedMGTransfer<VectorType, BitVectorType, MatrixType>::restrict(const VectorType& f, VectorType& t, const BitVectorType& critical) const { if (f.size() != this->matrix_->N()) @@ -59,8 +59,8 @@ void TruncatedCompressedMGTransfer<DiscFuncType, BitVectorType, OperatorType>::r t.resize(this->matrix_->M()); t = 0; - typedef typename DiscFuncType::Iterator Iterator; - typedef typename DiscFuncType::ConstIterator ConstIterator; + typedef typename VectorType::Iterator Iterator; + typedef typename VectorType::ConstIterator ConstIterator; typedef typename TransferOperatorType::row_type RowType; typedef typename RowType::ConstIterator ColumnIterator; @@ -76,7 +76,7 @@ void TruncatedCompressedMGTransfer<DiscFuncType, BitVectorType, OperatorType>::r // The following lines are a matrix-vector loop, but rows belonging // to critical dofs are left out - typename DiscFuncType::block_type& tEntry = t[cIt.index()]; + typename VectorType::block_type& tEntry = t[cIt.index()]; for (int i=0; i<blocksize; i++) { if (!critical[rowIdx][i]) @@ -86,10 +86,9 @@ void TruncatedCompressedMGTransfer<DiscFuncType, BitVectorType, OperatorType>::r } } - -template<class DiscFuncType, class BitVectorType, class OperatorType> -void TruncatedCompressedMGTransfer<DiscFuncType, BitVectorType, OperatorType>:: -galerkinRestrict(const OperatorType& fineMat, OperatorType& coarseMat, +template<class VectorType, class BitVectorType, class MatrixType> +void TruncatedCompressedMGTransfer<VectorType, BitVectorType, MatrixType>:: +galerkinRestrict(const MatrixType& fineMat, MatrixType& coarseMat, const BitVectorType& critical) const { if (this->recompute_ != NULL && this->recompute_->size() != (unsigned int)this->matrix_->M()) @@ -99,7 +98,7 @@ galerkinRestrict(const OperatorType& fineMat, OperatorType& coarseMat, // //////////////////////// // Nonsymmetric case // //////////////////////// - typedef typename OperatorType::row_type RowType; + typedef typename MatrixType::row_type RowType; typedef typename RowType::Iterator ColumnIterator; typedef typename RowType::ConstIterator ConstColumnIterator; @@ -156,7 +155,7 @@ galerkinRestrict(const OperatorType& fineMat, OperatorType& coarseMat, if (this->recompute_ && !((*this->recompute_)[iv][0]) && !((*this->recompute_)[jv][0])) continue; - typename OperatorType::block_type& cm = coarseMat[iv][jv]; + typename MatrixType::block_type& cm = coarseMat[iv][jv]; // Compute im * m * jm, but omitting the critical entries for (int i=0; i<blocksize; i++) {