36 #ifndef NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_STORAGE_SMV_BSR_HPP 37 #define NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_STORAGE_SMV_BSR_HPP 93 const DataVectorType& val,
94 const IndexVectorType& indx,
95 const IndexVectorType& pntr);
154 DataVectorType &out);
156 DataVectorType &out);
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);
213 #endif //NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_STORAGE_SMV_BSR_HPP
Array< OneD, DataType > DataVectorType
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...
const IterType & operator*()
const DataVectorType & m_val
IndexType GetBlkSize() const
void MultiplyLight(const DataVectorType &in, DataVectorType &out)
const DataType & GetValue(IndexType row, IndexType column) const
DataType GetFillInRatio() const
const IndexVectorType & m_pntr
bool operator==(const const_iterator &rhs)
const_iterator & operator++()
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...
IndexType GetColumns() const
MultiplyKernel m_mvKernel
const_iterator begin() const
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.
void processBcoInput(const IndexType blkRows, const IndexType blkDim, const BCOMatType &bcoMat)
const IterType * operator->()
std::map< CoordType, BCOEntryType > BCOMatType
#define LIB_UTILITIES_EXPORT
IndexType GetRows() 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_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.
Array< OneD, const DataType > ConstDataVectorType
IndexType GetNumNonZeroEntries() const
const IndexVectorType & m_indx
CoordType storageIndexToFullCoord(IndexType storageIndex)
const_iterator(MatrixStorage matType, IndexType begin, IndexType end, IndexType blkDim, const DataVectorType &val, const IndexVectorType &indx, const IndexVectorType &pntr)
void(* MultiplyKernel)(const double *, const double *, double *)
Array< OneD, IndexType > IndexVectorType
bool operator!=(const const_iterator &rhs)
void Multiply(const DataType *in, DataType *out)
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs
size_t GetMemoryUsage() const
IndexType GetNumStoredDoubles() const
const_iterator end() const
std::pair< IndexType, IndexType > CoordType
1D Array of constant elements with garbage collection and bounds checking.
StorageSmvBsr(const IndexType blkRows, const IndexType blkCols, const IndexType blkDim, const BCOMatType &bcoMat, const MatrixStorage matType=eFULL)