Provided by: librsb-dev_1.3.0.2+dfsg-4_amd64 bug

NAME

       RsbMatrix - Represent a sparse matrix in RSB format by means of librsb.

SYNOPSIS

       #include <rsb.hpp>

   Public Types
       enum RsbSym { IsGen = RSB_FLAG_NOFLAGS, IsHer = RSB_FLAG_HERMITIAN, IsSym =
           RSB_FLAG_SYMMETRIC, IsTri = RSB_FLAG_TRIANGULAR }

   Public Member Functions
       RsbMatrix (rsb_coo_idx_t nrA, rsb_coo_idx_t ncA, const RsbSym sym=IsGen)
       RsbMatrix (rsb_coo_idx_t nrA, const rsb_coo_idx_t *RP, const rsb_coo_idx_t *JA, const NT
           *VA, const RsbSym sym=IsGen)
       RsbMatrix (const rsb_coo_idx_t *IA, const rsb_coo_idx_t *JA, const NT *VA, rsb_nnz_idx_t
           nnzA, const rsb_flags_t flagsA=RSB_FLAG_NOFLAGS)
       RsbMatrix (const rsb_char_t *filename, const RsbSym sym=IsGen)
       RsbMatrix (const RsbMatrix &A_Rsb, bool do_trans=false, rsb_flags_t
           flagsA=RSB_FLAG_NOFLAGS)
       RsbMatrix (RsbMatrix &&other)
       ~RsbMatrix (void)
       RSBP_RVT RSBP_DEPRECATED Err_t _add (rsb_coo_idx_t i, rsb_coo_idx_t j, NT val)
       RSBP_RVT Err_t close (void)
       RSBP_RVT RSBP_DEPRECATED Err_t _close (void)
       RSBP_RVT RSBP_DEPRECATED Err_t spmv (rsb_trans_t transA, const NT *alphap, const NT *Xp,
           rsb_coo_idx_t incX, const NT *betap, NT *Yp, rsb_coo_idx_t incY) const
       RSBP_RVT Err_t spmv (rsb_trans_t transA, const NT alpha, const NT *Xp, rsb_coo_idx_t incX,
           const NT beta, NT *Yp, rsb_coo_idx_t incY) const
       RSBP_RVT Err_t spmv (rsb_trans_t transA, const NT alpha, const NT *Xp, const NT beta, NT
           *Yp) const
       RSBP_RVT Err_t spmv (NT *y, const NT *x, bool do_trans=false) const
       RSBP_RVT RSBP_DEPRECATED Err_t spmm (rsb_trans_t transA, const NT *alphap, rsb_coo_idx_t
           nrhs, rsb_flags_t order, const NT *Bp, rsb_nnz_idx_t ldB, const NT *betap, NT *Cp,
           rsb_nnz_idx_t ldC) const
       RSBP_RVT Err_t spmm (rsb_trans_t transA, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t
           order, const NT *Bp, rsb_nnz_idx_t ldB, const NT beta, NT *Cp, rsb_nnz_idx_t ldC)
           const
       RSBP_RVT Err_t spmm (rsb_trans_t transA, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t
           order, const NT *Bp, const NT beta, NT *Cp) const
       RSBP_RVT RSBP_DEPRECATED Err_t spsm (rsb_trans_t transT, const NT *alphap, rsb_coo_idx_t
           nrhs, rsb_flags_t order, const NT *betap, const NT *Bp, rsb_nnz_idx_t ldB, NT *Cp,
           rsb_nnz_idx_t ldC) const
       RSBP_RVT Err_t spsm (rsb_trans_t transT, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t
           order, const NT beta, const NT *Bp, rsb_nnz_idx_t ldB, NT *Cp, rsb_nnz_idx_t ldC)
           const
       RSBP_RVT Err_t spsm (rsb_trans_t transT, const NT alpha, rsb_coo_idx_t nrhs, const NT *Bp,
           NT *Cp) const
       RSBP_RVT Err_t spsm (NT *y, const NT *x, rsb_coo_idx_t nrhs, bool do_trans=false) const
       RSBP_RVT Err_t spsm (NT *y, rsb_coo_idx_t nrhs, bool do_trans=false) const
       RSBP_RVT RSBP_DEPRECATED Err_t spsv (rsb_trans_t transT, const NT *alphap, const NT *Xp,
           rsb_coo_idx_t incX, NT *Yp, rsb_coo_idx_t incY) const
       RSBP_RVT Err_t spsv (rsb_trans_t transT, const NT alpha, const NT *Xp, NT *Yp) const
       RSBP_RVT Err_t spsv (NT *y, const NT *x, bool do_trans=false) const
       RSBP_RVT Err_t spsv (NT *y, bool do_trans=false) const
       size_t get_info_size_t (enum rsb_mif_t mif) const
       rsb_flags_t get_info_rsb_flags_t (enum rsb_mif_t mif) const
       rsb_blk_idx_t get_info_blk_t (enum rsb_mif_t mif) const
       rsb_nnz_idx_t get_info_nnz_t (enum rsb_mif_t mif) const
       rsb_flags_t get_flags_t (enum rsb_mif_t mif) const
       rsb_type_t get_type_t (enum rsb_mif_t mif) const
       rsb_coo_idx_t get_info_coo_t (enum rsb_mif_t mif) const
       size_t _get_index_storage_bytes (void) const
       size_t _get_storage_bytes (void) const
       rsb_nnz_idx_t nnz (void) const
       rsb_blk_idx_t blocks (void) const
       rsb_coo_idx_t rows (void) const
       rsb_coo_idx_t cols (void) const
       RSBP_RVT Err_t get_vals (NT *VA, const rsb_coo_idx_t *IA, const rsb_coo_idx_t *JA,
           rsb_nnz_idx_t nnz, rsb_flags_t flags) const
       NT get_val (const rsb_coo_idx_t i, const rsb_coo_idx_t j, rsb_flags_t
           flags=RSB_FLAG_NOFLAGS) const
       RSBP_RVT Err_t set_val (const NT val, const rsb_coo_idx_t i, const rsb_coo_idx_t j,
           rsb_flags_t flags=RSB_FLAG_NOFLAGS)
       RSBP_RVT Err_t set_vals (const NT *VA, const rsb_coo_idx_t *IA, const rsb_coo_idx_t *JA,
           rsb_nnz_idx_t nnz, rsb_flags_t flags)
       RSBP_RVT Err_t get_vec (NT *Dp, enum rsb_extff_t flags) const
       RSBP_RVT RSBP_DEPRECATED Err_t get_coo (rsb_trans_t transA, NT *VA, rsb_coo_idx_t *IA,
           rsb_coo_idx_t *JA, rsb_flags_t flags) const
       RSBP_RVT RSBP_DEPRECATED Err_t get_csr (rsb_trans_t transA, NT *VA, rsb_coo_idx_t *RP,
           rsb_coo_idx_t *JA, rsb_flags_t flags) const
       RSBP_RVT RSBP_DEPRECATED Err_t get_rows_sparse (rsb_trans_t transA, const NT *alphap, NT
           *VA, rsb_coo_idx_t *IA, rsb_coo_idx_t *JA, rsb_coo_idx_t frA, rsb_coo_idx_t lrA,
           rsb_nnz_idx_t *rnzp, rsb_flags_t flags) const
       RSBP_RVT Err_t upd_vals (enum rsb_elopf_t elop_flags, const NT &omega)
       RSBP_RVT Err_t upd_vals (enum rsb_elopf_t elop_flags, const NT *omegap)
       RSBP_RVT Err_t get_nrm (NT *Np, enum rsb_extff_t flags) const
       rsb_type_t rsbtype (void) const
       rsb_flags_t rsbflags (void) const
       rsb_string_t get_info_str (const char *key) const
       RSBP_RVT Err_t get_info (enum rsb_mif_t miflags, void *minfop) const
       rsb_string_t _info (void) const
       RSBP_RVT RSBP_DEPRECATED Err_t tune_spsm_threads (rsb_real_t *sfp=RSBP_NULL, rsb_int_t
           *tnp=RSBP_NULL, rsb_int_t maxr=0, rsb_time_t maxt=0, rsb_trans_t
           transA=RSB_TRANSPOSITION_N, const NT *alphap=RSBP_NULL, rsb_coo_idx_t nrhs=1,
           rsb_flags_t order=RSB_FLAG_WANT_COLUMN_MAJOR_ORDER, const NT *Bp=RSBP_NULL,
           rsb_nnz_idx_t ldB=0, const NT *betap=RSBP_NULL, NT *Cp=RSBP_NULL, rsb_nnz_idx_t ldC=0)
           const
       RSBP_RVT RSBP_DEPRECATED Err_t tune_spmm_threads (rsb_real_t *sfp=RSBP_NULL, rsb_int_t
           *tnp=RSBP_NULL, rsb_int_t maxr=0, rsb_time_t maxt=0, rsb_trans_t
           transA=RSB_TRANSPOSITION_N, const NT *alphap=RSBP_NULL, rsb_coo_idx_t nrhs=1,
           rsb_flags_t order=RSB_FLAG_WANT_COLUMN_MAJOR_ORDER, const NT *Bp=RSBP_NULL,
           rsb_nnz_idx_t ldB=0, const NT *betap=RSBP_NULL, NT *Cp=RSBP_NULL, rsb_nnz_idx_t ldC=0)
           const
       RSBP_RVT RSBP_DEPRECATED Err_t tune_spmm (rsb_real_t *sfp, rsb_int_t *tnp, rsb_int_t maxr,
           rsb_time_t maxt, rsb_trans_t transA, const NT *alphap, rsb_coo_idx_t nrhs, rsb_flags_t
           order, const NT *Bp, rsb_nnz_idx_t ldB, const NT *betap, NT *Cp, rsb_nnz_idx_t ldC)
       RSBP_RVT RSBP_DEPRECATED Err_t tune_spmm (rsb_real_t *sfp, rsb_int_t *tnp, rsb_int_t maxr,
           rsb_time_t maxt, rsb_trans_t transA, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t
           order, const NT *Bp, rsb_nnz_idx_t ldB, const NT beta, NT *Cp, rsb_nnz_idx_t ldC)
       RSBP_RVT Err_t tune_spmm (rsb_real_t &sf, rsb_trans_t transA, const NT alpha,
           rsb_coo_idx_t nrhs, rsb_flags_t order, const NT *Bp, const NT beta, NT *Cp)
       RSBP_RVT RSBP_DEPRECATED Err_t tune_spsm (rsb_real_t *sfp, rsb_int_t *tnp, rsb_int_t maxr,
           rsb_time_t maxt, rsb_trans_t transA, const NT *alphap, rsb_coo_idx_t nrhs, rsb_flags_t
           order, const NT *Bp, rsb_nnz_idx_t ldB, const NT *betap, NT *Cp, rsb_nnz_idx_t ldC)
       RSBP_RVT Err_t file_save (const rsb_char_t *filename=RSBP_NULL) const
       RsbMatrix & operator= (const RsbMatrix &A_Rsb)
       bool _is_complex (void) const
       bool operator== (const RsbMatrix &B_Rsb) const
       bool operator!= (const RsbMatrix &B_Rsb) const
       NT normOne (void) const
       NT normInf (void) const
       RSBP_RVT Err_t rndr (const rsb_char_t *filename=RSBP_NULL, rsb_coo_idx_t pmWidth=512,
           rsb_coo_idx_t pmHeight=512, rsb_marf_t rflags=RSB_MARF_EPS) const

Detailed Description

   template<RSBP_Scalar_t NT>
       class RsbMatrix< NT >"Represent a sparse matrix in RSB format by means of librsb.

       Manage construction, destruction, and std::move of numerical matrices.
       Most of the member functions here translate directly to a single function call to librsb
       (rsb.h), and pass the parameters as they are, so the error checking is done by librsb.
       While most of librsb C functions use void* pointers instead of numerical data, RsbMatrix
       is templated by a type parameter. This introduces type safety at compile time.

       Users of member functions can choose among several overloads. So in additional to the more
       direct overloads passing e.g. $ alpha $ and $ beta $ by reference, here a user can pass
       them by value.

       Parameters
           NT the numerical type, at least for the four canonical ones (float, double,
           std::complex<float>, std::complex<double>); see
           matrix_supported_numerical_types_section and rsb_type_t for more.

       Note
           Default error propagation is by exception throw for all constructors and most member
           functions.
           Functions declared to return Err_t can be specialized in rsb_err_t so not to throw
           exceptions, but to return an error code instead.
           Exceptions thrown by member functions (not constructors) can be deactivated at build
           time by defining RSBP_NOTHROW before including <rsb.hpp>.

           One may turn on return error value as default at build time by defining
           RSBP_WANT_REV=1 .

       Warning
           The error model is work in progress and subject to change.

       Todo
           While the rsb.h interface is stable, the rsb.hpp interface is neither stable, nor
           complete: early users' feedback is very welcome.
           Shall all $ alpha $ and $ beta $ be passed by values only? This is natural and fits
           C++. But rsb_tune_spmm() / rsb_tune_spsm() have more parameters with a nullptr-like
           `default' value: how to deal with them in RsbMatrix::tune_spmm() /
           RsbMatrix::tune_spsm() without introducing too many special cases ?
           Similarly for the consistency of RsbMatrix::get_flags_t(), RsbMatrix::get_type_t(),
           RsbMatrix::get_info_coo_t(), and similar: shall they throw an exception if given a
           flag not matching the return type ?
           Or maybe keeping only RsbMatrix::get_info(), with per-type reference overloads ?
           Furthermore: if working under C++20, shall RsbLib avoid pointer-based interfaces
           completely (using std::span only)?

Member Enumeration Documentation

   template<RSBP_Scalar_t NT> enum RsbMatrix::RsbSym
       Matrix structure: either general, symmetric, hermitian, or triangular (also see
       rsb_flags_t).

       Enumerator

       IsGen  General matrix, no triangle structure or symmetry assumed.

       IsHer  Hermitian ( $ A == A^H $). Please pass only lower/upper triangle.

       IsSym  Symmetric ( $ A == A^T $). Please pass only lower/upper triangle.

       IsTri  Triangular (required for spsv/ spsm).

Constructor & Destructor Documentation

   template<RSBP_Scalar_t NT> RsbMatrix< NT >::RsbMatrix (rsb_coo_idx_t nrA, rsb_coo_idx_t ncA,
       const RsbSym sym = IsGen) [inline]
       Begin assembling a sparse matrix of given dimensions and type.
       Then you can use set_val() or set_vals() repeatedly to populate the matrix.
       After populating the matrix, use close() to terminate its assembly.
        Example snip from examples/assemble.cpp:

         const rsb_coo_idx_t nrA { 4 }, ncA { 4 };
         RsbMatrix<double> mtx(nrA,ncA); // begin matrix assembly

         // insert elements of a tridiagonal matrix, one by one
         for (auto i = 0; i < nrA; ++i )
           for (auto j = i-1; j <= i+1; ++j )
             if ( i >= 0 && i < nrA )
               if ( j >= 0 && j < ncA )
                 mtx.set_val((i+1)*100+(j+1),i,j); // add entry

         mtx.close(); // finish matrix assembly
         assert(mtx.nnz() == 3 * nrA - 2);

       Note
           Directly based on C function rsb_mtx_alloc_from_coo_begin() from <rsb.h>.

   template<RSBP_Scalar_t NT> RsbMatrix< NT >::RsbMatrix (rsb_coo_idx_t nrA, const rsb_coo_idx_t
       * RP, const rsb_coo_idx_t * JA, const NT * VA, const RsbSym sym = IsGen) [inline]
       Assemble a sparse matrix given CSR input.
       Note
           Directly based on C function rsb_mtx_alloc_from_csr_const() from <rsb.h>.

   template<RSBP_Scalar_t NT> RsbMatrix< NT >::RsbMatrix (const rsb_coo_idx_t * IA, const
       rsb_coo_idx_t * JA, const NT * VA, rsb_nnz_idx_t nnzA, const rsb_flags_t flagsA =
       RSB_FLAG_NOFLAGS) [inline]
       Assemble a sparse matrix given COO input.
       Example snip from examples/misc.cpp:

           const rsb_nnz_idx_t nnzA { 7 };
           const rsb_coo_idx_t nrA { 6 }, ncA { 6 }, nrhs { 1 };
           const std::vector<rsb_coo_idx_t> IA {0,1,2,3,4,5,1}, JA {0,1,2,3,4,5,0};
           const std::vector<double> VA {1,1,1,1,1,1,2}, X(ncA,1);
           RsbMatrix<double> mtx(IA.data(),JA.data(),VA.data(),nnzA);

       Note
           Directly based on C function rsb_mtx_alloc_from_coo_const() from <rsb.h>.

   template<RSBP_Scalar_t NT> RsbMatrix< NT >::RsbMatrix (const rsb_char_t * filename, const
       RsbSym sym = IsGen) [inline]
       Assemble a sparse matrix given filename input.
       Note
           Directly based on C function rsb_file_mtx_load() from <rsb.h>.

   template<RSBP_Scalar_t NT> RsbMatrix< NT >::RsbMatrix (const RsbMatrix< NT > & A_Rsb, bool
       do_trans = false, rsb_flags_t flagsA = RSB_FLAG_NOFLAGS) [inline]
       Copy a sparse matrix given example input.
       Can either clone it, or transpose it or change flags (structure) in the process.

   template<RSBP_Scalar_t NT> RsbMatrix< NT >::RsbMatrix (RsbMatrix< NT > && other) [inline]
       Move constructor.
       The moved matrix object will be invalid afterwards.
       Example snip from examples/misc.cpp:

         assert( mtx1.nnz() == nnzA );
         RsbMatrix<double> mtx3 { std::move(mtx1) };
         assert( mtx3.nnz() == nnzA );

   template<RSBP_Scalar_t NT> RsbMatrix< NT >::~RsbMatrix (void) [inline]
       Destructor.
       Frees matrix object memory.
       Note
           Directly based on C function rsb_mtx_free() from <rsb.h>.

Member Function Documentation

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::_add (rsb_coo_idx_t
       i, rsb_coo_idx_t j, NT val) [inline]
       Deprecated
           Use set_val() and set_vals() instead.

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::_close (void)
       [inline]
       Deprecated
           Use close() instead.

   template<RSBP_Scalar_t NT> size_t RsbMatrix< NT >::_get_index_storage_bytes (void) const
       [inline]
       Warning
           The name of this member function is expected to change.

   template<RSBP_Scalar_t NT> size_t RsbMatrix< NT >::_get_storage_bytes (void) const [inline]
       Warning
           The name of this member function is expected to change.

   template<RSBP_Scalar_t NT> rsb_string_t RsbMatrix< NT >::_info (void) const [inline]
       Warning
           The name of this member function is expected to change.

   template<RSBP_Scalar_t NT> bool RsbMatrix< NT >::_is_complex (void) const [inline]
       Warning
           The name of this member function is expected to change.

   template<RSBP_Scalar_t NT> rsb_blk_idx_t RsbMatrix< NT >::blocks (void) const [inline]
   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::close (void) [inline]
       Terminate assembly of a previously started and populated matrix.
       Shall be called once.

       Example snip from examples/assemble.cpp:

         const rsb_coo_idx_t nrA { 4 }, ncA { 4 };
         RsbMatrix<double> mtx(nrA,ncA); // begin matrix assembly

         // insert elements of a tridiagonal matrix, one by one
         for (auto i = 0; i < nrA; ++i )
           for (auto j = i-1; j <= i+1; ++j )
             if ( i >= 0 && i < nrA )
               if ( j >= 0 && j < ncA )
                 mtx.set_val((i+1)*100+(j+1),i,j); // add entry

         mtx.close(); // finish matrix assembly
         assert(mtx.nnz() == 3 * nrA - 2);

       See also
           RsbMatrix::RsbMatrix(rsb_coo_idx_t nrA, rsb_coo_idx_t ncA, const RsbSym sym = IsGen );

       Note
           Directly based on C function rsb_mtx_alloc_from_coo_end() from <rsb.h>.

   template<RSBP_Scalar_t NT> rsb_coo_idx_t RsbMatrix< NT >::cols (void) const [inline]
       Example snip from examples/twonnz.cpp:

            std::cout << "# Matrix sized " << mtx.rows() << "x" << mtx.cols() << ", " << nnzA << " nnz  built in " << dt << " s and occupies " << mtxocc << " bytes " << std::endl;

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::file_save (const rsb_char_t *
       filename = RSBP_NULL) const [inline]
       Note
           Directly based on C function rsb_file_mtx_save() from <rsb.h>.

       Example snip from examples/misc.cpp:

           mtx.file_save(); // print to stdout

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::get_coo
       (rsb_trans_t transA, NT * VA, rsb_coo_idx_t * IA, rsb_coo_idx_t * JA, rsb_flags_t flags)
       const [inline]
       Note
           Directly based on C function rsb_mtx_get_coo() from <rsb.h>.

       Warning
           Only transA=RSB_TRANSPOSITION_N currently supported.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::get_csr
       (rsb_trans_t transA, NT * VA, rsb_coo_idx_t * RP, rsb_coo_idx_t * JA, rsb_flags_t flags)
       const [inline]
       Note
           Directly based on C function rsb_mtx_get_csr() from <rsb.h>.

       Warning
           Only transA=RSB_TRANSPOSITION_N currently supported.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> rsb_flags_t RsbMatrix< NT >::get_flags_t (enum rsb_mif_t mif) const
       [inline]
       Note
           Directly based on C function rsb_mtx_get_info() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::get_info (enum rsb_mif_t miflags,
       void * minfop) const [inline]
       Note
           Directly based on C function rsb_mtx_get_info() from <rsb.h>.

   template<RSBP_Scalar_t NT> rsb_blk_idx_t RsbMatrix< NT >::get_info_blk_t (enum rsb_mif_t mif)
       const [inline]
       Note
           Directly based on C function rsb_mtx_get_info() from <rsb.h>.

   template<RSBP_Scalar_t NT> rsb_coo_idx_t RsbMatrix< NT >::get_info_coo_t (enum rsb_mif_t mif)
       const [inline]
       Note
           Directly based on C function rsb_mtx_get_info() from <rsb.h>.

   template<RSBP_Scalar_t NT> rsb_nnz_idx_t RsbMatrix< NT >::get_info_nnz_t (enum rsb_mif_t mif)
       const [inline]
       Note
           Directly based on C function rsb_mtx_get_info() from <rsb.h>.

   template<RSBP_Scalar_t NT> rsb_flags_t RsbMatrix< NT >::get_info_rsb_flags_t (enum rsb_mif_t
       mif) const [inline]
       Note
           Directly based on C function rsb_mtx_get_info() from <rsb.h>.

   template<RSBP_Scalar_t NT> size_t RsbMatrix< NT >::get_info_size_t (enum rsb_mif_t mif) const
       [inline]
       Note
           Directly based on C function rsb_mtx_get_info() from <rsb.h>.

   template<RSBP_Scalar_t NT> rsb_string_t RsbMatrix< NT >::get_info_str (const char * key) const
       [inline]
       Note
           Directly based on C function rsb_mtx_get_info_str() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::get_nrm (NT * Np, enum rsb_extff_t
       flags) const [inline]
       Note
           Directly based on C function rsb_mtx_get_nrm() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::get_rows_sparse
       (rsb_trans_t transA, const NT * alphap, NT * VA, rsb_coo_idx_t * IA, rsb_coo_idx_t * JA,
       rsb_coo_idx_t frA, rsb_coo_idx_t lrA, rsb_nnz_idx_t * rnzp, rsb_flags_t flags) const
       [inline]
       Note
           Directly based on C function rsb_mtx_get_rows_sparse() from <rsb.h>.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> rsb_type_t RsbMatrix< NT >::get_type_t (enum rsb_mif_t mif) const
       [inline]
       Note
           Directly based on C function rsb_mtx_get_info() from <rsb.h>.

   template<RSBP_Scalar_t NT> NT RsbMatrix< NT >::get_val (const rsb_coo_idx_t i, const
       rsb_coo_idx_t j, rsb_flags_t flags = RSB_FLAG_NOFLAGS) const [inline]
       Note
           Directly based on C function rsb_mtx_get_vals() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::get_vals (NT * VA, const
       rsb_coo_idx_t * IA, const rsb_coo_idx_t * JA, rsb_nnz_idx_t nnz, rsb_flags_t flags) const
       [inline]
       Note
           Directly based on C function rsb_mtx_get_vals() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::get_vec (NT * Dp, enum rsb_extff_t
       flags) const [inline]
       Note
           Directly based on C function rsb_mtx_get_vec() from <rsb.h>.

   template<RSBP_Scalar_t NT> rsb_nnz_idx_t RsbMatrix< NT >::nnz (void) const [inline]
   template<RSBP_Scalar_t NT> NT RsbMatrix< NT >::normInf (void) const [inline]
   template<RSBP_Scalar_t NT> NT RsbMatrix< NT >::normOne (void) const [inline]
   template<RSBP_Scalar_t NT> bool RsbMatrix< NT >::operator!= (const RsbMatrix< NT > & B_Rsb)
       const [inline]
       Example snip from examples/misc.cpp:

         assert(   mtx1 == mtx2  );
         assert( !(mtx1 != mtx2) );

       See also
           RsbMatrix::operator==(const RsbMatrix & B_Rsb) const;

   template<RSBP_Scalar_t NT> RsbMatrix & RsbMatrix< NT >::operator= (const RsbMatrix< NT > &
       A_Rsb) [inline]
       A copy constructor. Will clone the input matrix contents.

   template<RSBP_Scalar_t NT> bool RsbMatrix< NT >::operator== (const RsbMatrix< NT > & B_Rsb)
       const [inline]
       Deep comparison: compare if the two matrices have same dimensions, nonzeroes count,
       nonzeroes pattern and value. Meant for very sporadic use. Inefficient: it can involve
       matrices copying.

       Example snip from examples/misc.cpp:

         assert(   mtx1 == mtx2  );
         assert( !(mtx1 != mtx2) );

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::rndr (const rsb_char_t * filename =
       RSBP_NULL, rsb_coo_idx_t pmWidth = 512, rsb_coo_idx_t pmHeight = 512, rsb_marf_t rflags =
       RSB_MARF_EPS) const [inline]
       Note
           Directly based on C function rsb_mtx_rndr() from <rsb.h>.

       Example snip from examples/render.cpp:

                   mtx.rndr(psfilename.c_str());

   template<RSBP_Scalar_t NT> rsb_coo_idx_t RsbMatrix< NT >::rows (void) const [inline]
       Example snip from examples/twonnz.cpp:

            std::cout << "# Matrix sized " << mtx.rows() << "x" << mtx.cols() << ", " << nnzA << " nnz  built in " << dt << " s and occupies " << mtxocc << " bytes " << std::endl;

   template<RSBP_Scalar_t NT> rsb_flags_t RsbMatrix< NT >::rsbflags (void) const [inline]
   template<RSBP_Scalar_t NT> rsb_type_t RsbMatrix< NT >::rsbtype (void) const [inline]
       Example snip from examples/twonnz.cpp:

                       std::cout << "# type=" << mtx.rsbtype() << " nt=1," << rnt << " n=" << n << " nrhs=" << nrhs << " order=" << oc << " alpha=" << alpha << " beta=" << beta << " dt=" << dta[0] << ".." << dta[1] << " spmm-scalability=" << dta[0]/dta[1] << " nnz/s=" << nnzA/dta[0] << ".." << nnzA/dta[1] << " flops=" << flops_c/dta[0] << ".." << flops_c/dta[1] << " occ.=" << opocc << " " << std::endl;

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::set_val (const NT val, const
       rsb_coo_idx_t i, const rsb_coo_idx_t j, rsb_flags_t flags = RSB_FLAG_NOFLAGS) [inline]
       Note
           Directly based on C function rsb_mtx_set_vals() from <rsb.h>.

       Example snip from examples/assemble.cpp:

         const rsb_coo_idx_t nrA { 4 }, ncA { 4 };
         RsbMatrix<double> mtx(nrA,ncA); // begin matrix assembly

         // insert elements of a tridiagonal matrix, one by one
         for (auto i = 0; i < nrA; ++i )
           for (auto j = i-1; j <= i+1; ++j )
             if ( i >= 0 && i < nrA )
               if ( j >= 0 && j < ncA )
                 mtx.set_val((i+1)*100+(j+1),i,j); // add entry

         mtx.close(); // finish matrix assembly
         assert(mtx.nnz() == 3 * nrA - 2);

       See also
           set_vals().

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::set_vals (const NT * VA, const
       rsb_coo_idx_t * IA, const rsb_coo_idx_t * JA, rsb_nnz_idx_t nnz, rsb_flags_t flags)
       [inline]
       Add a single entry during the assembly of a matrix created empty.
       Use close() to terminate matrix assembly.

       Example snip from examples/assemble.cpp:

         const rsb_coo_idx_t nrA { 4 }, ncA { 4 };
         RsbMatrix<double> mtx(nrA,ncA); // begin matrix assembly

         // insert elements of a tridiagonal matrix, one by one
         for (auto i = 0; i < nrA; ++i )
           for (auto j = i-1; j <= i+1; ++j )
             if ( i >= 0 && i < nrA )
               if ( j >= 0 && j < ncA )
                 mtx.set_val((i+1)*100+(j+1),i,j); // add entry

         mtx.close(); // finish matrix assembly
         assert(mtx.nnz() == 3 * nrA - 2);

       Note
           Directly based on C function rsb_mtx_set_vals() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::spmm (rsb_trans_t
       transA, const NT * alphap, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp,
       rsb_nnz_idx_t ldB, const NT * betap, NT * Cp, rsb_nnz_idx_t ldC) const [inline]
       Note
           Directly based on C function rsb_spmm() from <rsb.h>.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spmm (rsb_trans_t transA, const NT
       alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, const NT beta, NT * Cp) const
       [inline]
       Note
           Indirectly based on C function rsb_spmm() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spmm (rsb_trans_t transA, const NT
       alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, rsb_nnz_idx_t ldB, const NT
       beta, NT * Cp, rsb_nnz_idx_t ldC) const [inline]
       Example snip from examples/bench.cpp:

                             mtx.spmm(transA,&alpha,nrhs,order,B.data(),ldB,&beta,C.data(),ldC);

       Note
           Indirectly based on C function rsb_spmm() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spmv (NT * y, const NT * x, bool
       do_trans = false) const [inline]
       Note
           Indirectly based on C function rsb_spmv() from <rsb.h>.

       Example snip from examples/span.cpp:

         mtx.tune_spmm(nullptr,&tn,0,0.0,RSB_TRANSPOSITION_N,alpha,nrhs,RSB_FLAG_WANT_COLUMN_MAJOR_ORDER,X,ncA,beta,Y,nrA);
         mtx.spmv(RSB_TRANSPOSITION_N, alpha, X, beta, Y);

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::spmv (rsb_trans_t
       transA, const NT * alphap, const NT * Xp, rsb_coo_idx_t incX, const NT * betap, NT * Yp,
       rsb_coo_idx_t incY) const [inline]
       Note
           Directly based on C function rsb_spmv() from <rsb.h>.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spmv (rsb_trans_t transA, const NT
       alpha, const NT * Xp, const NT beta, NT * Yp) const [inline]
       Note
           Indirectly based on C function rsb_spmv() from <rsb.h>.

       Example snip from examples/span.cpp:

         mtx.tune_spmm(nullptr,&tn,0,0.0,RSB_TRANSPOSITION_N,alpha,nrhs,RSB_FLAG_WANT_COLUMN_MAJOR_ORDER,X,ncA,beta,Y,nrA);
         mtx.spmv(RSB_TRANSPOSITION_N, alpha, X, beta, Y);

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spmv (rsb_trans_t transA, const NT
       alpha, const NT * Xp, rsb_coo_idx_t incX, const NT beta, NT * Yp, rsb_coo_idx_t incY)
       const [inline]
       Note
           Indirectly based on C function rsb_spmv() from <rsb.h>.

       Example snip from examples/span.cpp:

         mtx.tune_spmm(nullptr,&tn,0,0.0,RSB_TRANSPOSITION_N,alpha,nrhs,RSB_FLAG_WANT_COLUMN_MAJOR_ORDER,X,ncA,beta,Y,nrA);
         mtx.spmv(RSB_TRANSPOSITION_N, alpha, X, beta, Y);

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spsm (NT * y, const NT * x,
       rsb_coo_idx_t nrhs, bool do_trans = false) const [inline]
       Note
           Indirectly based on C function rsb_spsm() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spsm (NT * y, rsb_coo_idx_t nrhs,
       bool do_trans = false) const [inline]
       Note
           Indirectly based on C function rsb_spsm() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::spsm (rsb_trans_t
       transT, const NT * alphap, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * betap, const
       NT * Bp, rsb_nnz_idx_t ldB, NT * Cp, rsb_nnz_idx_t ldC) const [inline]
       Note
           Directly based on C function rsb_spsm() from <rsb.h>.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spsm (rsb_trans_t transT, const NT
       alpha, rsb_coo_idx_t nrhs, const NT * Bp, NT * Cp) const [inline]
       Note
           Indirectly based on C function rsb_spsm() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spsm (rsb_trans_t transT, const NT
       alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT beta, const NT * Bp, rsb_nnz_idx_t
       ldB, NT * Cp, rsb_nnz_idx_t ldC) const [inline]
       Note
           Indirectly based on C function rsb_spsm() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spsv (NT * y, bool do_trans =
       false) const [inline]
       Note
           Indirectly based on C function rsb_spsv() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spsv (NT * y, const NT * x, bool
       do_trans = false) const [inline]
       Note
           Indirectly based on C function rsb_spsv() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::spsv (rsb_trans_t
       transT, const NT * alphap, const NT * Xp, rsb_coo_idx_t incX, NT * Yp, rsb_coo_idx_t incY)
       const [inline]
       Note
           Directly based on C function rsb_spsv() from <rsb.h>.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::spsv (rsb_trans_t transT, const NT
       alpha, const NT * Xp, NT * Yp) const [inline]
       Note
           Indirectly based on C function rsb_spsv() from <rsb.h>.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::tune_spmm (rsb_real_t & sf,
       rsb_trans_t transA, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp,
       const NT beta, NT * Cp) [inline]
       Note
           Indirectly based on C function rsb_tune_spmm() from <rsb.h>.

       Example snip from examples/autotune.cpp:

                        tt = -rsb_time();
                               mtx.tune_spmm(&sf,&tn,maxr,tmax,transA,&alpha,nrhs,order,B.data(),ldB,&beta,C.data(),ldC);
                               tt += rsb_time();

                               auto nnsmA {mtx.blocks()};
                               std::cout << "Tuning took " << tt << " s ( " << tt / dt << " ops ) and changed " << nsmA << " to " << nnsmA << " blocks" << std::endl;

                               mtx.spmm(transA,&alpha,nrhs,order,B.data(),ldB,&beta,C.data(),ldC); // caches warmup

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::tune_spmm
       (rsb_real_t * sfp, rsb_int_t * tnp, rsb_int_t maxr, rsb_time_t maxt, rsb_trans_t transA,
       const NT * alphap, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, rsb_nnz_idx_t
       ldB, const NT * betap, NT * Cp, rsb_nnz_idx_t ldC) [inline]
       Note
           Directly based on C function rsb_tune_spmm() from <rsb.h>.

       Example snip from examples/autotune.cpp:

                        tt = -rsb_time();
                               mtx.tune_spmm(&sf,&tn,maxr,tmax,transA,&alpha,nrhs,order,B.data(),ldB,&beta,C.data(),ldC);
                               tt += rsb_time();

                               auto nnsmA {mtx.blocks()};
                               std::cout << "Tuning took " << tt << " s ( " << tt / dt << " ops ) and changed " << nsmA << " to " << nnsmA << " blocks" << std::endl;

                               mtx.spmm(transA,&alpha,nrhs,order,B.data(),ldB,&beta,C.data(),ldC); // caches warmup

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::tune_spmm
       (rsb_real_t * sfp, rsb_int_t * tnp, rsb_int_t maxr, rsb_time_t maxt, rsb_trans_t transA,
       const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, rsb_nnz_idx_t ldB,
       const NT beta, NT * Cp, rsb_nnz_idx_t ldC) [inline]
       Note
           Indirectly based on C function rsb_tune_spmm() from <rsb.h>.

       Example snip from examples/autotune.cpp:

                              tt = -rsb_time();
                               mtx.tune_spmm(&sf,&tn,maxr,tmax,transA,&alpha,nrhs,order,B.data(),ldB,&beta,C.data(),ldC);
                               tt += rsb_time();

                               auto nnsmA {mtx.blocks()};
                               std::cout << "Tuning took " << tt << " s ( " << tt / dt << " ops ) and changed " << nsmA << " to " << nnsmA << " blocks" << std::endl;

                               mtx.spmm(transA,&alpha,nrhs,order,B.data(),ldB,&beta,C.data(),ldC); // caches warmup

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::tune_spmm_threads
       (rsb_real_t * sfp = RSBP_NULL, rsb_int_t * tnp = RSBP_NULL, rsb_int_t maxr = 0, rsb_time_t
       maxt = 0, rsb_trans_t transA = RSB_TRANSPOSITION_N, const NT * alphap = RSBP_NULL,
       rsb_coo_idx_t nrhs = 1, rsb_flags_t order = RSB_FLAG_WANT_COLUMN_MAJOR_ORDER, const NT *
       Bp = RSBP_NULL, rsb_nnz_idx_t ldB = 0, const NT * betap = RSBP_NULL, NT * Cp = RSBP_NULL,
       rsb_nnz_idx_t ldC = 0) const [inline]
       Note
           Directly based on C function rsb_tune_spmm() from <rsb.h>.

       Example snip from examples/autotune.cpp:

                             tt = -rsb_time();
                               mtx.tune_spmm(&sf,&tn,maxr,tmax,transA,&alpha,nrhs,order,B.data(),ldB,&beta,C.data(),ldC);
                               tt += rsb_time();

                               auto nnsmA {mtx.blocks()};
                               std::cout << "Tuning took " << tt << " s ( " << tt / dt << " ops ) and changed " << nsmA << " to " << nnsmA << " blocks" << std::endl;

                               mtx.spmm(transA,&alpha,nrhs,order,B.data(),ldB,&beta,C.data(),ldC); // caches warmup

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::tune_spsm
       (rsb_real_t * sfp, rsb_int_t * tnp, rsb_int_t maxr, rsb_time_t maxt, rsb_trans_t transA,
       const NT * alphap, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, rsb_nnz_idx_t
       ldB, const NT * betap, NT * Cp, rsb_nnz_idx_t ldC) [inline]
       Note
           Directly based on C function rsb_tune_spsm() from <rsb.h>.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> RSBP_RVT RSBP_DEPRECATED Err_t RsbMatrix< NT >::tune_spsm_threads
       (rsb_real_t * sfp = RSBP_NULL, rsb_int_t * tnp = RSBP_NULL, rsb_int_t maxr = 0, rsb_time_t
       maxt = 0, rsb_trans_t transA = RSB_TRANSPOSITION_N, const NT * alphap = RSBP_NULL,
       rsb_coo_idx_t nrhs = 1, rsb_flags_t order = RSB_FLAG_WANT_COLUMN_MAJOR_ORDER, const NT *
       Bp = RSBP_NULL, rsb_nnz_idx_t ldB = 0, const NT * betap = RSBP_NULL, NT * Cp = RSBP_NULL,
       rsb_nnz_idx_t ldC = 0) const [inline]
       Note
           Directly based on C function rsb_tune_spsm() from <rsb.h>.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::upd_vals (enum rsb_elopf_t
       elop_flags, const NT & omega) [inline]
       Note
           Directly based on C function rsb_mtx_upd_vals() from <rsb.h>.

       Example snip from examples/bench.cpp:

           mtx.upd_vals(RSB_ELOPF_POW,nt_t{0.0}); // set matrix values to ones

   template<RSBP_Scalar_t NT> RSBP_RVT Err_t RsbMatrix< NT >::upd_vals (enum rsb_elopf_t
       elop_flags, const NT * omegap) [inline]
       Note
           Directly based on C function rsb_mtx_upd_vals() from <rsb.h>.

       Deprecated
           This function overload is deprecated: use the corresponding overload without the C-
           style pointers-to-scalar, or request one if non existing yet.

Author

       Generated automatically by Doxygen for librsb from the source code.