---
name: "sc_RefSymmSCMatrix"
section: "3"
platform: "linux"
package: "libsc-doc"
version: "2.3.1-22"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/sc_RefSymmSCMatrix"
---

# sc\_RefSymmSCMatrix(3)

The RefSymmSCMatrix class is a smart pointer to an SCSymmSCMatrix specialization.

## NAME

sc::RefSymmSCMatrix - The **RefSymmSCMatrix** class is a smart pointer to an SCSymmSCMatrix specialization.

## SYNOPSIS

`#include <matrix.h>`

Inherits **sc::Ref\< SymmSCMatrix \>**.

### Public Member Functions

**RefSymmSCMatrix** ()\
 Initializes the matrix pointer to 0.  **RefSymmSCMatrix** (const **RefSymmSCMatrix** &m)\
 Make this and m refer to the same **SCMatrix**.  **RefSymmSCMatrix** (**SymmSCMatrix** \*m)\
 Make this refer to m.  **RefSymmSCMatrix** & **operator=** (**SymmSCMatrix** \*m)\
 Make this refer to m.  **RefSymmSCMatrix** & **operator=** (const **RefSymmSCMatrix** &m)\
 Make this and m refer to the same matrix.  **RefSymmSCMatrix** (const **RefSCDimension** &d, const **Ref**\< **SCMatrixKit** \> &)\
 Create a vector with dimension d by d.  **RefSCMatrix** **operator\*** (const **RefSCMatrix** &) const\
 Multiply this by a matrix and return a matrix.  **RefSCMatrix** **operator\*** (const **RefSymmSCMatrix** &) const\
 **RefSCVector** **operator\*** (const **RefSCVector** &a) const\
 Multiply this by a vector and return a vector.  **RefSymmSCMatrix** **operator\*** (double) const\
 **RefSymmSCMatrix** **operator+** (const **RefSymmSCMatrix** &) const\
 Matrix addition and subtraction.  **RefSymmSCMatrix** **operator-** (const **RefSymmSCMatrix** &) const\
 **RefSymmSCMatrix** **i** () const\
 Return the inverse of this.  **RefSymmSCMatrix** **gi** () const\
 Return the generalized inverse of this.  **RefSymmSCMatrix** **clone** () const\
 These call the **SCMatrix** members of the same name after checking for references to 0.  **RefSymmSCMatrix** **copy** () const\
 void **set\_element** (int, int, double) const\
 void **accumulate\_element** (int, int, double) const\
 double **get\_element** (int, int) const\
 **RefSCMatrix** **get\_subblock** (int br, int er, int bc, int ec)\
 **RefSymmSCMatrix** **get\_subblock** (int br, int er)\
 void **assign\_subblock** (const **RefSCMatrix** &, int br, int er, int bc, int ec)\
 void **assign\_subblock** (const **RefSymmSCMatrix** &, int br, int er)\
 void **accumulate\_subblock** (const **RefSCMatrix** &, int, int, int, int)\
 void **accumulate\_subblock** (const **RefSymmSCMatrix** &, int, int)\
 **RefSCVector** **get\_row** (int)\
 void **assign\_row** (const **RefSCVector** &, int)\
 void **accumulate\_row** (const **RefSCVector** &, int)\
 void **accumulate\_symmetric\_outer\_product** (const **RefSCVector** &) const\
 double **scalar\_product** (const **RefSCVector** &) const\
 void **accumulate\_symmetric\_product** (const **RefSCMatrix** &) const\
 void **accumulate\_symmetric\_sum** (const **RefSCMatrix** &) const\
 void **accumulate\_transform** (const **RefSCMatrix** &a, const **RefSymmSCMatrix** &b, SCMatrix::Transform=SCMatrix::NormalTransform) const\
 Add a \* b \* a.t() to this.  void **accumulate\_transform** (const **RefSCMatrix** &a, const **RefDiagSCMatrix** &b, SCMatrix::Transform=SCMatrix::NormalTransform) const\
 void **accumulate\_transform** (const **RefSymmSCMatrix** &a, const **RefSymmSCMatrix** &b) const\
 void **randomize** () const\
 void **assign** (const **RefSymmSCMatrix** &) const\
 void **scale** (double) const\
 void **assign** (double) const\
 void **assign** (const double \*) const\
 void **assign** (const double \*\*) const\
 void **convert** (double \*) const\
 void **convert** (double \*\*) const\
 void **accumulate** (const **RefSymmSCMatrix** &) const\
 void **element\_op** (const **Ref**\< **SCElementOp** \> &) const\
 void **element\_op** (const **Ref**\< **SCElementOp2** \> &, const **RefSymmSCMatrix** &) const\
 void **element\_op** (const **Ref**\< **SCElementOp3** \> &, const **RefSymmSCMatrix** &, const **RefSymmSCMatrix** &) const\
 double **trace** () const\
 int **n** () const\
 **RefSCDimension** **dim** () const\
 **Ref**\< **SCMatrixKit** \> **kit** () const\
 void **print** (std::ostream &) const\
 void **print** (const char \*title=0, std::ostream &out=**ExEnv::out0**(), int=10) const\
 void **save** (**StateOut** &)\
 void **restore** (**StateIn** &)\
 Restores the matrix from **StateIn** object. The matrix must have been initialized already.  double **solve\_lin** (const **RefSCVector** &) const\
 Solves this x = v.  double **determ** () const\
 Returns the determinant of the referenced matrix.  **RefDiagSCMatrix** **eigvals** () const\
 Returns the eigenvalues of the reference matrix.  **RefSCMatrix** **eigvecs** () const\
 Returns the eigenvectors of the reference matrix.  void **diagonalize** (const **RefDiagSCMatrix** &**eigvals**, const **RefSCMatrix** &**eigvecs**) const\
 Sets eigvals to the eigenvalues and eigvecs to the eigenvalues and eigenvectors of the referenced matrix.  **SymmSCMatrixdouble** **operator()** (int **i**, int j) const\
 Assign and examine matrix elements.  int **nblock** () const\
 If this matrix is blocked return the number of blocks.  **RefSymmSCMatrix** **block** (int **i**) const\
 If this matrix is blocked return block i.

### Additional Inherited Members

## Detailed Description

The **RefSymmSCMatrix** class is a smart pointer to an SCSymmSCMatrix specialization.

## Constructor & Destructor Documentation

### sc::RefSymmSCMatrix::RefSymmSCMatrix ()

Initializes the matrix pointer to 0. The reference must be initialized before it is used.

### sc::RefSymmSCMatrix::RefSymmSCMatrix (const RefSCDimension & d, const Ref\< SCMatrixKit \> &)

Create a vector with dimension d by d. The data values are undefined.

## Member Function Documentation

### RefSymmSCMatrix sc::RefSymmSCMatrix::block (int i) const

If this matrix is blocked return block i. Otherwise return this as block 0.

### void sc::RefSymmSCMatrix::diagonalize (const RefDiagSCMatrix & eigvals, const RefSCMatrix & eigvecs) const

Sets eigvals to the eigenvalues and eigvecs to the eigenvalues and eigenvectors of the referenced matrix. The result satisfies eigvecs \* eigvals \* eigvecs.t() = (\*this). \

### int sc::RefSymmSCMatrix::nblock () const

If this matrix is blocked return the number of blocks. Otherwise return 1.

### double sc::RefSymmSCMatrix::solve\_lin (const RefSCVector &) const

Solves this x = v. Overwrites v with x.

## Author

Generated automatically by Doxygen for MPQC from the source code.
