From 37d96efc72cddf288234c60425be617263b22ef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Oberhuber?= <oberhuber.tomas@gmail.com> Date: Mon, 1 Feb 2021 16:29:24 +0100 Subject: [PATCH] Added column indexes getter to sparse matrix, fixing documentation in sparse matrix view. --- src/TNL/Matrices/SparseMatrix.h | 14 +++++ src/TNL/Matrices/SparseMatrix.hpp | 31 ++++++++++ src/TNL/Matrices/SparseMatrixView.h | 87 +++++++++++++++++++++++++-- src/TNL/Matrices/SparseMatrixView.hpp | 52 ++++++++++++++++ 4 files changed, 178 insertions(+), 6 deletions(-) diff --git a/src/TNL/Matrices/SparseMatrix.h b/src/TNL/Matrices/SparseMatrix.h index b5125c3bd2..69e02d3c89 100644 --- a/src/TNL/Matrices/SparseMatrix.h +++ b/src/TNL/Matrices/SparseMatrix.h @@ -983,6 +983,20 @@ class SparseMatrix : public Matrix< Real, Device, Index, RealAllocator > */ const SegmentsType& getSegments() const; + /** + * \brief Getter of column indexes for constant instances. + * + * \return Constant reference to a vector with matrix elements column indexes. + */ + const ColumnsIndexesVectorType& getColumnIndexes() const; + + /** + * \brief Getter of column indexes for nonconstant instances. + * + * \return Reference to a vector with matrix elements column indexes. + */ + ColumnsIndexesVectorType& getColumnIndexes(); + protected: ColumnsIndexesVectorType columnIndexes; diff --git a/src/TNL/Matrices/SparseMatrix.hpp b/src/TNL/Matrices/SparseMatrix.hpp index 87c8c4a50f..856d52983a 100644 --- a/src/TNL/Matrices/SparseMatrix.hpp +++ b/src/TNL/Matrices/SparseMatrix.hpp @@ -1172,5 +1172,36 @@ getSegments() const -> const SegmentsType& return this->segments; } +template< typename Real, + typename Device, + typename Index, + typename MatrixType, + template< typename, typename, typename > class Segments, + typename ComputeReal, + typename RealAllocator, + typename IndexAllocator > +auto +SparseMatrix< Real, Device, Index, MatrixType, Segments, ComputeReal, RealAllocator, IndexAllocator >:: +getColumnIndexes() const -> const ColumnsIndexesVectorType& +{ + return this->columnIndexes; +} + +template< typename Real, + typename Device, + typename Index, + typename MatrixType, + template< typename, typename, typename > class Segments, + typename ComputeReal, + typename RealAllocator, + typename IndexAllocator > +auto +SparseMatrix< Real, Device, Index, MatrixType, Segments, ComputeReal, RealAllocator, IndexAllocator >:: +getColumnIndexes() -> ColumnsIndexesVectorType& +{ + return this->columnIndexes; +} + + } // namespace Matrices } // namespace TNL diff --git a/src/TNL/Matrices/SparseMatrixView.h b/src/TNL/Matrices/SparseMatrixView.h index 8b75620f76..77dc11f157 100644 --- a/src/TNL/Matrices/SparseMatrixView.h +++ b/src/TNL/Matrices/SparseMatrixView.h @@ -619,16 +619,16 @@ class SparseMatrixView : public MatrixView< Real, Device, Index > /** * \brief Computes product of matrix and vector. - * + * * More precisely, it computes: - * + * * `outVector = matrixMultiplicator * ( * this ) * inVector + outVectorMultiplicator * outVector` - * + * * \tparam InVector is type of input vector. It can be \ref Vector, * \ref VectorView, \ref Array, \ref ArraView or similar container. * \tparam OutVector is type of output vector. It can be \ref Vector, * \ref VectorView, \ref Array, \ref ArraView or similar container. - * + * * \param inVector is input vector. * \param outVector is output vector. * \param matrixMultiplicator is a factor by which the matrix is multiplied. It is one by default. @@ -654,20 +654,95 @@ class SparseMatrixView : public MatrixView< Real, Device, Index > Vector2& x, const RealType& omega = 1.0 ) const; + /** + * \brief Assignment of any matrix type. + * . + * \param matrix is input matrix for the assignment. + * \return reference to this matrix. + */ SparseMatrixView& operator=( const SparseMatrixView& matrix ); + /** + * \brief Comparison operator with another arbitrary matrix type. + * + * \param matrix is the right-hand side matrix. + * \return \e true if the RHS matrix is equal, \e false otherwise. + */ template< typename Matrix > bool operator==( const Matrix& m ) const; + /** + * \brief Comparison operator with another arbitrary matrix type. + * + * \param matrix is the right-hand side matrix. + * \return \e true if the RHS matrix is equal, \e false otherwise. + */ template< typename Matrix > bool operator!=( const Matrix& m ) const; - void save( File& file ) const; - + /** + * \brief Method for saving the matrix to the file with given filename. + * + * \param fileName is name of the file. + */ void save( const String& fileName ) const; + /** + * \brief Method for saving the matrix to a file. + * + * \param file is the output file. + */ + void save( File& file ) const; + + /** + * \brief Method for printing the matrix to output stream. + * + * \param str is the output stream. + */ void print( std::ostream& str ) const; + /** + * \brief Getter of segments for non-constant instances. + * + * \e Segments are a structure for addressing the matrix elements columns and values. + * In fact, \e Segments represent the sparse matrix format. + * + * \return Non-constant reference to segments. + */ + SegmentsViewType& getSegments(); + + /** + * \brief Getter of segments for constant instances. + * + * \e Segments are a structure for addressing the matrix elements columns and values. + * In fact, \e Segments represent the sparse matrix format. + * + * \return Constant reference to segments. + */ + const SegmentsViewType& getSegments() const; + + /** + * \brief Getter of column indexes for constant instances. + * + * \return Constant reference to a vector with matrix elements column indexes. + */ + const ColumnsIndexesViewType& getColumnIndexes() const; + + /** + * \brief Getter of column indexes for nonconstant instances. + * + * \return Reference to a vector with matrix elements column indexes. + */ + ColumnsIndexesViewType& getColumnIndexes(); + + /** + * \brief Returns a padding index value. + * + * Padding index is used for column indexes of padding zeros. Padding zeros + * are used in some sparse matrix formats for better data alignment in memory. + * + * \return value of the padding index. + */ __cuda_callable__ IndexType getPaddingIndex() const; diff --git a/src/TNL/Matrices/SparseMatrixView.hpp b/src/TNL/Matrices/SparseMatrixView.hpp index aa87ab532c..8007ebd269 100644 --- a/src/TNL/Matrices/SparseMatrixView.hpp +++ b/src/TNL/Matrices/SparseMatrixView.hpp @@ -855,5 +855,57 @@ getPaddingIndex() const return -1; } +template< typename Real, + typename Device, + typename Index, + typename MatrixType, + template< typename, typename > class SegmentsView, + typename ComputeReal > +auto +SparseMatrixView< Real, Device, Index, MatrixType, SegmentsView, ComputeReal >:: +getSegments() const -> const SegmentsViewType& +{ + return this->segments; +} + +template< typename Real, + typename Device, + typename Index, + typename MatrixType, + template< typename, typename > class SegmentsView, + typename ComputeReal > +auto +SparseMatrixView< Real, Device, Index, MatrixType, SegmentsView, ComputeReal >:: +getSegments() -> SegmentsViewType& +{ + return this->segments; +} + +template< typename Real, + typename Device, + typename Index, + typename MatrixType, + template< typename, typename > class SegmentsView, + typename ComputeReal > +auto +SparseMatrixView< Real, Device, Index, MatrixType, SegmentsView, ComputeReal >:: +getColumnIndexes() const -> const ColumnsIndexesViewType& +{ + return this->columnIndexes; +} + +template< typename Real, + typename Device, + typename Index, + typename MatrixType, + template< typename, typename > class SegmentsView, + typename ComputeReal > +auto +SparseMatrixView< Real, Device, Index, MatrixType, SegmentsView, ComputeReal >:: +getColumnIndexes() -> ColumnsIndexesViewType& +{ + return this->columnIndexes; +} + } //namespace Matrices } // namespace TNL -- GitLab