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

# sc\_SCMatrix(3)

The SCMatrix class is the abstract base class for general double valued n by m matrices.

## NAME

sc::SCMatrix - The **SCMatrix** class is the abstract base class for general double valued n by m matrices.

## SYNOPSIS

`#include <abstract.h>`

Inherits **sc::DescribedClass**.

Inherited by **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### Public Types

enum **Transform** { **NormalTransform** = 0, **TransposeTransform** = 1 }\

### Public Member Functions

**SCMatrix** (const **RefSCDimension** &, const **RefSCDimension** &, **SCMatrixKit** \*)\
 virtual void **save** (**StateOut** &)\
 Save and restore this in an implementation independent way.  virtual void **restore** (**StateIn** &)\
 **Ref**\< **SCMatrixKit** \> **kit** () const\
 Return the **SCMatrixKit** used to create this object.  int **nrow** () const\
 Return the number of rows.  int **ncol** () const\
 Return the number of columns.  virtual double **maxabs** () const\
 Return the maximum absolute value element.  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\[ir\*nrow()+j\].  void **assign** (const double \*\*m)\
 Assign element i, j to m\[i\]\[j\].  void **assign** (**SCMatrix** \*m)\
 Make this have the same elements as m. The dimensions must match.  virtual void **assign\_val** (double val)\
 Overridden to implement to assign members.  virtual void **assign\_p** (const double \*m)\
 virtual void **assign\_pp** (const double \*\*m)\
 virtual void **assign\_r** (**SCMatrix** \*m)\
 virtual void **convert** (double \*) const\
 Like the assign members, but these write values to the arguments.  virtual void **convert** (double \*\*) const\
 virtual void **convert** (**SCMatrix** \*)\
 Convert an **SCMatrix** of a different specialization to this specialization and possibly accumulate the data.  virtual void **convert\_accumulate** (**SCMatrix** \*)\
 virtual void **scale** (double val)\
 Multiply all elements by val.  virtual void **scale\_diagonal** (double val)\
 Scale the diagonal elements by val.  virtual void **shift\_diagonal** (double val)\
 Shift the diagonal elements by val.  virtual void **unit** ()\
 Make this equal to the unit matrix.  virtual **SCMatrix** \* **copy** ()\
 Return a matrix with the same dimension and same elements.  virtual **SCMatrix** \* **clone** ()\
 Return a matrix with the same dimension but uninitialized memory.  **RefSCDimension** **rowdim** () const\
 Return the row or column dimension.  **RefSCDimension** **coldim** () const\
 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 **SCMatrix** \* **get\_subblock** (int br, int er, int bc, int ec)=0\
 Return a subblock of this.  virtual void **assign\_subblock** (**SCMatrix** \*m, int, int, int, int, int=0, int=0)=0\
 Assign m to a subblock of this.  virtual void **accumulate\_subblock** (**SCMatrix** \*m, int, int, int, int, int=0, int=0)=0\
 Sum m into a subblock of this.  virtual **SCVector** \* **get\_row** (int i)=0\
 Return a row or column of this.  virtual **SCVector** \* **get\_column** (int i)=0\
 virtual void **assign\_row** (**SCVector** \*v, int i)=0\
 Assign v to a row or column of this.  virtual void **assign\_column** (**SCVector** \*v, int i)=0\
 virtual void **accumulate\_row** (**SCVector** \*v, int i)=0\
 Sum v to a row or column of this.  virtual void **accumulate\_column** (**SCVector** \*v, int i)=0\
 virtual void **accumulate** (const **SCMatrix** \*m)=0\
 Sum m into this.  virtual void **accumulate** (const **SymmSCMatrix** \*m)=0\
 virtual void **accumulate** (const **DiagSCMatrix** \*m)=0\
 virtual void **accumulate** (const **SCVector** \*)=0\
 virtual void **accumulate\_outer\_product** (**SCVector** \*, **SCVector** \*)=0\
 Sum into this the products of various vectors or matrices.  void **accumulate\_product** (**SCMatrix** \*m1, **SCMatrix** \*m2)\
 void **accumulate\_product** (**SCMatrix** \*m1, **SymmSCMatrix** \*m2)\
 void **accumulate\_product** (**SCMatrix** \*m1, **DiagSCMatrix** \*m2)\
 void **accumulate\_product** (**SymmSCMatrix** \*m1, **SCMatrix** \*m2)\
 void **accumulate\_product** (**DiagSCMatrix** \*m1, **SCMatrix** \*m2)\
 void **accumulate\_product** (**SymmSCMatrix** \*m1, **SymmSCMatrix** \*m2)\
 virtual void **accumulate\_product\_rr** (**SCMatrix** \*, **SCMatrix** \*)=0\
 virtual void **accumulate\_product\_rs** (**SCMatrix** \*, **SymmSCMatrix** \*)\
 virtual void **accumulate\_product\_rd** (**SCMatrix** \*, **DiagSCMatrix** \*)\
 virtual void **accumulate\_product\_sr** (**SymmSCMatrix** \*, **SCMatrix** \*)\
 virtual void **accumulate\_product\_dr** (**DiagSCMatrix** \*, **SCMatrix** \*)\
 virtual void **accumulate\_product\_ss** (**SymmSCMatrix** \*, **SymmSCMatrix** \*)\
 virtual void **transpose\_this** ()=0\
 Transpose this.  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 void **svd\_this** (**SCMatrix** \*U, **DiagSCMatrix** \*sigma, **SCMatrix** \*V)\
 **Compute** the singular value decomposition for this, possibly destroying this.  virtual double **solve\_this** (**SCVector** \*)=0\
 virtual void **gen\_invert\_this** ()\
 virtual void **schmidt\_orthog** (**SymmSCMatrix** \*, int n)=0\
 Schmidt orthogonalize this.  virtual int **schmidt\_orthog\_tol** (**SymmSCMatrix** \*, double tol, double \*res=0)=0\
 Schmidt orthogonalize this.  virtual void **element\_op** (const **Ref**\< **SCElementOp** \> &)=0\
 Perform the element operation op on each element of this.  virtual void **element\_op** (const **Ref**\< **SCElementOp2** \> &, **SCMatrix** \*)=0\
 virtual void **element\_op** (const **Ref**\< **SCElementOp3** \> &, **SCMatrix** \*, **SCMatrix** \*)=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 =0\
 **Ref**\< **MessageGrp** \> **messagegrp** () const\
 Returns the message group used by the matrix kit.  virtual **Ref**\< **SCMatrixSubblockIter** \> **local\_blocks** (SCMatrixSubblockIter::Access)=0\
 Returns iterators for the local (rapidly accessible) blocks used in this matrix.  virtual **Ref**\< **SCMatrixSubblockIter** \> **all\_blocks** (SCMatrixSubblockIter::Access)=0\
 Returns iterators for the all blocks used in this matrix.

### Protected Attributes

**RefSCDimension** **d1**\
 **RefSCDimension** **d2**\
 **Ref**\< **SCMatrixKit** \> **kit\_**\

### Additional Inherited Members

## Detailed Description

The **SCMatrix** class is the abstract base class for general double valued n by m matrices.

For symmetric matrices use **SymmSCMatrix** and for diagonal matrices use **DiagSCMatrix**.

## Member Function Documentation

### virtual void sc::SCMatrix::accumulate (const SCMatrix \* m)` [pure virtual]`

Sum m into this.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual void sc::SCMatrix::accumulate\_outer\_product (SCVector \*, SCVector \*)` [pure virtual]`

Sum into this the products of various vectors or matrices.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual void sc::SCMatrix::accumulate\_row (SCVector \* v, int i)` [pure virtual]`

Sum v to a row or column of this.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual void sc::SCMatrix::accumulate\_subblock (SCMatrix \* m, int, int, int, int, int = `0`, int = `0`)` [pure virtual]`

Sum m into a subblock of this.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual Ref\< SCMatrixSubblockIter \> sc::SCMatrix::all\_blocks (SCMatrixSubblockIter::Access)` [pure virtual]`

Returns iterators for the all blocks used in this matrix.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual void sc::SCMatrix::assign\_row (SCVector \* v, int i)` [pure virtual]`

Assign v to a row or column of this.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual void sc::SCMatrix::assign\_subblock (SCMatrix \* m, int, int, int, int, int = `0`, int = `0`)` [pure virtual]`

Assign m to a subblock of this.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual void sc::SCMatrix::assign\_val (double val)` [virtual]`

Overridden to implement to assign members.

Reimplemented in **sc::BlockedSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

Referenced by **assign()**.

### virtual double sc::SCMatrix::determ\_this ()` [pure virtual]`

Return the determinant of this. this is overwritten.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual void sc::SCMatrix::element\_op (const Ref\< SCElementOp \> &)` [pure virtual]`

Perform the element operation op on each element of this.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual double sc::SCMatrix::get\_element (int, int) const` [pure virtual]`

Return or modify an element.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual SCVector \* sc::SCMatrix::get\_row (int i)` [pure virtual]`

Return a row or column of this.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual SCMatrix \* sc::SCMatrix::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::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual double sc::SCMatrix::invert\_this ()` [pure virtual]`

Invert this.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual Ref\< SCMatrixSubblockIter \> sc::SCMatrix::local\_blocks (SCMatrixSubblockIter::Access)` [pure virtual]`

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

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### void sc::SCMatrix::print (std::ostream & o = ExEnv::out0`()`) const` [virtual]`

Print out the matrix.

Reimplemented from **sc::DescribedClass**.

### virtual void sc::SCMatrix::save (StateOut &)` [virtual]`

Save and restore this in an implementation independent way.

Reimplemented in **sc::BlockedSCMatrix**.

### virtual void sc::SCMatrix::schmidt\_orthog (SymmSCMatrix \*, int n)` [pure virtual]`

Schmidt orthogonalize this. S is the overlap matrix. n is the number of columns to orthogonalize.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual int sc::SCMatrix::schmidt\_orthog\_tol (SymmSCMatrix \*, double tol, double \* res = `0`)` [pure virtual]`

Schmidt orthogonalize this. S is the overlap matrix. tol is the tolerance. The number of linearly independent vectors is returned.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual void sc::SCMatrix::svd\_this (SCMatrix \* U, DiagSCMatrix \* sigma, SCMatrix \* V)` [virtual]`

**Compute** the singular value decomposition for this, possibly destroying this.

Reimplemented in **sc::BlockedSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual double sc::SCMatrix::trace ()` [pure virtual]`

Return the trace.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

### virtual void sc::SCMatrix::transpose\_this ()` [pure virtual]`

Transpose this.

Implemented in **sc::BlockedSCMatrix**, **sc::DistSCMatrix**, **sc::LocalSCMatrix**, and **sc::ReplSCMatrix**.

## Author

Generated automatically by Doxygen for MPQC from the source code.
