ergo
mat::MatrixGeneral Class Reference

Normal matrix. More...

#include <MatrixGeneral.h>

Inheritance diagram for mat::MatrixGeneral:
mat::MatrixBase< Treal, Tmatrix >

List of all members.

Public Types

typedef VectorGeneral< Treal,
typename Tmatrix::VectorType > 
VectorType

Public Member Functions

 MatrixGeneral ()
 Default constructor.
 MatrixGeneral (const MatrixGeneral< Treal, Tmatrix > &matr)
 Copy constructor.
 MatrixGeneral (const MatrixSymmetric< Treal, Tmatrix > &symm)
 Copy from symmetric matrix constructor.
 MatrixGeneral (const MatrixTriangular< Treal, Tmatrix > &triang)
 Copy from triangular matrix constructor.
void assignFromFull (std::vector< Treal > const &fullMat)
void fullMatrix (std::vector< Treal > &fullMat) const
void fullMatrix (std::vector< Treal > &fullMat, std::vector< int > const &rowInversePermutation, std::vector< int > const &colInversePermutation) const
 Save matrix as full matrix.
void assign_from_sparse (std::vector< int > const &rowind, std::vector< int > const &colind, std::vector< Treal > const &values, SizesAndBlocks const &newRows, SizesAndBlocks const &newCols)
 Assign from sparse matrix given by three arrays.
void assign_from_sparse (std::vector< int > const &rowind, std::vector< int > const &colind, std::vector< Treal > const &values, std::vector< int > const &rowPermutation, std::vector< int > const &colPermutation)
 Same as above, except taking two additional arguments specifying the permutation of rows and columns.
void assign_from_sparse (std::vector< int > const &rowind, std::vector< int > const &colind, std::vector< Treal > const &values, SizesAndBlocks const &newRows, SizesAndBlocks const &newCols, std::vector< int > const &rowPermutation, std::vector< int > const &colPermutation)
 Same as above, except not assuming that sizes and blocks are set.
void get_values (std::vector< int > const &rowind, std::vector< int > const &colind, std::vector< Treal > &values) const
 Get values given by row and column index lists.
void get_values (std::vector< int > const &rowind, std::vector< int > const &colind, std::vector< Treal > &values, std::vector< int > const &rowPermutation, std::vector< int > const &colPermutation) const
 Same as above, except taking two additional arguments specifying the permutation of rows and columns.
void get_all_values (std::vector< int > &rowind, std::vector< int > &colind, std::vector< Treal > &values) const
 Get all values and corresponding row and column index lists, in matrix.
void get_all_values (std::vector< int > &rowind, std::vector< int > &colind, std::vector< Treal > &values, std::vector< int > const &rowInversePermutation, std::vector< int > const &colInversePermutation) const
 Same as above, except taking two additional arguments specifying the permutation of rows and columns.
MatrixGeneral< Treal, Tmatrix > & operator= (const MatrixGeneral< Treal, Tmatrix > &mat)
MatrixGeneral< Treal, Tmatrix > & operator= (const Xtrans< MatrixGeneral< Treal, Tmatrix > > &mt)
MatrixGeneral< Treal, Tmatrix > & operator= (const MatrixSymmetric< Treal, Tmatrix > &symm)
MatrixGeneral< Treal, Tmatrix > & operator= (const MatrixTriangular< Treal, Tmatrix > &triang)
MatrixGeneral< Treal, Tmatrix > & operator= (int const k)
Treal frob () const
Treal eucl (Treal const requestedAccuracy, int maxIter=-1) const
void thresh (Treal const threshold, normType const norm)
void frob_thresh (Treal threshold)
Treal eucl_thresh (Treal const threshold)
void gersgorin (Treal &lmin, Treal &lmax)
size_t nnz () const
size_t nvalues () const
void write_to_buffer (void *buffer, const int n_bytes) const
void read_from_buffer (void *buffer, const int n_bytes)
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &smm)
 C = alpha * op(A) * op(B)
MatrixGeneral< Treal, Tmatrix > & operator= (const XY< MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &mm)
 C = op(A) * op(B)
MatrixGeneral< Treal, Tmatrix > & operator+= (const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &smm)
 C += alpha * op(A) * op(B)
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZpUV< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix >, Treal, MatrixGeneral< Treal, Tmatrix > > &smmpsm)
 C = alpha * op(A) * op(B) + beta * C.
MatrixGeneral< Treal, Tmatrix > & operator= (XpY< MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > const &mpm)
 C = A + B.
MatrixGeneral< Treal, Tmatrix > & operator+= (MatrixGeneral< Treal, Tmatrix > const &A)
 B += A.
MatrixGeneral< Treal, Tmatrix > & operator-= (MatrixGeneral< Treal, Tmatrix > const &A)
MatrixGeneral< Treal, Tmatrix > & operator+= (XY< Treal, MatrixGeneral< Treal, Tmatrix > > const &sm)
 B += alpha * A.
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &smm)
 C = alpha * A * B : A is symmetric.
MatrixGeneral< Treal, Tmatrix > & operator= (const XY< MatrixSymmetric< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &mm)
 C = A * B : A is symmetric.
MatrixGeneral< Treal, Tmatrix > & operator+= (const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &smm)
 C += alpha * A * B : A is symmetric.
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZpUV< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix >, Treal, MatrixGeneral< Treal, Tmatrix > > &smmpsm)
 C = alpha * A * B + beta * C : A is symmetric.
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &smm)
 C = alpha * B * A : A is symmetric.
MatrixGeneral< Treal, Tmatrix > & operator= (const XY< MatrixGeneral< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &mm)
 C = B * A : A is symmetric.
MatrixGeneral< Treal, Tmatrix > & operator+= (const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &smm)
 C += alpha * B * A : A is symmetric.
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZpUV< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix >, Treal, MatrixGeneral< Treal, Tmatrix > > &smmpsm)
 C = alpha * B * A + beta * C : A is symmetric.
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &smm)
 C = alpha * A * B : A and B are symmetric.
MatrixGeneral< Treal, Tmatrix > & operator= (const XY< MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &mm)
 C = A * B : A and B are symmetric.
MatrixGeneral< Treal, Tmatrix > & operator+= (const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &smm)
 C += alpha * A * B : A and B are symmetric.
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZpUV< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix >, Treal, MatrixGeneral< Treal, Tmatrix > > &smmpsm)
 C = alpha * A * B + beta * C : A and B are symmetric.
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZ< Treal, MatrixTriangular< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &smm)
 B = alpha * op(A) * B : A is upper triangular.
MatrixGeneral< Treal, Tmatrix > & operator= (const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixTriangular< Treal, Tmatrix > > &smm)
 B = alpha * B * op(A) : A is upper triangular.
void random ()
void randomZeroStructure (Treal probabilityBeingZero)
template<typename TRule >
void setElementsByRule (TRule &rule)
std::string obj_type_id () const

Static Public Member Functions

static Treal frob_diff (const MatrixGeneral< Treal, Tmatrix > &A, const MatrixGeneral< Treal, Tmatrix > &B)
static Treal trace_ab (const MatrixGeneral< Treal, Tmatrix > &A, const MatrixGeneral< Treal, Tmatrix > &B)
static Treal trace_aTb (const MatrixGeneral< Treal, Tmatrix > &A, const MatrixGeneral< Treal, Tmatrix > &B)

Protected Member Functions

void writeToFileProt (std::ofstream &file) const
void readFromFileProt (std::ifstream &file)

Detailed Description

Normal matrix.

This class belongs to the matrix API

Treal: Type for real numbers

Tmatrix: The matrix class

Tperm: Permutation used in the matrix class

See also:
MatrixBase
MatrixSymmetric
MatrixTriangular

Member Typedef Documentation

typedef VectorGeneral<Treal, typename Tmatrix::VectorType> mat::MatrixGeneral::VectorType

Constructor & Destructor Documentation

mat::MatrixGeneral::MatrixGeneral ( ) [inline]

Default constructor.

mat::MatrixGeneral::MatrixGeneral ( const MatrixGeneral< Treal, Tmatrix > &  matr) [inline, explicit]

Copy constructor.

mat::MatrixGeneral::MatrixGeneral ( const MatrixSymmetric< Treal, Tmatrix > &  symm) [inline, explicit]

Copy from symmetric matrix constructor.

mat::MatrixGeneral::MatrixGeneral ( const MatrixTriangular< Treal, Tmatrix > &  triang) [inline, explicit]

Copy from triangular matrix constructor.


Member Function Documentation

void mat::MatrixGeneral::assign_from_sparse ( std::vector< int > const &  rowind,
std::vector< int > const &  colind,
std::vector< Treal > const &  values,
SizesAndBlocks const &  newRows,
SizesAndBlocks const &  newCols 
) [inline]

Assign from sparse matrix given by three arrays.

The arrays contain row indices, column indices and values. The indices start at zero. nval is the length of the three arrays.

Warning:
All indexing start at zero.

Referenced by mainFun(), mat::MatrixGeneral< ergo_real, Matri >::assign_from_sparse(), main(), compute_R_matrix_sparse(), compute_operator_matrix_sparse_symm(), and compute_K_by_boxes_sparse_nosymm().

void mat::MatrixGeneral::assign_from_sparse ( std::vector< int > const &  rowind,
std::vector< int > const &  colind,
std::vector< Treal > const &  values,
std::vector< int > const &  rowPermutation,
std::vector< int > const &  colPermutation 
) [inline]

Same as above, except taking two additional arguments specifying the permutation of rows and columns.

Also assuming that sizes and blocks are already known

void mat::MatrixGeneral::assign_from_sparse ( std::vector< int > const &  rowind,
std::vector< int > const &  colind,
std::vector< Treal > const &  values,
SizesAndBlocks const &  newRows,
SizesAndBlocks const &  newCols,
std::vector< int > const &  rowPermutation,
std::vector< int > const &  colPermutation 
) [inline]

Same as above, except not assuming that sizes and blocks are set.

void mat::MatrixGeneral::assignFromFull ( std::vector< Treal > const &  fullMat) [inline]

Referenced by mainFun().

Treal mat::MatrixGeneral::eucl ( Treal const  requestedAccuracy,
int  maxIter = -1 
) const
Treal mat::MatrixGeneral::eucl_thresh ( Treal const  threshold)
Treal mat::MatrixGeneral::frob ( ) const [inline]
static Treal mat::MatrixGeneral::frob_diff ( const MatrixGeneral< Treal, Tmatrix > &  A,
const MatrixGeneral< Treal, Tmatrix > &  B 
) [inline, static]
void mat::MatrixGeneral::frob_thresh ( Treal  threshold) [inline]

Referenced by mainFun().

void mat::MatrixGeneral::fullMatrix ( std::vector< Treal > &  fullMat) const [inline]
void mat::MatrixGeneral::fullMatrix ( std::vector< Treal > &  fullMat,
std::vector< int > const &  rowInversePermutation,
std::vector< int > const &  colInversePermutation 
) const [inline]

Save matrix as full matrix.

Whole matrix is written in columnwise order. Both lower and upper triangle. Permutation is used.

void mat::MatrixGeneral::gersgorin ( Treal &  lmin,
Treal &  lmax 
) [inline]
void mat::MatrixGeneral::get_all_values ( std::vector< int > &  rowind,
std::vector< int > &  colind,
std::vector< Treal > &  values 
) const [inline]

Get all values and corresponding row and column index lists, in matrix.

nval is the length of the three arrays and is preferably computed with nvalues() before hand. Returns the number of values.

See also:
nvalues()
Warning:
All indexing start at zero.

Referenced by mainFun(), mat::MatrixGeneral< ergo_real, Matri >::fullMatrix(), get_mulliken_charges(), main(), get_CSR_from_normalMatrix(), and write_CSR_matrix().

void mat::MatrixGeneral::get_all_values ( std::vector< int > &  rowind,
std::vector< int > &  colind,
std::vector< Treal > &  values,
std::vector< int > const &  rowInversePermutation,
std::vector< int > const &  colInversePermutation 
) const [inline]

Same as above, except taking two additional arguments specifying the permutation of rows and columns.

Note, however, that this permutation is the inverse permutation compared to the permutations provided in the functions "assign_from_sparse", "add_values", and "get_values"

Warning:
permutation is inverse compared to other functions
void mat::MatrixGeneral::get_values ( std::vector< int > const &  rowind,
std::vector< int > const &  colind,
std::vector< Treal > &  values 
) const [inline]

Get values given by row and column index lists.

Input arrays contain row and column indices. The output array contains values for the given indices. nval is the length of the three arrays.

Warning:
All indexing start at zero.

Referenced by mainFun(), and get_mulliken_charges().

void mat::MatrixGeneral::get_values ( std::vector< int > const &  rowind,
std::vector< int > const &  colind,
std::vector< Treal > &  values,
std::vector< int > const &  rowPermutation,
std::vector< int > const &  colPermutation 
) const [inline]

Same as above, except taking two additional arguments specifying the permutation of rows and columns.

size_t mat::MatrixGeneral::nnz ( ) const [inline]

Referenced by mainFun().

size_t mat::MatrixGeneral::nvalues ( ) const [inline]
std::string mat::MatrixGeneral::obj_type_id ( ) const [inline]

Reimplemented from mat::MatrixBase< Treal, Tmatrix >.

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator+= ( const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &  smm)

C += alpha * op(A) * op(B)

References mat::gemm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator+= ( MatrixGeneral< Treal, Tmatrix > const &  A) [inline]

B += A.

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator+= ( XY< Treal, MatrixGeneral< Treal, Tmatrix > > const &  sm) [inline]

B += alpha * A.

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator+= ( const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &  smm)

C += alpha * A * B : A is symmetric.

References mat::symm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator+= ( const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &  smm)

C += alpha * B * A : A is symmetric.

References mat::symm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator+= ( const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &  smm)

C += alpha * A * B : A and B are symmetric.

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator-= ( MatrixGeneral< Treal, Tmatrix > const &  A) [inline]
MatrixGeneral<Treal, Tmatrix>& mat::MatrixGeneral::operator= ( const MatrixGeneral< Treal, Tmatrix > &  mat) [inline]
MatrixGeneral<Treal, Tmatrix>& mat::MatrixGeneral::operator= ( const Xtrans< MatrixGeneral< Treal, Tmatrix > > &  mt) [inline]

Reimplemented from mat::MatrixBase< Treal, Tmatrix >.

MatrixGeneral<Treal, Tmatrix>& mat::MatrixGeneral::operator= ( const MatrixSymmetric< Treal, Tmatrix > &  symm) [inline]
MatrixGeneral<Treal, Tmatrix>& mat::MatrixGeneral::operator= ( const MatrixTriangular< Treal, Tmatrix > &  triang) [inline]
MatrixGeneral<Treal, Tmatrix>& mat::MatrixGeneral::operator= ( int const  k) [inline]
MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &  smm)

C = alpha * op(A) * op(B)

References mat::gemm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XY< MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &  mm)

C = op(A) * op(B)

References mat::gemm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZpUV< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix >, Treal, MatrixGeneral< Treal, Tmatrix > > &  smmpsm)

C = alpha * op(A) * op(B) + beta * C.

References mat::gemm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( XpY< MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > const &  mpm) [inline]

C = A + B.

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &  smm)

C = alpha * A * B : A is symmetric.

References mat::symm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XY< MatrixSymmetric< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &  mm)

C = A * B : A is symmetric.

References mat::symm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZpUV< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix >, Treal, MatrixGeneral< Treal, Tmatrix > > &  smmpsm)

C = alpha * A * B + beta * C : A is symmetric.

References mat::symm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &  smm)

C = alpha * B * A : A is symmetric.

References mat::symm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XY< MatrixGeneral< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &  mm)

C = B * A : A is symmetric.

References mat::symm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZpUV< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix >, Treal, MatrixGeneral< Treal, Tmatrix > > &  smmpsm)

C = alpha * B * A + beta * C : A is symmetric.

References mat::symm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &  smm)

C = alpha * A * B : A and B are symmetric.

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XY< MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &  mm)

C = A * B : A and B are symmetric.

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZpUV< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix >, Treal, MatrixGeneral< Treal, Tmatrix > > &  smmpsm)

C = alpha * A * B + beta * C : A and B are symmetric.

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZ< Treal, MatrixTriangular< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &  smm)

B = alpha * op(A) * B : A is upper triangular.

References mat::trmm().

MatrixGeneral< Treal, Tmatrix > & mat::MatrixGeneral::operator= ( const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixTriangular< Treal, Tmatrix > > &  smm)

B = alpha * B * op(A) : A is upper triangular.

References mat::trmm().

void mat::MatrixGeneral::random ( ) [inline]

Referenced by mainFun().

void mat::MatrixGeneral::randomZeroStructure ( Treal  probabilityBeingZero) [inline]

Referenced by mainFun().

void mat::MatrixGeneral::read_from_buffer ( void *  buffer,
const int  n_bytes 
) [inline]
void mat::MatrixGeneral::readFromFileProt ( std::ifstream &  file) [inline, protected]
template<typename TRule >
void mat::MatrixGeneral::setElementsByRule ( TRule &  rule) [inline]

Referenced by mainFun().

void mat::MatrixGeneral::thresh ( Treal const  threshold,
normType const  norm 
)

References mat::frobNorm.

static Treal mat::MatrixGeneral::trace_ab ( const MatrixGeneral< Treal, Tmatrix > &  A,
const MatrixGeneral< Treal, Tmatrix > &  B 
) [inline, static]
static Treal mat::MatrixGeneral::trace_aTb ( const MatrixGeneral< Treal, Tmatrix > &  A,
const MatrixGeneral< Treal, Tmatrix > &  B 
) [inline, static]
void mat::MatrixGeneral::write_to_buffer ( void *  buffer,
const int  n_bytes 
) const [inline]
void mat::MatrixGeneral::writeToFileProt ( std::ofstream &  file) const [inline, protected]

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