AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects
Version of the Day
|
Abstract base class for all serial symmetric diagonal matrices with significant zeros along the diagonal. More...
#include <AbstractLinAlgPack_MatrixSymDiagSparse.hpp>
Public Member Functions | |
STANDARD_MEMBER_COMPOSITION_MEMBERS (size_type, num_updates_at_once) | |
<<std member="" comp>="">> members for how many updates to compute at once in the operation M_MtMtM(....). More... | |
MatrixSymDiagSparse () | |
The default value of num_updates_at_once == 0 is set to allow this class to determine the appropriate size internally. More... | |
Public Member Functions inherited from AbstractLinAlgPack::MatrixSymOpSerial | |
virtual void | Mp_StPtMtP (DMatrixSliceSym *sym_lhs, value_type alpha, EMatRhsPlaceHolder dummy_place_holder, const GenPermMatrixSlice &gpms_rhs, BLAS_Cpp::Transp gpms_rhs_trans, value_type beta) const |
sym_lhs = alpha * op(gpms_rhs') * M * op(gpms_rhs) + beta * sym_lhs. More... | |
const VectorSpace & | space_rows () const |
Must be overridden to call MatrixOpSerial::space_rows() More... | |
void | Mp_StPtMtP (MatrixSymOp *symwo_lhs, value_type alpha, EMatRhsPlaceHolder dummy_place_holder, const GenPermMatrixSlice &gpms_rhs, BLAS_Cpp::Transp gpms_rhs_trans, value_type beta) const |
symwo_lhs = alpha * op(gpms_rhs') * M * op(gpms_rhs) + beta * sym_lhs. More... | |
void | Mp_StMtMtM (MatrixSymOp *symwo_lhs, value_type alpha, EMatRhsPlaceHolder dummy_place_holder, const MatrixOp &mwo_rhs, BLAS_Cpp::Transp mwo_rhs_trans, value_type beta) const |
symwo_lhs = alpha * op(mwo_rhs') * M * op(mwo_rhs). More... | |
Public Member Functions inherited from AbstractLinAlgPack::MatrixOpSerial | |
virtual void | Mp_StM (DMatrixSlice *gms_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs) const |
gms_lhs += alpha * op(M_rhs) (BLAS xAXPY) More... | |
virtual void | Mp_StMtP (DMatrixSlice *gms_lhs, value_type alpha, BLAS_Cpp::Transp M_trans, const GenPermMatrixSlice &P_rhs, BLAS_Cpp::Transp P_rhs_trans) const |
gms_lhs += alpha * op(M_rhs) * op(P_rhs) More... | |
virtual void | Mp_StPtM (DMatrixSlice *gms_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs, BLAS_Cpp::Transp P_rhs_trans, BLAS_Cpp::Transp M_trans) const |
gms_lhs += alpha * op(P) * op(M_rhs) More... | |
virtual void | Mp_StPtMtP (DMatrixSlice *gms_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, BLAS_Cpp::Transp M_trans, const GenPermMatrixSlice &P_rhs2, BLAS_Cpp::Transp P_rhs2_trans) const |
gms_lhs += alpha * op(P_rhs1) * op(M_rhs) * op(P_rhs2) More... | |
virtual void | Vp_StMtV (DVectorSlice *vs_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const SpVectorSlice &sv_rhs2, value_type beta) const |
vs_lhs = alpha * op(M_rhs1) * sv_rhs2 + beta * vs_lhs (BLAS xGEMV) More... | |
virtual void | Vp_StPtMtV (DVectorSlice *vs_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, BLAS_Cpp::Transp M_rhs2_trans, const DVectorSlice &vs_rhs3, value_type beta) const |
vs_lhs = alpha * op(P_rhs1) * op(M_rhs2) * vs_rhs3 + beta * vs_rhs More... | |
virtual void | Vp_StPtMtV (DVectorSlice *vs_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, BLAS_Cpp::Transp M_rhs2_trans, const SpVectorSlice &sv_rhs3, value_type beta) const |
vs_lhs = alpha * op(P_rhs1) * op(M_rhs2) * sv_rhs3 + beta * vs_rhs More... | |
virtual value_type | transVtMtV (const DVectorSlice &vs_rhs1, BLAS_Cpp::Transp trans_rhs2, const DVectorSlice &vs_rhs3) const |
result = vs_rhs1' * op(M_rhs2) * vs_rhs3 More... | |
virtual void | syr2k (BLAS_Cpp::Transp M_trans, value_type alpha, const GenPermMatrixSlice &P1, BLAS_Cpp::Transp P1_trans, const GenPermMatrixSlice &P2, BLAS_Cpp::Transp P2_trans, value_type beta, DMatrixSliceSym *sym_lhs) const |
Perform a specialized rank-2k update of a dense symmetric matrix of the form: More... | |
virtual void | Mp_StMtM (DMatrixSlice *gms_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const DMatrixSlice &gms_rhs2, BLAS_Cpp::Transp trans_rhs2, value_type beta) const |
gms_lhs = alpha * op(M_rhs1) * op(gms_rhs2) + beta * gms_lhs (right) (xGEMM) More... | |
virtual void | Mp_StMtM (DMatrixSlice *gms_lhs, value_type alpha, const DMatrixSlice &gms_rhs1, BLAS_Cpp::Transp trans_rhs1, BLAS_Cpp::Transp trans_rhs2, value_type beta) const |
gms_lhs = alpha * op(gms_rhs1) * op(M_rhs2) + beta * gms_lhs (left) (xGEMM) More... | |
virtual void | Mp_StMtM (DMatrixSlice *gms_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const MatrixOpSerial &mwo_rhs2, BLAS_Cpp::Transp trans_rhs2, value_type beta) const |
gms_lhs = alpha * op(M_rhs1) * op(mwo_rhs2) + beta * gms_lhs (right) (xGEMM) More... | |
virtual void | Mp_StMtM (DMatrixSlice *gms_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const DMatrixSliceSym &sym_rhs2, BLAS_Cpp::Transp trans_rhs2, value_type beta) const |
gms_lhs = alpha * op(M_rhs1) * op(sym_rhs2) + beta * gms_lhs (right) (xSYMM) More... | |
virtual void | Mp_StMtM (DMatrixSlice *gms_lhs, value_type alpha, const DMatrixSliceSym &sym_rhs1, BLAS_Cpp::Transp trans_rhs1, BLAS_Cpp::Transp trans_rhs2, value_type beta) const |
gms_lhs = alpha * op(sym_rhs1) * op(M_rhs2) + beta * gms_lhs (left) (xSYMM) More... | |
virtual void | Mp_StMtM (DMatrixSlice *gms_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const DMatrixSliceTri &tri_rhs2, BLAS_Cpp::Transp trans_rhs2, value_type beta) const |
gms_lhs = alpha * op(M_rhs1) * op(tri_rhs2) + beta * gms_lhs (right) (xTRMM) More... | |
virtual void | Mp_StMtM (DMatrixSlice *gms_lhs, value_type alpha, const DMatrixSliceTri &tri_rhs1, BLAS_Cpp::Transp trans_rhs1, BLAS_Cpp::Transp trans_rhs2, value_type beta) const |
gms_lhs = alpha * op(tri_rhs1) * op(M_rhs2) + beta * gms_lhs (left) (xTRMM) More... | |
virtual void | syrk (BLAS_Cpp::Transp M_trans, value_type alpha, value_type beta, DMatrixSliceSym *sym_lhs) const |
Perform a rank-k update of a dense symmetric matrix of the form: More... | |
const VectorSpace & | space_cols () const |
bool | Mp_StM (MatrixOp *mwo_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs) const |
bool | Mp_StMtP (MatrixOp *mwo_lhs, value_type alpha, BLAS_Cpp::Transp M_trans, const GenPermMatrixSlice &P_rhs, BLAS_Cpp::Transp P_rhs_trans) const |
bool | Mp_StPtM (MatrixOp *mwo_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs, BLAS_Cpp::Transp P_rhs_trans, BLAS_Cpp::Transp M_trans) const |
bool | Mp_StPtMtP (MatrixOp *mwo_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, BLAS_Cpp::Transp M_trans, const GenPermMatrixSlice &P_rhs2, BLAS_Cpp::Transp P_rhs2_trans) const |
void | Vp_StMtV (VectorMutable *v_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const Vector &v_rhs2, value_type beta) const |
void | Vp_StMtV (VectorMutable *v_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const SpVectorSlice &sv_rhs2, value_type beta) const |
void | Vp_StPtMtV (VectorMutable *v_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, BLAS_Cpp::Transp M_rhs2_trans, const Vector &v_rhs3, value_type beta) const |
void | Vp_StPtMtV (VectorMutable *v_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, BLAS_Cpp::Transp M_rhs2_trans, const SpVectorSlice &sv_rhs3, value_type beta) const |
value_type | transVtMtV (const Vector &v_rhs1, BLAS_Cpp::Transp trans_rhs2, const Vector &v_rhs3) const |
value_type | transVtMtV (const SpVectorSlice &sv_rhs1, BLAS_Cpp::Transp trans_rhs2, const SpVectorSlice &sv_rhs3) const |
void | syr2k (BLAS_Cpp::Transp M_trans, value_type alpha, const GenPermMatrixSlice &P1, BLAS_Cpp::Transp P1_trans, const GenPermMatrixSlice &P2, BLAS_Cpp::Transp P2_trans, value_type beta, MatrixSymOp *symwo_lhs) const |
bool | Mp_StMtM (MatrixOp *mwo_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const MatrixOp &mwo_rhs2, BLAS_Cpp::Transp trans_rhs2, value_type beta) const |
bool | syrk (BLAS_Cpp::Transp M_trans, value_type alpha, value_type beta, MatrixSymOp *sym_lhs) const |
Public Member Functions inherited from AbstractLinAlgPack::MatrixOp | |
virtual void | zero_out () |
M_lhs = 0 : Zero out the matrix. More... | |
virtual void | Mt_S (value_type alpha) |
M_lhs *= alpha : Multiply a matrix by a scalar. More... | |
virtual MatrixOp & | operator= (const MatrixOp &mwo_rhs) |
M_lhs = mwo_rhs : Virtual assignment operator. More... | |
const MatNorm | calc_norm (EMatNormType requested_norm_type=MAT_NORM_1, bool allow_replacement=false) const |
Compute a norm of this matrix. More... | |
virtual mat_ptr_t | sub_view (const Range1D &row_rng, const Range1D &col_rng) const |
Create a transient constant sub-matrix view of this matrix (if supported). More... | |
mat_ptr_t | sub_view (const index_type &rl, const index_type &ru, const index_type &cl, const index_type &cu) const |
Inlined implementation calls this->sub_view(Range1D(rl,ru),Range1D(cl,cu)) . More... | |
virtual mat_ptr_t | perm_view (const Permutation *P_row, const index_type row_part[], int num_row_part, const Permutation *P_col, const index_type col_part[], int num_col_part) const |
Create a permuted view: M_perm = P_row' * M * P_col . More... | |
virtual mat_ptr_t | perm_view_update (const Permutation *P_row, const index_type row_part[], int num_row_part, const Permutation *P_col, const index_type col_part[], int num_col_part, const mat_ptr_t &perm_view) const |
Reinitialize a permuted view: M_perm = P_row' * M * P_col . More... | |
Public Member Functions inherited from AbstractLinAlgPack::MatrixBase | |
virtual | ~MatrixBase () |
Virtual destructor. More... | |
virtual size_type | nz () const |
Return the number of nonzero elements in the matrix. More... | |
Public Member Functions inherited from AbstractLinAlgPack::MatrixSymOp | |
virtual MatrixSymOp & | operator= (const MatrixSymOp &M) |
Calls operator=(MatrixOp&) More... | |
virtual mat_mswo_mut_ptr_t | clone_mswo () |
Clone the non-const matrix object (if supported). More... | |
virtual mat_mswo_ptr_t | clone_mswo () const |
Clone the const matrix object (if supported). More... | |
size_type | cols () const |
Returns this->rows() More... | |
mat_mut_ptr_t | clone () |
Returns this->clone_mswo() . More... | |
mat_ptr_t | clone () const |
Returns this->clone_mswo() . More... | |
To be overridden by subclass | |
virtual const SpVectorSlice | diag () const =0 |
Give access to the sparse diagonal. More... | |
Overridden from MatrixBase | |
size_type | rows () const |
Overridden from MatrixOp | |
std::ostream & | output (std::ostream &out) const |
Overridden from MatrixOpSerial | |
void | Vp_StMtV (DVectorSlice *vs_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const DVectorSlice &vs_rhs2, value_type beta) const |
Overridden from MatrixSymOpSerial | |
void | Mp_StMtMtM (DMatrixSliceSym *sym_lhs, value_type alpha, EMatRhsPlaceHolder dummy_place_holder, const MatrixOpSerial &mwo_rhs, BLAS_Cpp::Transp mwo_rhs_trans, value_type beta) const |
Computes the dense symmetric matrix B += a*op(A')*M*op(A). More... | |
Overridden from MatrixConvertToSparse | |
index_type | num_nonzeros (EExtractRegion extract_region, EElementUniqueness element_uniqueness) const |
void | coor_extract_nonzeros (EExtractRegion extract_region, EElementUniqueness element_uniqueness, const index_type len_Aval, value_type Aval[], const index_type len_Aij, index_type Arow[], index_type Acol[], const index_type row_offset, const index_type col_offset) const |
Additional Inherited Members | |
Public Types inherited from AbstractLinAlgPack::MatrixOp | |
enum | EMatNormType { MAT_NORM_INF, MAT_NORM_2, MAT_NORM_1, MAT_NORM_FORB } |
Type of matrix norm. More... | |
Public Types inherited from AbstractLinAlgPack::MatrixSymOp | |
enum | EMatRhsPlaceHolder |
Public Types inherited from AbstractLinAlgPack::MatrixConvertToSparse | |
enum | EExtractRegion { EXTRACT_FULL_MATRIX, EXTRACT_UPPER_TRIANGULAR, EXTRACT_LOWER_TRIANGULAR } |
enum | EElementUniqueness { ELEMENTS_FORCE_UNIQUE, ELEMENTS_ALLOW_DUPLICATES_SUM } |
Protected Member Functions inherited from AbstractLinAlgPack::MatrixOp | |
virtual bool | Mp_StM (value_type alpha, const MatrixOp &M_rhs, BLAS_Cpp::Transp trans_rhs) |
M_lhs += alpha * op(mwo_rhs) (BLAS xAXPY). More... | |
virtual bool | Mp_StMtP (value_type alpha, const MatrixOp &mwo_rhs, BLAS_Cpp::Transp M_trans, const GenPermMatrixSlice &P_rhs, BLAS_Cpp::Transp P_rhs_trans) |
M_lhs += alpha * op(mwo_rhs) * op(P_rhs). More... | |
virtual bool | Mp_StPtM (value_type alpha, const GenPermMatrixSlice &P_rhs, BLAS_Cpp::Transp P_rhs_trans, const MatrixOp &mwo_rhs, BLAS_Cpp::Transp M_trans) |
M_lhs += alpha * op(P_rhs) * op(mwo_rhs). More... | |
virtual bool | Mp_StPtMtP (value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, const MatrixOp &mwo_rhs, BLAS_Cpp::Transp M_trans, const GenPermMatrixSlice &P_rhs2, BLAS_Cpp::Transp P_rhs2_trans) |
M_lhs += alpha * op(P_rhs1) * op(mwo_rhs) * op(P_rhs2). More... | |
virtual bool | Mp_StMtM (MatrixOp *mwo_lhs, value_type alpha, const MatrixOp &mwo_rhs1, BLAS_Cpp::Transp trans_rhs1, BLAS_Cpp::Transp trans_rhs2, value_type beta) const |
mwo_lhs = alpha * op(mwo_rhs1) * op(M_rhs2) + beta * mwo_lhs (right) (xGEMM) More... | |
virtual bool | Mp_StMtM (value_type alpha, const MatrixOp &mwo_rhs1, BLAS_Cpp::Transp trans_rhs1, const MatrixOp &mwo_rhs2, BLAS_Cpp::Transp trans_rhs2, value_type beta) |
M_lhs = alpha * op(mwo_rhs1) * op(mwo_rhs2) + beta * mwo_lhs (left) (xGEMM) More... | |
virtual bool | syrk (const MatrixOp &mwo_rhs, BLAS_Cpp::Transp M_trans, value_type alpha, value_type beta) |
Perform a rank-k update of a symmetric matrix of the form: More... | |
Protected Member Functions inherited from AbstractLinAlgPack::MatrixSymOp |
Abstract base class for all serial symmetric diagonal matrices with significant zeros along the diagonal.
Definition at line 53 of file AbstractLinAlgPack_MatrixSymDiagSparse.hpp.
AbstractLinAlgPack::MatrixSymDiagSparse::MatrixSymDiagSparse | ( | ) |
The default value of num_updates_at_once == 0 is set to allow this class to determine the appropriate size internally.
Definition at line 68 of file AbstractLinAlgPack_MatrixSymDiagSparse.cpp.
AbstractLinAlgPack::MatrixSymDiagSparse::STANDARD_MEMBER_COMPOSITION_MEMBERS | ( | size_type | , |
num_updates_at_once | |||
) |
<<std member="" comp>="">> members for how many updates to compute at once in the operation M_MtMtM(....).
|
pure virtual |
Give access to the sparse diagonal.
Implemented in AbstractLinAlgPack::MatrixSymDiagSparseStd.
|
virtual |
Reimplemented from AbstractLinAlgPack::MatrixBase.
Definition at line 74 of file AbstractLinAlgPack_MatrixSymDiagSparse.cpp.
|
virtual |
Reimplemented from AbstractLinAlgPack::MatrixOpSerial.
Definition at line 81 of file AbstractLinAlgPack_MatrixSymDiagSparse.cpp.
|
virtual |
Implements AbstractLinAlgPack::MatrixOpSerial.
Definition at line 90 of file AbstractLinAlgPack_MatrixSymDiagSparse.cpp.
|
virtual |
Computes the dense symmetric matrix B += a*op(A')*M*op(A).
This matrix is computed using a set of rank-1 updates.
Runtime ~ O( (m^2)*nz )
Storage ~ O( num_updates_at_once * m )
Where:
Note that a necessary condition for B
to be full rank is for nz >= m
.
Also note that this default implementation is only for nonnegative diagonal entries.
Reimplemented from AbstractLinAlgPack::MatrixSymOpSerial.
Definition at line 116 of file AbstractLinAlgPack_MatrixSymDiagSparse.cpp.
|
virtual |
Implements AbstractLinAlgPack::MatrixConvertToSparse.
Definition at line 250 of file AbstractLinAlgPack_MatrixSymDiagSparse.cpp.
|
virtual |
Implements AbstractLinAlgPack::MatrixConvertToSparse.
Definition at line 258 of file AbstractLinAlgPack_MatrixSymDiagSparse.cpp.