36 #ifndef NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_STORAGE_SMV_BSR_HPP
37 #define NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_STORAGE_SMV_BSR_HPP
170 const int* bindx,
const int* bpntrb,
const int* bpntre,
171 const double* b,
double* c);
174 const int* bindx,
const int* bpntrb,
const int* bpntre,
175 const double* b,
double* c);
178 const int* bindx,
const int* bpntrb,
const int* bpntre,
179 const double* b,
double* c);
182 const int* bindx,
const int* bpntrb,
const int* bpntre,
183 const double* b,
double* c);
186 const int* bindx,
const int* bpntrb,
const int* bpntre,
187 const double* b,
double* c);
#define LIB_UTILITIES_EXPORT
1D Array of constant elements with garbage collection and bounds checking.
bool operator!=(const const_iterator &rhs)
CoordType storageIndexToFullCoord(IndexType storageIndex)
const DataVectorType & m_val
bool operator==(const const_iterator &rhs)
const_iterator(MatrixStorage matType, IndexType begin, IndexType end, IndexType blkDim, const DataVectorType &val, const IndexVectorType &indx, const IndexVectorType &pntr)
const IterType & operator*()
const IndexVectorType & m_pntr
const_iterator & operator++()
const IterType * operator->()
const IndexVectorType & m_indx
StorageSmvBsr(const IndexType blkRows, const IndexType blkCols, const IndexType blkDim, const BCOMatType &bcoMat, const MatrixStorage matType=eFULL)
const_iterator end() const
IndexType GetNumNonZeroEntries() const
void MultiplyLight(const DataVectorType &in, DataVectorType &out)
void processBcoInput(const IndexType blkRows, const IndexType blkDim, const BCOMatType &bcoMat)
Array< OneD, const DataType > ConstDataVectorType
DataType GetFillInRatio() const
size_t GetMemoryUsage() const
void Multiply(const DataType *in, DataType *out)
IndexType GetColumns() const
void Multiply_generic(const int mb, const double *val, const int *bindx, const int *bpntrb, const int *bpntre, const double *b, double *c)
Generic zero-based BSR multiply for higher matrix ranks.
void Multiply_1x1(const int mb, const double *val, const int *bindx, const int *bpntrb, const int *bpntre, const double *b, double *c)
Zero-based CSR multiply. Essentially this is slightly modified copy-paste from NIST Sparse Blas 0....
IndexType GetBlkSize() const
void Multiply_2x2(const int mb, const double *val, const int *bindx, const int *bpntrb, const int *bpntre, const double *b, double *c)
Zero-based BSR multiply unrolled for 2x2 blocks. Essentially this is slightly optimised copy-paste fr...
void Multiply_4x4(const int mb, const double *val, const int *bindx, const int *bpntrb, const int *bpntre, const double *b, double *c)
Zero-based BSR multiply unrolled for 4x4 blocks.
void(* MultiplyKernel)(const double *, const double *, double *)
MultiplyKernel m_mvKernel
Array< OneD, IndexType > IndexVectorType
void Multiply_3x3(const int mb, const double *val, const int *bindx, const int *bpntrb, const int *bpntre, const double *b, double *c)
Zero-based BSR multiply unrolled for 3x3 blocks.
Array< OneD, DataType > DataVectorType
IndexType GetRows() const
const DataType & GetValue(IndexType row, IndexType column) const
const_iterator begin() const
IndexType GetNumStoredDoubles() const
The above copyright notice and this permission notice shall be included.
std::pair< IndexType, IndexType > CoordType
std::map< CoordType, BCOEntryType > BCOMatType