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);
72 void spmv(
const scalar_t* x, scalar_t* y)
const override;
76 Equil_t equilibration()
const override;
78 void equilibrate(
const Equil_t& eq)
override;
80 void permute_columns(
const std::vector<integer_t>& perm)
override;
82 real_t max_scaled_residual(
const scalar_t* x,
const scalar_t* b)
87 int read_matrix_market(
const std::string& filename)
override;
88 int read_binary(
const std::string& filename);
89 void print_dense(
const std::string& name)
const override;
90 void print_matrix_market(
const std::string& filename)
const override;
91 void print_binary(
const std::string& filename)
const;
94 (
int ordering_level, integer_t lo, integer_t hi)
const override;
96 (
int ordering_level, integer_t lo, integer_t hi,
97 const std::vector<integer_t>& upd)
const override;
99 (
int ordering_level, integer_t lo, integer_t hi,
100 const std::vector<integer_t>& upd)
const override;
102 (
int ordering_level,
const std::vector<integer_t>& upd)
const override;
104 #ifndef DOXYGEN_SHOULD_SKIP_THIS
107 (integer_t slo, integer_t shi,
const std::vector<integer_t>& upd,
109 void extract_separator
110 (integer_t sep_end,
const std::vector<std::size_t>& I,
111 const std::vector<std::size_t>& J,
112 DenseM_t& B,
int depth)
const override;
115 integer_t sep_end,
const std::vector<integer_t>& upd,
116 int depth)
const override;
118 void push_front_elements
119 (integer_t, integer_t,
const std::vector<integer_t>&,
120 std::vector<Triplet<scalar_t>>&,
121 std::vector<Triplet<scalar_t>>&,
122 std::vector<Triplet<scalar_t>>&)
const override;
124 void front_multiply_F11
125 (
Trans op, integer_t slo, integer_t shi,
127 void front_multiply_F12
128 (
Trans op, integer_t slo, integer_t shi,
const std::vector<integer_t>& upd,
130 void front_multiply_F21
131 (
Trans op, integer_t slo, integer_t shi,
const std::vector<integer_t>& upd,
134 #if defined(STRUMPACK_USE_MPI)
135 void extract_F11_block
136 (scalar_t* F, integer_t ldF, integer_t row, integer_t nr_rows,
137 integer_t col, integer_t nr_cols)
const override;
138 void extract_F12_block
139 (scalar_t* F, integer_t ldF, integer_t row,
140 integer_t nr_rows, integer_t col, integer_t nr_cols,
141 const integer_t* upd)
const override;
142 void extract_F21_block
143 (scalar_t* F, integer_t ldF, integer_t row,
144 integer_t nr_rows, integer_t col, integer_t nr_cols,
145 const integer_t* upd)
const override;
146 void extract_separator_2d
147 (integer_t sep_end,
const std::vector<std::size_t>& I,
148 const std::vector<std::size_t>& J,
DistM_t& B)
const override;
149 void front_multiply_2d
150 (integer_t sep_begin, integer_t sep_end,
151 const std::vector<integer_t>& upd,
const DistM_t&
R,
153 void front_multiply_2d
154 (
Trans op, integer_t sep_begin, integer_t sep_end,
155 const std::vector<integer_t>& upd,
const DistM_t&
R,
156 DistM_t& S,
int depth)
const override;
157 #endif //defined(STRUMPACK_USE_MPI)
158 #endif //DOXYGEN_SHOULD_SKIP_THIS
163 void scale(
const std::vector<scalar_t>& Dr,
164 const std::vector<scalar_t>& Dc)
override;
165 void scale_real(
const std::vector<real_t>& Dr,
166 const std::vector<real_t>& Dc)
override;
174 using CSM_t::symm_sparse_;
179 #endif // STRUMPACK_CSR_MATRIX_HPP