8#include <batmat/assume.hpp>
9#include <batmat/linalg/structure.hpp>
10#include <guanaqo/linalg/sparsity.hpp>
11#include <guanaqo/mat-view.hpp>
22using guanaqo::linalg::sparsity::SparseCOO;
43 void add(index_t row, index_t col, real_t value) {
55 template <std::convertible_to<real_t> T,
class I,
class S, guanaqo::StorageOrder O>
57 std::remove_cvref_t<T>
scale = 1,
65 for (index_t j = 0; j < dense.
cols; ++j)
66 for (index_t i = 0; i < dense.
rows; ++i)
67 add(row + i, col + j,
scale * dense(i, j));
70 for (index_t j = 0; j < dense.
cols; ++j)
71 for (index_t i = j; i < dense.
rows; ++i)
72 add(row + i, col + j,
scale * dense(i, j));
76 for (index_t j = 0; j < dense.
cols; ++j)
77 for (index_t i = 0; i <= j; ++i)
78 add(row + i, col + j,
scale * dense(i, j));
84 void add_diag(index_t row, index_t col, real_t value, index_t n) {
89 for (index_t i = 0; i < n; ++i)
90 add(row + i, col + i, value);
112 .values = std::move(
values),
113 .sparsity = std::move(sparsity)};
void scale(T alpha, Vx &&x, Vz &&z)
Multiply a vector by a scalar z = αx.
A builder for constructing a SparseMatrix incrementally.
void add_diag(index_t row, index_t col, real_t value, index_t n)
SparseMatrix build() const &
void add(index_t row, index_t col, real_t value)
std::vector< index_t > row_indices
std::vector< real_t > values
void add(index_t row, index_t col, guanaqo::MatrixView< T, I, S, O > dense, std::remove_cvref_t< T > scale=1, batmat::linalg::MatrixStructure structure=batmat::linalg::MatrixStructure::General)
std::vector< index_t > col_indices
A sparse matrix in COO format.
const SparseCOO< index_t > sparsity
const std::vector< index_t > row_indices
const std::vector< index_t > col_indices
const std::vector< real_t > values