From d0abc04354328f2687140d0f80acd71261f196c6 Mon Sep 17 00:00:00 2001 From: Lisa Julia Nebel <lisa_julia.nebel@tu-dresden.de> Date: Wed, 10 May 2023 15:01:34 +0200 Subject: [PATCH] Add printSparseMatrix method for ScaledIdentityMatrix --- dune/istl/io.hh | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/dune/istl/io.hh b/dune/istl/io.hh index f0f22c034..f478bee7e 100644 --- a/dune/istl/io.hh +++ b/dune/istl/io.hh @@ -267,13 +267,13 @@ namespace Dune { * @param width The number of nonzero blocks to print in one line. * @param precision The precision to use when printing the numbers. */ - template<class B, int n, int m, class A> + template<class A, class InnerMatrixType> void printSparseMatrix(std::ostream& s, - const BCRSMatrix<FieldMatrix<B,n,m>,A>& mat, + const BCRSMatrix<InnerMatrixType,A>& mat, std::string title, std::string rowtext, int width=3, int precision=2) { - typedef BCRSMatrix<FieldMatrix<B,n,m>,A> Matrix; + typedef BCRSMatrix<InnerMatrixType,A> Matrix; // remember old flags std::ios_base::fmtflags oldflags = s.flags(); // set the output format @@ -290,6 +290,8 @@ namespace Dune { typedef typename Matrix::ConstRowIterator Row; + int n = InnerMatrixType::rows; + int m = InnerMatrixType::cols; for(Row row=mat.begin(); row != mat.end(); ++row) { int skipcols=0; bool reachedEnd=false; @@ -323,7 +325,7 @@ namespace Dune { } for(int innercol=0; innercol < m; ++innercol) { s.width(9); - s<<(*col)[innerrow][innercol]<<" "; + printInnerMatrixElement(s,*col,innerrow,innercol); } s<<"|"; @@ -344,6 +346,25 @@ namespace Dune { s.precision(oldprec); } + template<class B, int n> + void printInnerMatrixElement(std::ostream& s, + const ScaledIdentityMatrix<B,n> innerMatrixElement, + int innerrow, int innercol) + { + if (innerrow == innercol) + s<<innerMatrixElement.scalar()<<" "; + else + s<<"-"; + } + + template<class B, int n, int m, class A> + void printInnerMatrixElement(std::ostream& s, + const FieldMatrix<B,n,m> innerMatrixElement, + int innerrow, int innercol) + { + s<<innerMatrixElement[innerrow][innercol]<<" "; + } + namespace { template<typename T> -- GitLab