Loading src/TNL/Matrices/DenseMatrix.h +104 −104 Original line number Diff line number Diff line Loading @@ -432,110 +432,6 @@ class DenseMatrix : public Matrix< Real, Device, Index, RealAllocator > Real getElement( const IndexType row, const IndexType column ) const; /** * \brief Method for performing general reduction on matrix rows. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param begin defines beginning of the range [begin,end) of rows to be processed. * \param end defines ending of the range [begin,end) of rows to be processed. * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_rowsReduction.cpp * \par Output * \include DenseMatrixExample_rowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchValue > void rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchValue& zero ); /** * \brief Method for performing general reduction on matrix rows for constant instances. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param begin defines beginning of the range [begin,end) of rows to be processed. * \param end defines ending of the range [begin,end) of rows to be processed. * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_rowsReduction.cpp * \par Output * \include DenseMatrixExample_rowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchValue > void rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchValue& zero ) const; /** * \brief Method for performing general reduction on ALL matrix rows. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_allRowsReduction.cpp * \par Output * \include DenseMatrixExample_allRowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchReal > void allRowsReduction( Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchReal& zero ); /** * \brief Method for performing general reduction on ALL matrix rows for constant instances. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_allRowsReduction.cpp * \par Output * \include DenseMatrixExample_allRowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchReal > void allRowsReduction( Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchReal& zero ) const; /** * \brief Method for iteration over all matrix rows for constant instances. * Loading Loading @@ -768,6 +664,110 @@ class DenseMatrix : public Matrix< Real, Device, Index, RealAllocator > template< typename Function > void sequentialForAllRows( Function& function ); /** * \brief Method for performing general reduction on matrix rows. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param begin defines beginning of the range [begin,end) of rows to be processed. * \param end defines ending of the range [begin,end) of rows to be processed. * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_rowsReduction.cpp * \par Output * \include DenseMatrixExample_rowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchValue > void rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchValue& zero ); /** * \brief Method for performing general reduction on matrix rows for constant instances. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param begin defines beginning of the range [begin,end) of rows to be processed. * \param end defines ending of the range [begin,end) of rows to be processed. * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_rowsReduction.cpp * \par Output * \include DenseMatrixExample_rowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchValue > void rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchValue& zero ) const; /** * \brief Method for performing general reduction on ALL matrix rows. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_allRowsReduction.cpp * \par Output * \include DenseMatrixExample_allRowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchReal > void allRowsReduction( Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchReal& zero ); /** * \brief Method for performing general reduction on ALL matrix rows for constant instances. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_allRowsReduction.cpp * \par Output * \include DenseMatrixExample_allRowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchReal > void allRowsReduction( Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchReal& zero ) const; /** * \brief Computes product of matrix and vector. * Loading src/TNL/Matrices/DenseMatrix.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -119,9 +119,10 @@ auto DenseMatrix< Real, Device, Index, Organization, RealAllocator >:: getConstView() const -> ConstViewType { DenseMatrix* this_ptr = const_cast< DenseMatrix* >( this ); return ConstViewType( this->getRows(), this->getColumns(), this->getValues().getConstView() ); this_ptr->getValues().getView() ); } template< typename Real, Loading src/TNL/Matrices/MatrixView.h +1 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ class MatrixView : public Object using RowsCapacitiesType = Containers::Vector< Index, Device, Index >; using RowsCapacitiesTypeView = Containers::VectorView< Index, Device, Index >; using ConstRowsCapacitiesTypeView = typename RowsCapacitiesTypeView::ConstViewType; using ValuesView = Containers::VectorView< Real, Device, Index >; using ValuesView = Containers::VectorView< std::remove_const_t< Real >, Device, Index >; /** * \brief The type of matrix elements. Loading src/TNL/Matrices/MatrixWriter.hpp +11 −5 Original line number Diff line number Diff line Loading @@ -152,13 +152,19 @@ writeMtx( std::ostream& str, str << std::setw( 9 ) << matrix.getRows() << " " << std::setw( 9 ) << matrix.getColumns() << " " << std::setw( 12 ) << matrix.getNonzeroElementsCount() << std::endl; std::ostream* str_ptr = &str; auto cout_ptr = &std::cout; auto f = [=] __cuda_callable__ ( IndexType rowIdx, IndexType localIdx, IndexType columnIdx, RealType value, bool& compute ) mutable { auto f = [=] __cuda_callable__ ( const typename Matrix::ConstRowViewType& row ) mutable { auto rowIdx = row.getRowIndex(); for( IndexType localIdx = 0; localIdx < row.getSize(); localIdx++ ) { IndexType columnIdx = row.getColumnIndex( localIdx ); RealType value = row.getValue( localIdx ); if( value != 0 ) { *str_ptr << std::setw( 9 ) << rowIdx + 1 << std::setw( 9 ) << columnIdx + 1 << std::setw( 12 ) << value << std::endl; if( verbose ) *cout_ptr << "Drawing the row " << rowIdx << " \r" << std::flush; } } }; matrix.sequentialForAllRows( f ); } Loading src/TNL/Matrices/SparseMatrix.h +5 −5 Original line number Diff line number Diff line Loading @@ -61,14 +61,14 @@ class SparseMatrix : public Matrix< Real, Device, Index, RealAllocator > // Supporting types - they are not important for the user using BaseType = Matrix< Real, Device, Index, RealAllocator >; using ValuesVectorType = typename Matrix< Real, Device, Index, RealAllocator >::ValuesVectorType; using ValuesVectorType = typename Matrix< std::remove_const_t< Real >, Device, Index, RealAllocator >::ValuesVectorType; using ValuesViewType = typename ValuesVectorType::ViewType; using ConstValuesViewType = typename ValuesViewType::ConstViewType; using ColumnsIndexesVectorType = Containers::Vector< Index, Device, Index, IndexAllocator >; using ColumnsIndexesVectorType = Containers::Vector< std::remove_const_t< Index >, Device, Index, IndexAllocator >; using ColumnsIndexesViewType = typename ColumnsIndexesVectorType::ViewType; using ConstColumnsIndexesViewType = typename ColumnsIndexesViewType::ConstViewType; using RowsCapacitiesType = Containers::Vector< Index, Device, Index, IndexAllocator >; using RowsCapacitiesView = Containers::VectorView< Index, Device, Index >; using RowsCapacitiesType = Containers::Vector< std::remove_const_t< Index >, Device, Index, IndexAllocator >; using RowsCapacitiesView = Containers::VectorView< std::remove_const_t< Index >, Device, Index >; using ConstRowsCapacitiesView = typename RowsCapacitiesView::ConstViewType; /** Loading @@ -88,7 +88,7 @@ class SparseMatrix : public Matrix< Real, Device, Index, RealAllocator > /** * \brief The type of matrix elements. */ using RealType = Real; using RealType = std::remove_const_t< Real >; using ComputeRealType = ComputeReal; Loading Loading
src/TNL/Matrices/DenseMatrix.h +104 −104 Original line number Diff line number Diff line Loading @@ -432,110 +432,6 @@ class DenseMatrix : public Matrix< Real, Device, Index, RealAllocator > Real getElement( const IndexType row, const IndexType column ) const; /** * \brief Method for performing general reduction on matrix rows. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param begin defines beginning of the range [begin,end) of rows to be processed. * \param end defines ending of the range [begin,end) of rows to be processed. * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_rowsReduction.cpp * \par Output * \include DenseMatrixExample_rowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchValue > void rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchValue& zero ); /** * \brief Method for performing general reduction on matrix rows for constant instances. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param begin defines beginning of the range [begin,end) of rows to be processed. * \param end defines ending of the range [begin,end) of rows to be processed. * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_rowsReduction.cpp * \par Output * \include DenseMatrixExample_rowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchValue > void rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchValue& zero ) const; /** * \brief Method for performing general reduction on ALL matrix rows. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_allRowsReduction.cpp * \par Output * \include DenseMatrixExample_allRowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchReal > void allRowsReduction( Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchReal& zero ); /** * \brief Method for performing general reduction on ALL matrix rows for constant instances. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_allRowsReduction.cpp * \par Output * \include DenseMatrixExample_allRowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchReal > void allRowsReduction( Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchReal& zero ) const; /** * \brief Method for iteration over all matrix rows for constant instances. * Loading Loading @@ -768,6 +664,110 @@ class DenseMatrix : public Matrix< Real, Device, Index, RealAllocator > template< typename Function > void sequentialForAllRows( Function& function ); /** * \brief Method for performing general reduction on matrix rows. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param begin defines beginning of the range [begin,end) of rows to be processed. * \param end defines ending of the range [begin,end) of rows to be processed. * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_rowsReduction.cpp * \par Output * \include DenseMatrixExample_rowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchValue > void rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchValue& zero ); /** * \brief Method for performing general reduction on matrix rows for constant instances. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param begin defines beginning of the range [begin,end) of rows to be processed. * \param end defines ending of the range [begin,end) of rows to be processed. * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_rowsReduction.cpp * \par Output * \include DenseMatrixExample_rowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchValue > void rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchValue& zero ) const; /** * \brief Method for performing general reduction on ALL matrix rows. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_allRowsReduction.cpp * \par Output * \include DenseMatrixExample_allRowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchReal > void allRowsReduction( Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchReal& zero ); /** * \brief Method for performing general reduction on ALL matrix rows for constant instances. * * \tparam Fetch is a type of lambda function for data fetch declared as * `fetch( IndexType rowIdx, IndexType columnIdx, RealType elementValue ) -> FetchValue`. * The return type of this lambda can be any non void. * \tparam Reduce is a type of lambda function for reduction declared as * `reduce( const FetchValue& v1, const FetchValue& v2 ) -> FetchValue`. * \tparam Keep is a type of lambda function for storing results of reduction in each row. * It is declared as `keep( const IndexType rowIdx, const double& value )`. * \tparam FetchValue is type returned by the Fetch lambda function. * * \param fetch is an instance of lambda function for data fetch. * \param reduce is an instance of lambda function for reduction. * \param keep in an instance of lambda function for storing results. * \param zero is zero of given reduction operation also known as idempotent element. * * \par Example * \include Matrices/DenseMatrix/DenseMatrixExample_allRowsReduction.cpp * \par Output * \include DenseMatrixExample_allRowsReduction.out */ template< typename Fetch, typename Reduce, typename Keep, typename FetchReal > void allRowsReduction( Fetch& fetch, const Reduce& reduce, Keep& keep, const FetchReal& zero ) const; /** * \brief Computes product of matrix and vector. * Loading
src/TNL/Matrices/DenseMatrix.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -119,9 +119,10 @@ auto DenseMatrix< Real, Device, Index, Organization, RealAllocator >:: getConstView() const -> ConstViewType { DenseMatrix* this_ptr = const_cast< DenseMatrix* >( this ); return ConstViewType( this->getRows(), this->getColumns(), this->getValues().getConstView() ); this_ptr->getValues().getView() ); } template< typename Real, Loading
src/TNL/Matrices/MatrixView.h +1 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ class MatrixView : public Object using RowsCapacitiesType = Containers::Vector< Index, Device, Index >; using RowsCapacitiesTypeView = Containers::VectorView< Index, Device, Index >; using ConstRowsCapacitiesTypeView = typename RowsCapacitiesTypeView::ConstViewType; using ValuesView = Containers::VectorView< Real, Device, Index >; using ValuesView = Containers::VectorView< std::remove_const_t< Real >, Device, Index >; /** * \brief The type of matrix elements. Loading
src/TNL/Matrices/MatrixWriter.hpp +11 −5 Original line number Diff line number Diff line Loading @@ -152,13 +152,19 @@ writeMtx( std::ostream& str, str << std::setw( 9 ) << matrix.getRows() << " " << std::setw( 9 ) << matrix.getColumns() << " " << std::setw( 12 ) << matrix.getNonzeroElementsCount() << std::endl; std::ostream* str_ptr = &str; auto cout_ptr = &std::cout; auto f = [=] __cuda_callable__ ( IndexType rowIdx, IndexType localIdx, IndexType columnIdx, RealType value, bool& compute ) mutable { auto f = [=] __cuda_callable__ ( const typename Matrix::ConstRowViewType& row ) mutable { auto rowIdx = row.getRowIndex(); for( IndexType localIdx = 0; localIdx < row.getSize(); localIdx++ ) { IndexType columnIdx = row.getColumnIndex( localIdx ); RealType value = row.getValue( localIdx ); if( value != 0 ) { *str_ptr << std::setw( 9 ) << rowIdx + 1 << std::setw( 9 ) << columnIdx + 1 << std::setw( 12 ) << value << std::endl; if( verbose ) *cout_ptr << "Drawing the row " << rowIdx << " \r" << std::flush; } } }; matrix.sequentialForAllRows( f ); } Loading
src/TNL/Matrices/SparseMatrix.h +5 −5 Original line number Diff line number Diff line Loading @@ -61,14 +61,14 @@ class SparseMatrix : public Matrix< Real, Device, Index, RealAllocator > // Supporting types - they are not important for the user using BaseType = Matrix< Real, Device, Index, RealAllocator >; using ValuesVectorType = typename Matrix< Real, Device, Index, RealAllocator >::ValuesVectorType; using ValuesVectorType = typename Matrix< std::remove_const_t< Real >, Device, Index, RealAllocator >::ValuesVectorType; using ValuesViewType = typename ValuesVectorType::ViewType; using ConstValuesViewType = typename ValuesViewType::ConstViewType; using ColumnsIndexesVectorType = Containers::Vector< Index, Device, Index, IndexAllocator >; using ColumnsIndexesVectorType = Containers::Vector< std::remove_const_t< Index >, Device, Index, IndexAllocator >; using ColumnsIndexesViewType = typename ColumnsIndexesVectorType::ViewType; using ConstColumnsIndexesViewType = typename ColumnsIndexesViewType::ConstViewType; using RowsCapacitiesType = Containers::Vector< Index, Device, Index, IndexAllocator >; using RowsCapacitiesView = Containers::VectorView< Index, Device, Index >; using RowsCapacitiesType = Containers::Vector< std::remove_const_t< Index >, Device, Index, IndexAllocator >; using RowsCapacitiesView = Containers::VectorView< std::remove_const_t< Index >, Device, Index >; using ConstRowsCapacitiesView = typename RowsCapacitiesView::ConstViewType; /** Loading @@ -88,7 +88,7 @@ class SparseMatrix : public Matrix< Real, Device, Index, RealAllocator > /** * \brief The type of matrix elements. */ using RealType = Real; using RealType = std::remove_const_t< Real >; using ComputeRealType = ComputeReal; Loading