Skip to main content

HostCsr

Struct HostCsr 

Source
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: usize

Number of rows.

§ncols: usize

Number 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

Source

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.

Source

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.

Source

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.

Source

pub fn nnz(&self) -> usize

Number of stored non-zeros.

Source

pub fn get(&self, row: usize, col: usize) -> Option<f64>

Returns the value at (row, col) if present, else None.

Source

pub fn diagonal(&self) -> Vec<f64>

Extracts the main diagonal as a dense vector of length min(nrows, ncols).

Source

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.

Source

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.

Source

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.

Source

pub fn to_dense(&self) -> Vec<f64>

Converts the matrix to a dense row-major nrows × ncols array.

Intended for small matrices (coarse-level operators, test assertions).

Trait Implementations§

Source§

impl Clone for HostCsr

Source§

fn clone(&self) -> HostCsr

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HostCsr

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for HostCsr

Source§

fn eq(&self, other: &HostCsr) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for HostCsr

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more