MPQC  3.0.0-alpha
sc::SymmSCMatrix Class Referenceabstract

The SymmSCMatrix class is the abstract base class for symmetric double valued matrices. More...

#include <math/scmat/abstract.h>

Inheritance diagram for sc::SymmSCMatrix:
sc::DescribedClass sc::RefCount sc::BlockedSymmSCMatrix sc::DistSymmSCMatrix sc::LocalSymmSCMatrix sc::ReplSymmSCMatrix

Public Member Functions

 SymmSCMatrix (const RefSCDimension &, SCMatrixKit *)
 
Ref< SCMatrixKitkit () const
 Return the SCMatrixKit object that created this object.
 
virtual void save (StateOut &)
 Save and restore this in an implementation independent way.
 
virtual void restore (StateIn &)
 
virtual double maxabs () const
 Return the maximum absolute value element of this vector.
 
virtual void randomize ()
 Assign each element to a random number between -1 and 1.
 
void assign (double val)
 Set all elements to val.
 
void assign (const double *m)
 Assign element i, j to m[i*(i+1)/2+j].
 
void assign (const double **m)
 Assign element i, j to m[i][j].
 
void assign (SymmSCMatrix *m)
 Make this have the same elements as m. More...
 
virtual void assign_val (double val)
 Overridden to implement the assign functions.
 
virtual void assign_p (const double *m)
 
virtual void assign_pp (const double **m)
 
virtual void assign_s (SymmSCMatrix *m)
 
void convert (double *a) const
 Like the assign members, but these write values to the arguments.
 
void convert (double **a) const
 
void convert (SymmSCMatrix *a)
 
virtual void convert_p (double *) const
 
virtual void convert_pp (double **) const
 
virtual void convert_s (SymmSCMatrix *)
 
virtual void convert_accumulate (SymmSCMatrix *)
 
virtual void scale (double)
 Multiply all elements by val.
 
virtual void scale_diagonal (double)
 Scale the diagonal elements by val.
 
virtual void shift_diagonal (double)
 Shift the diagonal elements by val.
 
virtual void unit ()
 Make this equal to the unit matrix.
 
int n () const
 Return the dimension.
 
virtual SymmSCMatrixcopy ()
 Return a matrix with the same dimension and same elements.
 
virtual SymmSCMatrixclone ()
 Return a matrix with the same dimension but uninitialized memory.
 
RefSCDimension dim () const
 Return the dimension.
 
virtual double get_element (int, int) const =0
 Return or modify an element.
 
virtual void set_element (int, int, double)=0
 
virtual void accumulate_element (int, int, double)=0
 
virtual SCMatrixget_subblock (int br, int er, int bc, int ec)=0
 Return a subblock of this. More...
 
virtual SymmSCMatrixget_subblock (int br, int er)=0
 
virtual void assign_subblock (SCMatrix *m, int, int, int, int)=0
 Assign m to a subblock of this.
 
virtual void assign_subblock (SymmSCMatrix *m, int, int)=0
 
virtual void accumulate_subblock (SCMatrix *m, int, int, int, int)=0
 Sum m into a subblock of this.
 
virtual void accumulate_subblock (SymmSCMatrix *m, int, int)=0
 
virtual SCVectorget_row (int i)=0
 Return a row of this.
 
virtual void assign_row (SCVector *v, int i)=0
 Assign v to a row of this.
 
virtual void accumulate_row (SCVector *v, int i)=0
 Sum v to a row of this.
 
virtual void diagonalize (DiagSCMatrix *d, SCMatrix *m)=0
 Diagonalize this, placing the eigenvalues in d and the eigenvectors in m.
 
virtual void eigensystem (SymmSCMatrix *s, DiagSCMatrix *d, SCMatrix *m)=0
 Solve generalized eigensystem for this with metric s, placing the eigenvalues in d and the eigenvectors in m. More...
 
virtual void accumulate (const SymmSCMatrix *m)=0
 Sum m into this.
 
virtual void accumulate_symmetric_sum (SCMatrix *a)=0
 Sum into a + a.t()
 
virtual void accumulate_symmetric_product (SCMatrix *a)
 Sum into this a * a.t()
 
virtual void accumulate_transform (SCMatrix *, SymmSCMatrix *, SCMatrix::Transform=SCMatrix::NormalTransform)
 
virtual void accumulate_transform (SCMatrix *, DiagSCMatrix *, SCMatrix::Transform=SCMatrix::NormalTransform)
 
virtual void accumulate_transform (SymmSCMatrix *, SymmSCMatrix *)
 
virtual void accumulate_symmetric_outer_product (SCVector *)
 
virtual double scalar_product (SCVector *v)
 Return the scalar obtained by multiplying this on the left and right by v.
 
virtual double trace ()=0
 Return the trace.
 
virtual double invert_this ()=0
 Invert this.
 
virtual double determ_this ()=0
 Return the determinant of this. this is overwritten.
 
virtual double solve_this (SCVector *)=0
 
virtual void gen_invert_this (double condition_number_threshold=1e8)=0
 Return the generalized inverse of this using SVD decomposition. More...
 
virtual void element_op (const Ref< SCElementOp > &)=0
 only applied to the unique elements of this. More...
 
virtual void element_op (const Ref< SCElementOp2 > &, SymmSCMatrix *)=0
 
virtual void element_op (const Ref< SCElementOp3 > &, SymmSCMatrix *, SymmSCMatrix *)=0
 
void print (std::ostream &o=ExEnv::out0()) const
 Print out the matrix.
 
void print (const char *title=0, std::ostream &out=ExEnv::out0(), int=10) const
 
virtual void vprint (const char *title=0, std::ostream &out=ExEnv::out0(), int=10) const
 
Ref< MessageGrpmessagegrp () const
 Returns the message group used by the matrix kit.
 
virtual Ref< SCMatrixSubblockIterlocal_blocks (SCMatrixSubblockIter::Access)=0
 Returns iterators for the local (rapidly accessible) blocks used in this matrix.
 
virtual Ref< SCMatrixSubblockIterall_blocks (SCMatrixSubblockIter::Access)=0
 Returns iterators for the all blocks used in this matrix.
 
- Public Member Functions inherited from sc::DescribedClass
 DescribedClass (const DescribedClass &)
 
DescribedClassoperator= (const DescribedClass &)
 
ClassDescclass_desc () const MPQC__NOEXCEPT
 This returns the unique pointer to the ClassDesc corresponding to the given type_info object. More...
 
const char * class_name () const
 Return the name of the object's exact type.
 
int class_version () const
 Return the version of the class.
 
Ref< DescribedClassref ()
 Return this object wrapped up in a Ref smart pointer. More...
 
- Public Member Functions inherited from sc::RefCount
size_t identifier () const
 Return the unique identifier for this object that can be compared for different objects of different types. More...
 
int lock_ptr () const
 Lock this object.
 
int unlock_ptr () const
 Unlock this object.
 
void use_locks (bool inVal)
 start and stop using locks on this object
 
refcount_t nreference () const
 Return the reference count.
 
refcount_t reference ()
 Increment the reference count and return the new count.
 
refcount_t dereference ()
 Decrement the reference count and return the new count.
 
int managed () const
 
void unmanage ()
 Turn off the reference counting mechanism for this object. More...
 

Protected Attributes

RefSCDimension d
 
Ref< SCMatrixKitkit_
 

Additional Inherited Members

- Protected Member Functions inherited from sc::RefCount
 RefCount (const RefCount &)
 
RefCountoperator= (const RefCount &)
 

Detailed Description

The SymmSCMatrix class is the abstract base class for symmetric double valued matrices.

Member Function Documentation

◆ assign()

void sc::SymmSCMatrix::assign ( SymmSCMatrix m)
inline

Make this have the same elements as m.

The dimensions must match.

◆ eigensystem()

virtual void sc::SymmSCMatrix::eigensystem ( SymmSCMatrix s,
DiagSCMatrix d,
SCMatrix m 
)
pure virtual

Solve generalized eigensystem for this with metric s, placing the eigenvalues in d and the eigenvectors in m.

Exceptions
AlgorithmExceptioneigensystem could not be solved within available precision. Check condition number of s.

Implemented in sc::BlockedSymmSCMatrix, sc::ReplSymmSCMatrix, sc::DistSymmSCMatrix, and sc::LocalSymmSCMatrix.

◆ element_op()

virtual void sc::SymmSCMatrix::element_op ( const Ref< SCElementOp > &  )
pure virtual

only applied to the unique elements of this.

For example, to compute the sum of all matrix elements you need to do the following:

SymmSCMatrix* A; // presumed initialized elsewhere
A->element_op(new SCElementScaleDiagonal(0.5)); // scale the diagonal by 1/2
SCElementSum* sum_op = new SCElementSum;
A->element_op(sum_op);
std::cout << "Sum of element of matrix A = " << sum_op->result() * 2.0 << std::endl;

Implemented in sc::BlockedSymmSCMatrix, sc::ReplSymmSCMatrix, sc::DistSymmSCMatrix, and sc::LocalSymmSCMatrix.

◆ gen_invert_this()

virtual void sc::SymmSCMatrix::gen_invert_this ( double  condition_number_threshold = 1e8)
pure virtual

Return the generalized inverse of this using SVD decomposition.

See also
SCMatrix::gen_invert_this()

Implemented in sc::BlockedSymmSCMatrix, sc::ReplSymmSCMatrix, sc::DistSymmSCMatrix, and sc::LocalSymmSCMatrix.

◆ get_subblock()

virtual SCMatrix* sc::SymmSCMatrix::get_subblock ( int  br,
int  er,
int  bc,
int  ec 
)
pure virtual

Return a subblock of this.

The subblock is defined as the rows starting at br and ending at er, and the columns beginning at bc and ending at ec.

Implemented in sc::BlockedSymmSCMatrix, sc::ReplSymmSCMatrix, sc::DistSymmSCMatrix, and sc::LocalSymmSCMatrix.


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

Generated at Sun Jan 26 2020 23:24:13 for MPQC 3.0.0-alpha using the documentation package Doxygen 1.8.16.