MPQC 3.0.0-alpha
Loading...
Searching...
No Matches
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.
 
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.
 
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.
 
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.
 
virtual void element_op (const Ref< SCElementOp > &)=0
 only applied to the unique elements of this.
 
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.
 
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.
 
- 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.
 
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
 Return 1 if the object is managed. Otherwise return 0.
 

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

◆ accumulate()

virtual void sc::SymmSCMatrix::accumulate ( const SymmSCMatrix * m)
pure virtual

◆ accumulate_row()

virtual void sc::SymmSCMatrix::accumulate_row ( SCVector * v,
int i )
pure virtual

◆ accumulate_subblock()

virtual void sc::SymmSCMatrix::accumulate_subblock ( SCMatrix * m,
int ,
int ,
int ,
int  )
pure virtual

Sum m into a subblock of this.

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

◆ accumulate_symmetric_product()

virtual void sc::SymmSCMatrix::accumulate_symmetric_product ( SCMatrix * a)
virtual

Sum into this a * a.t()

Reimplemented in sc::BlockedSymmSCMatrix, sc::LocalSymmSCMatrix, and sc::ReplSymmSCMatrix.

◆ accumulate_symmetric_sum()

virtual void sc::SymmSCMatrix::accumulate_symmetric_sum ( SCMatrix * a)
pure virtual

◆ all_blocks()

virtual Ref< SCMatrixSubblockIter > sc::SymmSCMatrix::all_blocks ( SCMatrixSubblockIter::Access )
pure virtual

Returns iterators for the all blocks used in this matrix.

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

◆ assign()

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

Make this have the same elements as m.

The dimensions must match.

◆ assign_row()

virtual void sc::SymmSCMatrix::assign_row ( SCVector * v,
int i )
pure virtual

◆ assign_subblock()

virtual void sc::SymmSCMatrix::assign_subblock ( SCMatrix * m,
int ,
int ,
int ,
int  )
pure virtual

Assign m to a subblock of this.

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

◆ assign_val()

virtual void sc::SymmSCMatrix::assign_val ( double val)
virtual

Overridden to implement the assign functions.

Reimplemented in sc::BlockedSymmSCMatrix, and sc::ReplSymmSCMatrix.

Referenced by assign().

◆ determ_this()

virtual double sc::SymmSCMatrix::determ_this ( )
pure virtual

Return the determinant of this. this is overwritten.

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

◆ diagonalize()

virtual void sc::SymmSCMatrix::diagonalize ( DiagSCMatrix * d,
SCMatrix * m )
pure virtual

Diagonalize this, placing the eigenvalues in d and the eigenvectors in m.

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

◆ 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::DistSymmSCMatrix, sc::LocalSymmSCMatrix, and sc::ReplSymmSCMatrix.

◆ 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;
Definition elemop.h:326
Definition elemop.h:480
The SymmSCMatrix class is the abstract base class for symmetric double valued matrices.
Definition abstract.h:389
virtual void element_op(const Ref< SCElementOp > &)=0
only applied to the unique elements of this.

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

◆ 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::DistSymmSCMatrix, sc::LocalSymmSCMatrix, and sc::ReplSymmSCMatrix.

◆ get_element()

virtual double sc::SymmSCMatrix::get_element ( int ,
int  ) const
pure virtual

Return or modify an element.

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

◆ get_row()

virtual SCVector * sc::SymmSCMatrix::get_row ( int i)
pure virtual

◆ 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::DistSymmSCMatrix, sc::LocalSymmSCMatrix, and sc::ReplSymmSCMatrix.

◆ invert_this()

virtual double sc::SymmSCMatrix::invert_this ( )
pure virtual

◆ local_blocks()

virtual Ref< SCMatrixSubblockIter > sc::SymmSCMatrix::local_blocks ( SCMatrixSubblockIter::Access )
pure virtual

Returns iterators for the local (rapidly accessible) blocks used in this matrix.

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

◆ print()

void sc::SymmSCMatrix::print ( std::ostream & o = ExEnv::out0()) const
virtual

Print out the matrix.

Reimplemented from sc::DescribedClass.

◆ save()

virtual void sc::SymmSCMatrix::save ( StateOut & )
virtual

Save and restore this in an implementation independent way.

Reimplemented in sc::BlockedSymmSCMatrix.

◆ scalar_product()

virtual double sc::SymmSCMatrix::scalar_product ( SCVector * v)
virtual

Return the scalar obtained by multiplying this on the left and right by v.

Reimplemented in sc::BlockedSymmSCMatrix, sc::LocalSymmSCMatrix, and sc::ReplSymmSCMatrix.

◆ scale()

virtual void sc::SymmSCMatrix::scale ( double )
virtual

Multiply all elements by val.

Reimplemented in sc::BlockedSymmSCMatrix, and sc::ReplSymmSCMatrix.

◆ trace()

virtual double sc::SymmSCMatrix::trace ( )
pure virtual

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

Generated at Wed Sep 25 2024 02:45:36 for MPQC 3.0.0-alpha using the documentation package Doxygen 1.12.0.