Eigen  5.0.1
 
Loading...
Searching...
No Matches
Eigen::BlockSparseSelfAdjointView< BSM, UpLo, DiagIsSelfAdjoint > Class Template Reference

#include <Eigen/src/SparseCore/BlockSparseMatrix.h>

Detailed Description

template<typename BSM, int UpLo, bool DiagIsSelfAdjoint>
class Eigen::BlockSparseSelfAdjointView< BSM, UpLo, DiagIsSelfAdjoint >

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.

Precondition
BSM::BlockRows == BSM::BlockCols.

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
 

Member Function Documentation

◆ eval()

template<typename BSM, int UpLo, bool DiagIsSelfAdjoint>
BSM Eigen::BlockSparseSelfAdjointView< BSM, UpLo, DiagIsSelfAdjoint >::eval ( ) 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.

◆ operator*() [1/2]

template<typename BSM, int UpLo, bool DiagIsSelfAdjoint>
template<int RhsBlockCols>
BlockSparseMatrix< Scalar, BSM::Options, BlockRows, RhsBlockCols, StorageIndex > Eigen::BlockSparseSelfAdjointView< BSM, UpLo, DiagIsSelfAdjoint >::operator* ( const BlockSparseMatrix< Scalar, BSM::Options, BlockCols, RhsBlockCols, StorageIndex > & rhs) const
inline

SelfAdj × BSM: materialises the view then uses the general SpGEMM.

◆ operator*() [2/2]

template<typename BSM, int UpLo, bool DiagIsSelfAdjoint>
template<typename OtherDerived>
Matrix< Scalar, Dynamic, OtherDerived::ColsAtCompileTime > Eigen::BlockSparseSelfAdjointView< BSM, UpLo, DiagIsSelfAdjoint >::operator* ( const MatrixBase< OtherDerived > & rhs) const
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.

◆ toSparse()

template<typename BSM, int UpLo, bool DiagIsSelfAdjoint>
SparseMatrix< Scalar, BSM::Options, StorageIndex > Eigen::BlockSparseSelfAdjointView< BSM, UpLo, DiagIsSelfAdjoint >::toSparse ( ) const
inline

Convert to a symmetrised scalar-level SparseMatrix.


The documentation for this class was generated from the following file: