Block-row distributed compressed sparse row storage. More...
#include <CSRMatrixMPI.hpp>
Public Member Functions | |
CSRMatrixMPI (integer_t local_rows, const integer_t *row_ptr, const integer_t *col_ind, const scalar_t *values, const integer_t *dist, MPIComm comm, bool symm_sparse) | |
CSRMatrixMPI (integer_t lrows, const integer_t *d_ptr, const integer_t *d_ind, const scalar_t *d_val, const integer_t *o_ptr, const integer_t *o_ind, const scalar_t *o_val, const integer_t *garray, MPIComm comm, bool symm_sparse=false) | |
CSRMatrixMPI (const CSRMatrix< scalar_t, integer_t > *A, MPIComm c, bool only_at_root) | |
integer_t | local_nnz () const |
integer_t | local_rows () const |
integer_t | begin_row () const |
integer_t | end_row () const |
MPIComm | Comm () const |
MPI_Comm | comm () const |
const std::vector< integer_t > & | dist () const |
const integer_t & | dist (std::size_t p) const |
real_t | norm1 () const override |
void | spmv (const DenseM_t &x, DenseM_t &y) const override |
void | spmv (const scalar_t *x, scalar_t *y) const override |
void | permute (const integer_t *iorder, const integer_t *order) override |
std::unique_ptr< CSRMatrix< scalar_t, integer_t > > | gather () const |
std::unique_ptr< CSRGraph< integer_t > > | gather_graph () const |
Match_t | matching (MatchingJob job, bool apply=true) override |
Equil_t | equilibration () const override |
void | equilibrate (const Equil_t &) override |
void | permute_columns (const std::vector< integer_t > &perm) override |
void | symmetrize_sparsity () override |
int | read_matrix_market (const std::string &filename) override |
real_t | max_scaled_residual (const DenseM_t &x, const DenseM_t &b) const override |
real_t | max_scaled_residual (const scalar_t *x, const scalar_t *b) const override |
CSRGraph< integer_t > | get_sub_graph (const std::vector< integer_t > &perm, const std::vector< std::pair< integer_t, integer_t >> &graph_ranges) const |
CSRGraph< integer_t > | extract_graph (int ordering_level, integer_t lo, integer_t hi) const override |
void | print () const override |
void | print_dense (const std::string &name) const override |
void | print_matrix_market (const std::string &filename) const override |
void | check () const |
Public Member Functions inherited from strumpack::CompressedSparseMatrix< scalar_t, integer_t > | |
virtual | ~CompressedSparseMatrix () |
integer_t | size () const |
integer_t | nnz () const |
const integer_t * | ptr () const |
const integer_t * | ind () const |
const scalar_t * | val () const |
integer_t * | ptr () |
integer_t * | ind () |
scalar_t * | val () |
const integer_t & | ptr (integer_t i) const |
const integer_t & | ind (integer_t i) const |
const scalar_t & | val (integer_t i) const |
integer_t & | ptr (integer_t i) |
integer_t & | ind (integer_t i) |
scalar_t & | val (integer_t i) |
bool | symm_sparse () const |
void | set_symm_sparse (bool symm_sparse=true) |
virtual void | permute (const std::vector< integer_t > &iorder, const std::vector< integer_t > &order) |
virtual void | apply_matching (const Match_t &) |
Block-row distributed compressed sparse row storage.
TODO: cleanup this class
scalar_t | ... |
integer_t | TODO set a default for this? |
|
overridevirtual |
This gathers the matrix to 1 process, then applies MC64 sequentially. lDr and gDc are only set when job == MatchingJob::MAX_DIAGONAL_PRODUCT_SCALING.
job | The job type. |
perm | Output, column permutation vector containing the GLOBAL column permutation, such that the column perm[j] of the original matrix is column j in the permuted matrix. |
lDr | Row scaling factors, this is local, ie, Dr.size() == this->local_rows(). |
gDc | Col scaling factors, this is global, ie, Dc.size() == this->size() |
Reimplemented from strumpack::CompressedSparseMatrix< scalar_t, integer_t >.
|
overridevirtual |
TODO Obtain reordering Anew = A(iorder,iorder). In addition, entries of IND, VAL are sorted in increasing order
Reimplemented from strumpack::CompressedSparseMatrix< scalar_t, integer_t >.
|
overridevirtual |
Sparse matrix times dense vector/matrix product y = this * x x and y can have multiple columns. y should be pre-allocated!
TODO make the public interface non-virtual
x | input right hand-side vector/matrix, should satisfy x.size() == this->size() |
y | output, result of y = this * x, should satisfy y.size() == this->size() |
Implements strumpack::CompressedSparseMatrix< scalar_t, integer_t >.
|
overridevirtual |
Sparse matrix times dense vector product y = this * x x and y can have multiple columns. y should be pre-allocated.
TODO make the public interface non-virtual
x | input right hand-side vector/matrix, should be a pointer to an array of size size() |
y | output, result of y = this * x, should be a pointer to an array of size size(), already allocated |
Implements strumpack::CompressedSparseMatrix< scalar_t, integer_t >.