Commit bb9f42a1 authored by Oliver Sander's avatar Oliver Sander

Implement MatrixDimension for dense Matrices

parent 9e485731
Pipeline #15596 passed with stage
in 11 minutes and 37 seconds
......@@ -219,6 +219,40 @@ namespace Dune
}
};
// Default implementation for scalar types
template<typename B, typename TA>
struct MatrixDimension<Matrix<B,TA> >
{
using block_type = typename Matrix<B,TA>::block_type;
using size_type = typename Matrix<B,TA>::size_type;
static size_type rowdim (const Matrix<B,TA>& A, size_type i)
{
return MatrixDimension<block_type>::rowdim(A[i][0]);
}
static size_type coldim (const Matrix<B,TA>& A, size_type c)
{
return MatrixDimension<block_type>::coldim(A[0][c]);
}
static size_type rowdim (const Matrix<B,TA>& A)
{
size_type nn=0;
for (size_type i=0; i<A.N(); i++)
nn += rowdim(A,i);
return nn;
}
static size_type coldim (const Matrix<B,TA>& A)
{
size_type nn=0;
for (size_type i=0; i<A.M(); i++)
nn += coldim(A,i);
return nn;
}
};
template<typename B, typename TA>
struct MatrixDimension<BCRSMatrix<B,TA> >
......
......@@ -5,6 +5,7 @@
#include <dune/common/diagonalmatrix.hh>
#include <dune/istl/scaledidmatrix.hh>
#include <dune/istl/bcrsmatrix.hh>
#include <dune/istl/matrix.hh>
#include <dune/istl/io.hh>
#include "laplacian.hh"
......@@ -85,19 +86,37 @@ int main(int argc, char** argv)
Dune::writeVectorToMatlabHelper(v3, std::cout);
// Test the printmatrix method
// BCRSMatrix
{
Dune::BCRSMatrix<double> matrix;
setupLaplacian(matrix, 3);
Dune::printmatrix(std::cout, matrix, "matrix", "--");
Dune::printmatrix(std::cout, matrix, "BCRSMatrix<double>", "--");
}
{
Dune::BCRSMatrix<Dune::FieldMatrix<double,1,1> > matrix;
setupLaplacian(matrix, 3);
Dune::printmatrix(std::cout, matrix, "matrix", "--");
Dune::printmatrix(std::cout, matrix, "BCRSMatrix<FieldMatrix<double,1,1> >", "--");
}
{
Dune::BCRSMatrix<Dune::FieldMatrix<double,2,3> > matrix;
setupLaplacian(matrix, 3);
Dune::printmatrix(std::cout, matrix, "matrix", "--");
Dune::printmatrix(std::cout, matrix, "BCRSMatrix<FieldMatrix<double,2,3> >", "--");
}
// Matrix
{
Dune::Matrix<double> matrix(3,3);
matrix = 0;
Dune::printmatrix(std::cout, matrix, "Matrix<double>", "--");
}
{
Dune::Matrix<Dune::FieldMatrix<double,1,1> > matrix(3,3);
matrix = 0;
Dune::printmatrix(std::cout, matrix, "Matrix<FieldMatrix<double,1,1> >", "--");
}
{
Dune::Matrix<Dune::FieldMatrix<double,2,3> > matrix(3,3);
matrix = 0;
Dune::printmatrix(std::cout, matrix, "Matrix<FieldMatrix<double,2,3> >", "--");
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment