![]() |
Eigen
5.0.1
|
#include <Eigen/src/SparseCore/BlockSparseMatrix.h>
Lazy block-level self-adjoint (Hermitian) view of a BlockSparseMatrix.
Obtained via BSM::selfadjointView<UpLo>() or BSM::selfadjointView<UpLo, true>() (the latter signals that every diagonal block is itself Hermitian, enabling DSYMM/ZHEMM on those blocks).
Only the triangle selected by UpLo is read; the other triangle is reconstructed on-the-fly as the adjoint of each stored off-diagonal block.
Public Member Functions | |
| BSM | eval () const |
| template<int RhsBlockCols> | |
| BlockSparseMatrix< Scalar, BSM::Options, BlockRows, RhsBlockCols, StorageIndex > | operator* (const BlockSparseMatrix< Scalar, BSM::Options, BlockCols, RhsBlockCols, StorageIndex > &rhs) const |
| template<typename OtherDerived> | |
| Matrix< Scalar, Dynamic, OtherDerived::ColsAtCompileTime > | operator* (const MatrixBase< OtherDerived > &rhs) const |
| SparseMatrix< Scalar, BSM::Options, StorageIndex > | toSparse () const |
|
inline |
Build a full symmetric BSM: stored triangle + adjoint mirror of each off-diagonal block. Diagonal blocks: when DiagIsSelfAdjoint is false, both triangles are filled from the stored triangle via selfadjointView; when true the block is already fully populated and is copied as-is.
|
inline |
SelfAdj × BSM: materialises the view then uses the general SpGEMM.
|
inline |
SelfAdj × Dense.
Off-diagonal stored block A(bi,bj) contributes: result(bi) += A(bi,bj) * rhs(bj) [stored triangle] result(bj) += A(bi,bj)^H * rhs(bi) [implicit mirror]
When DiagIsSelfAdjoint is true, both triangles of each diagonal block are valid; a plain product is used (faster for small fixed-size blocks). Otherwise only the UpLo triangle is assumed valid and selfadjointView reconstructs the full diagonal-block product.
|
inline |
Convert to a symmetrised scalar-level SparseMatrix.