guanaqo 1.0.0-alpha.24
Utilities for scientific software
Loading...
Searching...
No Matches
sparse.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file
4/// @ingroup linalg_sparsity_conv
5/// Eigen interop for sparse matrices.
6
8
9#include <Eigen/Sparse>
10
12
13/// Convert a guanaqo::MatrixView to an Eigen::Matrix view.
14/// @ingroup linalg_sparsity_conv
15template <class I, class T>
16auto as_eigen(const SparseCSC<I, I> sparsity, std::span<T> values) {
17 using Scalar = std::remove_const_t<T>;
18 using Mat = Eigen::SparseMatrix<Scalar, 0, I>;
19 using Index = typename Mat::Index;
20 return Eigen::Map<const Mat>{
21 static_cast<Index>(sparsity.rows),
22 static_cast<Index>(sparsity.cols),
23 static_cast<Index>(sparsity.nnz()),
24 sparsity.outer_ptr.data(),
25 sparsity.inner_idx.data(),
26 values.data(),
27 nullptr,
28 };
29}
30
31/// Convert an Eigen::SparseMatrix to a guanaqo::SparseCSC view.
32/// @ingroup linalg_sparsity_conv
33template <class Derived>
34 requires(!Derived::IsRowMajor)
35auto as_sparsity(const Eigen::SparseMatrixBase<Derived> &M,
37 using I = typename Derived::StorageIndex;
38 using SpCSC = SparseCSC<I, I>;
39 std::span<const I> inner{M.derived().innerIndexPtr(),
40 static_cast<size_t>(M.derived().nonZeros())};
41 std::span<const I> outer{M.derived().outerIndexPtr(),
42 static_cast<size_t>(M.derived().outerSize()) + 1};
43 return SpCSC{
44 .rows = static_cast<length_t>(M.derived().rows()),
45 .cols = static_cast<length_t>(M.derived().cols()),
46 .symmetry = symmetry,
47 .inner_idx = inner,
48 .outer_ptr = outer,
49 .order = SpCSC::SortedRows,
50 };
51}
52
53} // namespace guanaqo::linalg::sparsity
auto as_sparsity(const Eigen::SparseMatrixBase< Derived > &M, Symmetry symmetry=Symmetry::Unsymmetric)
Convert an Eigen::SparseMatrix to a guanaqo::SparseCSC view.
Definition sparse.hpp:35
auto as_eigen(const SparseCSC< I, I > sparsity, std::span< T > values)
Convert a guanaqo::MatrixView to an Eigen::Matrix view.
Definition sparse.hpp:16
Symmetry
Describes the symmetry of matrices.
Definition sparsity.hpp:20
std::ptrdiff_t length_t
Definition config.hpp:14
Sparse and dense sparsity descriptors.
Sparse compressed-column structure (CCS or CSC).
Definition sparsity.hpp:44