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 --------------------------*/
/*--------------------------------------------------------------------------*/