33 #ifndef STRUMPACK_CSR_MATRIX_HPP
34 #define STRUMPACK_CSR_MATRIX_HPP
39 #include "CSRGraph.hpp"
53 template<
typename scalar_t,
typename integer_t>
class CSRMatrix
55 #if defined(STRUMPACK_USE_MPI)
61 using real_t =
typename RealType<scalar_t>::value_type;
69 const scalar_t* values,
bool symm_sparsity=
false);
71 real_t norm1()
const override;
74 void spmv(
const scalar_t* x, scalar_t* y)
const override;
78 Equil_t equilibration()
const override;
80 void equilibrate(
const Equil_t& eq)
override;
82 void permute_columns(
const std::vector<integer_t>& perm)
override;
84 real_t max_scaled_residual(
const scalar_t* x,
const scalar_t* b)
89 int read_matrix_market(
const std::string& filename)
override;
90 int read_binary(
const std::string& filename);
91 void print_dense(
const std::string& name)
const override;
92 void print_matrix_market(
const std::string& filename)
const override;
93 void print_binary(
const std::string& filename)
const;
96 extract_graph(
int ordering_level,
97 integer_t lo, integer_t hi)
const override;
99 extract_graph_sep_CB(
int ordering_level, integer_t lo, integer_t hi,
100 const std::vector<integer_t>& upd)
const override;
102 extract_graph_CB_sep(
int ordering_level, integer_t lo, integer_t hi,
103 const std::vector<integer_t>& upd)
const override;
105 extract_graph_CB(
int ordering_level,
106 const std::vector<integer_t>& upd)
const override;
108 #ifndef DOXYGEN_SHOULD_SKIP_THIS
110 void front_multiply(integer_t slo, integer_t shi,
111 const std::vector<integer_t>& upd,
113 int depth)
const override;
114 void extract_separator(integer_t sep_end,
115 const std::vector<std::size_t>& I,
116 const std::vector<std::size_t>& J,
117 DenseM_t& B,
int depth)
const override;
119 integer_t sep_begin, integer_t sep_end,
120 const std::vector<integer_t>& upd,
121 int depth)
const override;
123 void push_front_elements(integer_t, integer_t,
124 const std::vector<integer_t>&,
125 std::vector<Triplet<scalar_t>>&,
126 std::vector<Triplet<scalar_t>>&,
127 std::vector<Triplet<scalar_t>>&)
const override;
128 void set_front_elements(integer_t, integer_t,
129 const std::vector<integer_t>&,
130 Triplet<scalar_t>*, Triplet<scalar_t>*,
131 Triplet<scalar_t>*)
const override;
132 void count_front_elements(integer_t, integer_t,
133 const std::vector<integer_t>&,
134 std::size_t&, std::size_t&, std::size_t&)
137 void front_multiply_F11(
Trans op, integer_t slo, integer_t shi,
139 int depth)
const override;
140 void front_multiply_F12(
Trans op, integer_t slo, integer_t shi,
141 const std::vector<integer_t>& upd,
143 int depth)
const override;
144 void front_multiply_F21(
Trans op, integer_t slo, integer_t shi,
145 const std::vector<integer_t>& upd,
147 int depth)
const override;
149 #if defined(STRUMPACK_USE_MPI)
150 void extract_F11_block(scalar_t* F, integer_t ldF,
151 integer_t row, integer_t nr_rows,
152 integer_t col, integer_t nr_cols)
const override;
153 void extract_F12_block(scalar_t* F, integer_t ldF,
154 integer_t row, integer_t nr_rows,
155 integer_t col, integer_t nr_cols,
156 const integer_t* upd)
const override;
157 void extract_F21_block(scalar_t* F, integer_t ldF,
158 integer_t row, integer_t nr_rows,
159 integer_t col, integer_t nr_cols,
160 const integer_t* upd)
const override;
161 void extract_separator_2d(integer_t sep_end,
162 const std::vector<std::size_t>& I,
163 const std::vector<std::size_t>& J,
165 void front_multiply_2d(integer_t sep_begin, integer_t sep_end,
166 const std::vector<integer_t>& upd,
168 int depth)
const override;
169 void front_multiply_2d(
Trans op, integer_t sep_begin, integer_t sep_end,
170 const std::vector<integer_t>& upd,
172 int depth)
const override;
179 void scale(
const std::vector<scalar_t>& Dr,
180 const std::vector<scalar_t>& Dc)
override;
181 void scale_real(
const std::vector<real_t>& Dr,
182 const std::vector<real_t>& Dc)
override;
190 using CSM_t::symm_sparse_;
204 template<
typename scalar_t,
typename integer_t,
typename cast_t>
Contains the CompressedSparseMatrix class, a base class for compressed sparse storage.
Definition: CompressedSparseMatrix.hpp:49
Class for storing a compressed sparse row matrix (single node).
Definition: CSRMatrix.hpp:54
void spmv(const scalar_t *x, scalar_t *y) const override
void spmv(const DenseM_t &x, DenseM_t &y) const override
Abstract base class for compressed sparse matrix storage.
Definition: CompressedSparseMatrix.hpp:150
integer_t nnz() const
Definition: CompressedSparseMatrix.hpp:177
const integer_t * ptr() const
Definition: CompressedSparseMatrix.hpp:188
const integer_t * ind() const
Definition: CompressedSparseMatrix.hpp:197
Like DenseMatrix, this class represents a matrix, stored in column major format, to allow direct use ...
Definition: DenseMatrix.hpp:1015
This class represents a matrix, stored in column major format, to allow direct use of BLAS/LAPACK rou...
Definition: DenseMatrix.hpp:138
Definition: DistributedMatrix.hpp:52
Definition: CompressedSparseMatrix.hpp:97
Definition: CompressedSparseMatrix.hpp:56
Definition: StrumpackOptions.hpp:42
MatchingJob
Definition: StrumpackOptions.hpp:113
Trans
Definition: DenseMatrix.hpp:51
CSRMatrix< cast_t, integer_t > cast_matrix(const CSRMatrix< scalar_t, integer_t > &mat)