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 (
int ordering_level, integer_t lo, integer_t hi)
const override;
98 (
int ordering_level, integer_t lo, integer_t hi,
99 const std::vector<integer_t>& upd)
const override;
101 (
int ordering_level, integer_t lo, integer_t hi,
102 const std::vector<integer_t>& upd)
const override;
104 (
int ordering_level,
const std::vector<integer_t>& upd)
const override;
106 #ifndef DOXYGEN_SHOULD_SKIP_THIS
109 (integer_t slo, integer_t shi,
const std::vector<integer_t>& upd,
111 void extract_separator
112 (integer_t sep_end,
const std::vector<std::size_t>& I,
113 const std::vector<std::size_t>& J,
114 DenseM_t& B,
int depth)
const override;
117 integer_t sep_end,
const std::vector<integer_t>& upd,
118 int depth)
const override;
120 void push_front_elements
121 (integer_t, integer_t,
const std::vector<integer_t>&,
122 std::vector<Triplet<scalar_t>>&,
123 std::vector<Triplet<scalar_t>>&,
124 std::vector<Triplet<scalar_t>>&)
const override;
126 void front_multiply_F11
127 (
Trans op, integer_t slo, integer_t shi,
129 void front_multiply_F12
130 (
Trans op, integer_t slo, integer_t shi,
const std::vector<integer_t>& upd,
132 void front_multiply_F21
133 (
Trans op, integer_t slo, integer_t shi,
const std::vector<integer_t>& upd,
136 #if defined(STRUMPACK_USE_MPI)
137 void extract_F11_block
138 (scalar_t* F, integer_t ldF, integer_t row, integer_t nr_rows,
139 integer_t col, integer_t nr_cols)
const override;
140 void extract_F12_block
141 (scalar_t* F, integer_t ldF, integer_t row,
142 integer_t nr_rows, integer_t col, integer_t nr_cols,
143 const integer_t* upd)
const override;
144 void extract_F21_block
145 (scalar_t* F, integer_t ldF, integer_t row,
146 integer_t nr_rows, integer_t col, integer_t nr_cols,
147 const integer_t* upd)
const override;
148 void extract_separator_2d
149 (integer_t sep_end,
const std::vector<std::size_t>& I,
150 const std::vector<std::size_t>& J,
DistM_t& B)
const override;
151 void front_multiply_2d
152 (integer_t sep_begin, integer_t sep_end,
153 const std::vector<integer_t>& upd,
const DistM_t&
R,
155 void front_multiply_2d
156 (
Trans op, integer_t sep_begin, integer_t sep_end,
157 const std::vector<integer_t>& upd,
const DistM_t&
R,
158 DistM_t& S,
int depth)
const override;
159 #endif //defined(STRUMPACK_USE_MPI)
160 #endif //DOXYGEN_SHOULD_SKIP_THIS
165 void scale(
const std::vector<scalar_t>& Dr,
166 const std::vector<scalar_t>& Dc)
override;
167 void scale_real(
const std::vector<real_t>& Dr,
168 const std::vector<real_t>& Dc)
override;
176 using CSM_t::symm_sparse_;
190 template<
typename scalar_t,
typename integer_t,
typename cast_t>
196 #endif // STRUMPACK_CSR_MATRIX_HPP