Program Listing for File SellMatrix.h
↰ Return to documentation for file (ADS/numeric/SellMatrix.h)
/*--------------------------------------------------------------------------*/
/*---------------------------- File SellMatrix.h ---------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/
#ifndef __ADS_SellMatrix
#define __ADS_SellMatrix
/* self-identification: #endif constant */
/*--------------------------------------------------------------------------*/
/*------------------------------ INCLUDES ----------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/Contract.h"
#include "ADS/numeric/CsrMatrix.h"
#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <numeric>
#include <vector>
/*--------------------------------------------------------------------------*/
/*--------------------------- NAMESPACE ------------------------------------*/
/*--------------------------------------------------------------------------*/
namespace ADS {
/*--------------------------------------------------------------------------*/
/*---------------------------- CLASS SellMatrix ----------------------------*/
/*--------------------------------------------------------------------------*/
template< std::size_t C = 4 >
class SellMatrix {
static_assert( ( C >= 1 ) && ( ( C & ( C - 1 ) ) == 0 ) ,
"the rows of a chunk are a power of 2" );
public:
explicit SellMatrix( const CsrMatrix & A , std::size_t sigma = 256 );
[[nodiscard]] std::size_t rows( void ) const { return( f_m ); }
[[nodiscard]] std::size_t cols( void ) const { return( f_n ); }
[[nodiscard]] std::size_t nonzeros( void ) const { return( f_nnz ); }
[[nodiscard]] std::size_t places( void ) const { return( f_val.size() ); }
void multiply( const double * x , double * y ) const;
void multiply( const double * x , double * y , std::size_t first ,
std::size_t last ) const;
[[nodiscard]] std::size_t chunks( void ) const {
return( f_start.size() - 1 );
}
[[nodiscard]] std::size_t chunkStart( std::size_t c ) const {
return( f_start[ c ] );
}
[[nodiscard]] std::vector< double > multiply(
const std::vector< double > & x ) const;
private:
std::size_t f_m , f_n , f_nnz;
std::vector< std::size_t > f_start;
std::vector< std::uint32_t > f_perm;
std::vector< std::uint32_t > f_col;
std::vector< double > f_val;
}; // end( class SellMatrix )
/*--------------------------------------------------------------------------*/
} // end( namespace ADS )
/*--------------------------------------------------------------------------*/
/*-------------------------- IMPLEMENTATION --------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/numeric/impl/SellMatrix.tpp"
/*--------------------------------------------------------------------------*/
#endif /* SellMatrix.h included */
/*--------------------------------------------------------------------------*/
/*------------------------- End File SellMatrix.h --------------------------*/
/*--------------------------------------------------------------------------*/