pub struct HostCsr {
pub nrows: usize,
pub ncols: usize,
pub row_ptr: Vec<usize>,
pub col_indices: Vec<usize>,
pub values: Vec<f64>,
}Expand description
A square or rectangular sparse matrix stored on the host in CSR layout.
Column indices within each row are kept sorted in ascending order, which the
numeric kernels rely on for efficient merging. All values are f64; the
advanced solvers accumulate in double precision regardless of the storage
precision of any originating device matrix.
Fields§
§nrows: usizeNumber of rows.
ncols: usizeNumber of columns.
row_ptr: Vec<usize>Row pointer array of length nrows + 1.
col_indices: Vec<usize>Column indices of length nnz, sorted ascending within each row.
values: Vec<f64>Non-zero values of length nnz.
Implementations§
Source§impl HostCsr
impl HostCsr
Sourcepub fn new(
nrows: usize,
ncols: usize,
row_ptr: Vec<usize>,
col_indices: Vec<usize>,
values: Vec<f64>,
) -> SparseResult<Self>
pub fn new( nrows: usize, ncols: usize, row_ptr: Vec<usize>, col_indices: Vec<usize>, values: Vec<f64>, ) -> SparseResult<Self>
Builds a host CSR matrix from raw arrays, validating the structure.
§Errors
Returns SparseError::InvalidFormat if the array lengths are
inconsistent, row_ptr is not monotone, or a column index is out of
range.
Sourcepub fn from_gpu<T: GpuFloat>(matrix: &CsrMatrix<T>) -> SparseResult<Self>
pub fn from_gpu<T: GpuFloat>(matrix: &CsrMatrix<T>) -> SparseResult<Self>
Downloads a GPU CSR matrix into a host CSR matrix.
The values are converted to f64. Column indices within each row are
sorted ascending so the host kernels can merge rows efficiently.
§Errors
Returns SparseError::Cuda on a device-to-host transfer failure.
Sourcepub fn to_gpu<T: GpuFloat>(&self) -> SparseResult<CsrMatrix<T>>
pub fn to_gpu<T: GpuFloat>(&self) -> SparseResult<CsrMatrix<T>>
Materialises this host matrix onto the device as a GPU CSR matrix.
Empty matrices are rejected because the device format forbids zero nnz.
§Errors
Returns SparseError::ZeroNnz if the matrix has no stored entries, or
SparseError::Cuda on an allocation/transfer failure.
Sourcepub fn get(&self, row: usize, col: usize) -> Option<f64>
pub fn get(&self, row: usize, col: usize) -> Option<f64>
Returns the value at (row, col) if present, else None.
Sourcepub fn diagonal(&self) -> Vec<f64>
pub fn diagonal(&self) -> Vec<f64>
Extracts the main diagonal as a dense vector of length min(nrows, ncols).
Sourcepub fn matvec(&self, x: &[f64]) -> Vec<f64>
pub fn matvec(&self, x: &[f64]) -> Vec<f64>
Computes y = A * x for a dense vector x of length ncols.
The output has length nrows. This is the host SpMV reference reused by
every iterative method in the module.
Sourcepub fn transpose(&self) -> HostCsr
pub fn transpose(&self) -> HostCsr
Returns the transpose Aᵀ as a new host CSR matrix.
Used to form the restriction operator R = Pᵀ in algebraic multigrid.
Sourcepub fn matmul(&self, rhs: &HostCsr) -> SparseResult<HostCsr>
pub fn matmul(&self, rhs: &HostCsr) -> SparseResult<HostCsr>
Computes the sparse-sparse product C = A * B.
This is the host counterpart of the crate’s GPU SpGEMM (symbolic +
numeric phases) and is the workhorse of the algebraic-multigrid Galerkin
triple product Pᵀ A P. The implementation uses a per-row dense
accumulator (sparse accumulator / SPA) with a touched-column list, which
is the standard Gustavson formulation.
§Errors
Returns SparseError::DimensionMismatch if self.ncols != rhs.nrows.