33#ifndef STRUMPACK_CSR_MATRIX_HPP
34#define STRUMPACK_CSR_MATRIX_HPP
39#include "CSRGraph.hpp"
54 template<
typename scalar_t,
typename integer_t>
class CSRMatrix
56#if defined(STRUMPACK_USE_MPI)
62 using real_t =
typename RealType<scalar_t>::value_type;
70 const scalar_t* values,
bool symm_sparsity=
false);
72 real_t norm1()
const override;
75 void spmv(
const scalar_t* x, scalar_t* y)
const override;
79 Equil_t equilibration()
const override;
81 void equilibrate(
const Equil_t& eq)
override;
83 void permute_columns(
const std::vector<integer_t>& perm)
override;
85 real_t max_scaled_residual(
const scalar_t* x,
const scalar_t* b)
90 std::unique_ptr<CSRMatrix<scalar_t,integer_t>>
91 add_missing_diagonal(
const scalar_t& s)
const;
93 int read_matrix_market(
const std::string& filename)
override;
94 int read_binary(
const std::string& filename);
95 void print_dense(
const std::string& name)
const override;
96 void print_matrix_market(
const std::string& filename)
const override;
97 void print_binary(
const std::string& filename)
const;
100 extract_graph(
int ordering_level,
101 integer_t lo, integer_t hi)
const override;
103 extract_graph_sep_CB(
int ordering_level, integer_t lo, integer_t hi,
104 const std::vector<integer_t>& upd)
const override;
106 extract_graph_CB_sep(
int ordering_level, integer_t lo, integer_t hi,
107 const std::vector<integer_t>& upd)
const override;
109 extract_graph_CB(
int ordering_level,
110 const std::vector<integer_t>& upd)
const override;
114#ifndef DOXYGEN_SHOULD_SKIP_THIS
116 void front_multiply(integer_t slo, integer_t shi,
117 const std::vector<integer_t>& upd,
119 int depth)
const override;
120 void extract_separator(integer_t sep_end,
121 const std::vector<std::size_t>& I,
122 const std::vector<std::size_t>& J,
123 DenseM_t& B,
int depth)
const override;
125 integer_t sep_begin, integer_t sep_end,
126 const std::vector<integer_t>& upd,
127 int depth)
const override;
129 void push_front_elements(integer_t, integer_t,
130 const std::vector<integer_t>&,
131 std::vector<Triplet<scalar_t>>&,
132 std::vector<Triplet<scalar_t>>&,
133 std::vector<Triplet<scalar_t>>&)
const override;
134 void set_front_elements(integer_t, integer_t,
135 const std::vector<integer_t>&,
136 Triplet<scalar_t>*, Triplet<scalar_t>*,
137 Triplet<scalar_t>*)
const override;
138 void count_front_elements(integer_t, integer_t,
139 const std::vector<integer_t>&,
140 std::size_t&, std::size_t&, std::size_t&)
143 void front_multiply_F11(
Trans op, integer_t slo, integer_t shi,
145 int depth)
const override;
146 void front_multiply_F12(
Trans op, integer_t slo, integer_t shi,
147 const std::vector<integer_t>& upd,
149 int depth)
const override;
150 void front_multiply_F21(
Trans op, integer_t slo, integer_t shi,
151 const std::vector<integer_t>& upd,
153 int depth)
const override;
155#if defined(STRUMPACK_USE_MPI)
156 void extract_F11_block(scalar_t* F, integer_t ldF,
157 integer_t row, integer_t nr_rows,
158 integer_t col, integer_t nr_cols)
const override;
159 void extract_F12_block(scalar_t* F, integer_t ldF,
160 integer_t row, integer_t nr_rows,
161 integer_t col, integer_t nr_cols,
162 const integer_t* upd)
const override;
163 void extract_F21_block(scalar_t* F, integer_t ldF,
164 integer_t row, integer_t nr_rows,
165 integer_t col, integer_t nr_cols,
166 const integer_t* upd)
const override;
167 void extract_separator_2d(integer_t sep_end,
168 const std::vector<std::size_t>& I,
169 const std::vector<std::size_t>& J,
171 void front_multiply_2d(integer_t sep_begin, integer_t sep_end,
172 const std::vector<integer_t>& upd,
174 int depth)
const override;
175 void front_multiply_2d(
Trans op, integer_t sep_begin, integer_t sep_end,
176 const std::vector<integer_t>& upd,
178 int depth)
const override;
185 void scale(
const std::vector<scalar_t>& Dr,
186 const std::vector<scalar_t>& Dc)
override;
187 void scale_real(
const std::vector<real_t>& Dr,
188 const std::vector<real_t>& Dc)
override;
197 using CSM_t::symm_sparse_;
211 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:55
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:149
integer_t nnz() const
Definition: CompressedSparseMatrix.hpp:176
const integer_t * ptr() const
Definition: CompressedSparseMatrix.hpp:187
const integer_t * ind() const
Definition: CompressedSparseMatrix.hpp:196
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
2D block cyclicly distributed matrix, as used by ScaLAPACK.
Definition: DistributedMatrix.hpp:84
Definition: CompressedSparseMatrix.hpp:97
Definition: CompressedSparseMatrix.hpp:56
Definition: StrumpackOptions.hpp:43
CSRMatrix< cast_t, integer_t > cast_matrix(const CSRMatrix< scalar_t, integer_t > &mat)
MatchingJob
Definition: StrumpackOptions.hpp:119
Trans
Definition: DenseMatrix.hpp:51