76 using real_t =
typename RealType<scalar_t>::value_type;
82 CSRMatrixMPI(integer_t local_rows,
const integer_t* row_ptr,
83 const integer_t* col_ind,
const scalar_t* values,
85 CSRMatrixMPI(integer_t rows, integer_t local_rows, integer_t local_nnz,
88 const integer_t* d_ind,
const scalar_t* d_val,
89 const integer_t* o_ptr,
const integer_t* o_ind,
90 const scalar_t* o_val,
const integer_t* garray,
95 integer_t local_nnz()
const {
return lnnz_; }
96 integer_t local_rows()
const {
return lrows_; }
97 integer_t begin_row()
const {
return brow_; }
98 integer_t end_row()
const {
return brow_ + lrows_; }
100 const MPIComm& Comm()
const {
return comm_; }
101 MPI_Comm comm()
const {
return comm_.
comm(); }
103 const std::vector<integer_t>& dist()
const {
return dist_; }
104 const integer_t& dist(std::size_t p)
const {
105 assert(p < dist_.size());
109 real_t norm1()
const override;
112 void spmv(
const scalar_t* x, scalar_t* y)
const override;
114 void permute(
const integer_t* iorder,
const integer_t* order)
override;
116 std::unique_ptr<CSRMatrix<scalar_t,integer_t>> gather()
const;
117 std::unique_ptr<CSRGraph<integer_t>> gather_graph()
const;
136 Equil_t equilibration()
const override;
138 void equilibrate(
const Equil_t&)
override;
140 void permute_columns(
const std::vector<integer_t>& perm)
override;
142 void symmetrize_sparsity()
override;
144 int read_matrix_market(
const std::string& filename)
override;
149 real_t max_scaled_residual(
const scalar_t* x,
const scalar_t* b)
152 std::unique_ptr<CSRMatrixMPI<scalar_t,integer_t>>
153 add_missing_diagonal(
const scalar_t& s)
const;
156 get_sub_graph(
const std::vector<integer_t>& perm,
157 const std::vector<std::pair<integer_t,integer_t>>&
161 extract_graph(
int ordering_level,
162 integer_t lo, integer_t hi)
const override {
167 void print()
const override;
168 void print_dense(
const std::string& name)
const override;
169 void print_matrix_market(
const std::string& filename)
const override;
173#ifndef DOXYGEN_SHOULD_SKIP_THIS
175 void extract_separator
176 (integer_t,
const std::vector<std::size_t>&,
177 const std::vector<std::size_t>&, DenseM_t&,
int)
const override {}
178 void extract_separator_2d
179 (integer_t,
const std::vector<std::size_t>&,
180 const std::vector<std::size_t>&, DistM_t&)
const override {}
182 (DenseM_t&, DenseM_t&, DenseM_t&, integer_t,
183 integer_t,
const std::vector<integer_t>&,
int)
const override {}
184 void push_front_elements
185 (integer_t, integer_t,
const std::vector<integer_t>&,
186 std::vector<Triplet<scalar_t>>&, std::vector<Triplet<scalar_t>>&,
187 std::vector<Triplet<scalar_t>>&)
const override {}
188 void set_front_elements
189 (integer_t, integer_t,
const std::vector<integer_t>&,
190 Triplet<scalar_t>*, Triplet<scalar_t>*,
191 Triplet<scalar_t>*)
const override {}
192 void count_front_elements
193 (integer_t, integer_t,
const std::vector<integer_t>&,
194 std::size_t&, std::size_t&, std::size_t&)
const override {}
196 void extract_F11_block
197 (scalar_t*, integer_t, integer_t, integer_t,
198 integer_t, integer_t)
const override {}
199 void extract_F12_block
200 (scalar_t*, integer_t, integer_t, integer_t, integer_t,
201 integer_t,
const integer_t*)
const override {}
202 void extract_F21_block
203 (scalar_t*, integer_t, integer_t, integer_t, integer_t,
204 integer_t,
const integer_t*)
const override {}
206 (integer_t, integer_t,
const std::vector<integer_t>&,
207 const DenseM_t&, DenseM_t&, DenseM_t&,
int depth)
const override {}
208 void front_multiply_2d
209 (integer_t, integer_t,
const std::vector<integer_t>&,
const DistM_t&,
210 DistM_t&, DistM_t&,
int)
const override {}
211 void front_multiply_2d
212 (
Trans op, integer_t, integer_t,
const std::vector<integer_t>&,
213 const DistM_t&, DistM_t&,
int)
const override {}
215 CSRGraph<integer_t> extract_graph_sep_CB
216 (
int ordering_level, integer_t lo, integer_t hi,
217 const std::vector<integer_t>& upd)
const override {
218 return CSRGraph<integer_t>(); };
219 CSRGraph<integer_t> extract_graph_CB_sep
220 (
int ordering_level, integer_t lo, integer_t hi,
221 const std::vector<integer_t>& upd)
const override {
222 return CSRGraph<integer_t>(); };
223 CSRGraph<integer_t> extract_graph_CB
224 (
int ordering_level,
const std::vector<integer_t>& upd)
const override {
225 return CSRGraph<integer_t>(); };
227 void front_multiply_F11
228 (
Trans op, integer_t slo, integer_t shi,
229 const DenseM_t&
R, DenseM_t& S,
int depth)
const override {};
230 void front_multiply_F12
231 (
Trans op, integer_t slo, integer_t shi,
const std::vector<integer_t>& upd,
232 const DenseM_t&
R, DenseM_t& S,
int depth)
const override {};
233 void front_multiply_F21
234 (
Trans op, integer_t slo, integer_t shi,
const std::vector<integer_t>& upd,
235 const DenseM_t&
R, DenseM_t& S,
int depth)
const override {};
239 void split_diag_offdiag();
240 void setup_spmv_buffers()
const;
250 std::vector<integer_t> dist_;
256 std::vector<integer_t> offdiag_start_;
262 mutable SPMVBuffers<scalar_t,integer_t> spmv_bufs_;
268 void scale(
const std::vector<scalar_t>& lDr,
269 const std::vector<scalar_t>& gDc)
override;
270 void scale_real(
const std::vector<real_t>& lDr,
271 const std::vector<real_t>& gDc)
override;
280 using CSM_t::symm_sparse_;