ergo
mat::MatrixSymmetric Class Reference

Symmetric matrix. More...

#include <MatrixSymmetric.h>

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

List of all members.

Public Types

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

Public Member Functions

 MatrixSymmetric ()
 Default constructor.
 MatrixSymmetric (const MatrixSymmetric< Treal, Tmatrix > &symm)
 Copy constructor.
 MatrixSymmetric (const XY< Treal, MatrixSymmetric< Treal, Tmatrix > > &sm)
 MatrixSymmetric (const MatrixGeneral< Treal, Tmatrix > &matr)
 'Copy from normal matrix' - constructor
void assignFromFull (std::vector< Treal > const &fullMat)
void assignFromFull (std::vector< Treal > const &fullMat, std::vector< int > const &rowPermutation, std::vector< int > const &colPermutation)
void fullMatrix (std::vector< Treal > &fullMat) const
 Save matrix as full matrix.
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)
 Assign from sparse matrix given by three vectors.
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 vectors.
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 taking sizes and blocks arguments.
void add_values (std::vector< int > const &rowind, std::vector< int > const &colind, std::vector< Treal > const &values)
 Add given set of values to the matrix.
void add_values (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 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.
MatrixSymmetric< Treal, Tmatrix > & operator= (const MatrixSymmetric< Treal, Tmatrix > &symm)
MatrixSymmetric< Treal, Tmatrix > & operator= (const MatrixGeneral< Treal, Tmatrix > &matr)
MatrixSymmetric< Treal, Tmatrix > & operator= (int const k)
Treal frob () const
Treal mixed_norm (Treal const requestedAccuracy, int maxIter=-1) const
Treal eucl (Treal const requestedAccuracy, int maxIter=-1) const
void quickEuclBounds (Treal &euclLowerBound, Treal &euclUpperBound) const
Treal thresh (Treal const threshold, normType const norm)
 Does thresholding so that the error in the chosen norm is below the given threshold.
Treal frob_thresh (Treal const threshold)
 Does thresholding so that the error in the Frobenius norm is below the given threshold.
Treal eucl_thresh (Treal const threshold, MatrixTriangular< Treal, Tmatrix > const *const Zptr=NULL)
Treal eucl_element_level_thresh (Treal const threshold)
void getSizesAndBlocksForFrobNormMat (SizesAndBlocks &rows_new, SizesAndBlocks &cols_new) const
Treal mixed_norm_thresh (Treal const threshold)
void simple_blockwise_frob_thresh (Treal const threshold)
void gersgorin (Treal &lmin, Treal &lmax) const
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)
MatrixSymmetric< Treal, Tmatrix > & operator= (XY< Treal, MatrixSymmetric< Treal, Tmatrix > > const &sm)
 B = alpha * A : A and B are symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator= (const XYZpUV< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix >, Treal, MatrixSymmetric< Treal, Tmatrix > > &sm2psm)
 C = alpha * A * A + beta * C : A and C are symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator= (const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &sm2)
 C = alpha * A * A : A and C are symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator+= (const XYZ< Treal, MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > &sm2)
 C += alpha * A * A : A and C are symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator= (const XYZpUV< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix >, Treal, MatrixSymmetric< Treal, Tmatrix > > &smmpsm)
 C = alpha * A * transpose(A) + beta * C : C is symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator= (const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &smm)
 C = alpha * A * transpose(A) : C is symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator+= (const XYZ< Treal, MatrixGeneral< Treal, Tmatrix >, MatrixGeneral< Treal, Tmatrix > > &smm)
 C += alpha * A * transpose(A) : C is symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator= (const XYZ< MatrixTriangular< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix >, MatrixTriangular< Treal, Tmatrix > > &zaz)
 A = Z * A * transpose(Z) : Z is upper triangular and A is symmetric; A = transpose(Z) * A * Z : Z is upper triangular and A is symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator= (XpY< MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > const &mpm)
 C = A + B : A, B, and C are symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator= (XmY< MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > const &mm)
 C = A - B : A, B, and C are symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator+= (MatrixSymmetric< Treal, Tmatrix > const &A)
 B += A : A and B are symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator-= (MatrixSymmetric< Treal, Tmatrix > const &A)
 B -= A : A and B are symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator+= (XY< Treal, MatrixSymmetric< Treal, Tmatrix > > const &sm)
 B += alpha * A : A and B are symmetric.
MatrixSymmetric< Treal, Tmatrix > & operator-= (XY< Treal, MatrixSymmetric< Treal, Tmatrix > > const &sm)
 B -= alpha * A : A and B are symmetric.
template<typename Top >
Treal accumulateWith (Top &op)
void random ()
void randomZeroStructure (Treal probabilityBeingZero)
template<typename TRule >
void setElementsByRule (TRule &rule)
 Uses rule depending on the row and column indexes to set matrix elements The Trule class should have the function "Treal = set(int row,int col)" which is used to set the elements.
void transfer (MatrixSymmetric< Treal, Tmatrix > &dest)
 Transfer this matrix to dest, clearing previous content of dest if any.
template<typename Tvector >
void matVecProd (Tvector &y, Tvector const &x) const
std::string obj_type_id () const

Static Public Member Functions

static Interval< Treal > diff (const MatrixSymmetric< Treal, Tmatrix > &A, const MatrixSymmetric< Treal, Tmatrix > &B, normType const norm, Treal const requestedAccuracy)
 Returns interval containing the Euclidean norm of A - B ( || A - B ||_2 )
static Interval< Treal > diffIfSmall (const MatrixSymmetric< Treal, Tmatrix > &A, const MatrixSymmetric< Treal, Tmatrix > &B, normType const norm, Treal const requestedAccuracy, Treal const maxAbsVal)
 Returns interval containing the Euclidean norm of A - B ( || A - B ||_2 ) based on the chosen norm.
static Treal frob_diff (const MatrixSymmetric< Treal, Tmatrix > &A, const MatrixSymmetric< Treal, Tmatrix > &B)
 Returns the Frobenius norm of A - B ( || A - B ||_F )
static Treal eucl_diff (const MatrixSymmetric< Treal, Tmatrix > &A, const MatrixSymmetric< Treal, Tmatrix > &B, Treal const requestedAccuracy)
 Returns the Euclidean norm of A - B ( || A - B ||_2 )
static Treal mixed_diff (const MatrixSymmetric< Treal, Tmatrix > &A, const MatrixSymmetric< Treal, Tmatrix > &B, Treal const requestedAccuracy)
 Returns the 'mixed' norm of A - B ( || A - B ||_mixed )
static Interval< Treal > euclDiffIfSmall (const MatrixSymmetric< Treal, Tmatrix > &A, const MatrixSymmetric< Treal, Tmatrix > &B, Treal const requestedAccuracy, Treal const maxAbsVal, VectorType *const eVecPtr=0)
 Returns interval containing the Euclidean norm of A - B ( || A - B ||_2 ).
static Treal trace_ab (const MatrixSymmetric< Treal, Tmatrix > &A, const MatrixSymmetric< Treal, Tmatrix > &B)
static void ssmmUpperTriangleOnly (const Treal alpha, const MatrixSymmetric< Treal, Tmatrix > &A, const MatrixSymmetric< Treal, Tmatrix > &B, const Treal beta, MatrixSymmetric< Treal, Tmatrix > &C)
 C = alpha * A * B + beta * C where A and B are symmetric and only the upper triangle of C is computed, C is enforced to be symmetric!

Protected Member Functions

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

Static Protected Member Functions

static void getPermutedAndSymmetrized (std::vector< int > const &rowind, std::vector< int > const &rowPermutation, std::vector< int > &newRowind, std::vector< int > const &colind, std::vector< int > const &colPermutation, std::vector< int > &newColind)
 This function permutes row and column indices according to the specified permutation and gives the indices as upper triangle in the new permutation.

Detailed Description

Symmetric matrix.

This class belongs to the matrix API

The matrix is stored in the upper triangle.

Treal: Type for real numbers

Tmatrix: The matrix class

See also:
MatrixBase
MatrixGeneral
MatrixTriangular

Member Typedef Documentation

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

Constructor & Destructor Documentation

mat::MatrixSymmetric::MatrixSymmetric ( ) [inline]

Default constructor.

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

Copy constructor.

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

'Copy from normal matrix' - constructor


Member Function Documentation

template<typename Top >
Treal mat::MatrixSymmetric::accumulateWith ( Top &  op) [inline]
void mat::MatrixSymmetric::add_values ( std::vector< int > const &  rowind,
std::vector< int > const &  colind,
std::vector< Treal > const &  values 
) [inline]

Add given set of values to the matrix.

The values should be given in upper triangular storage.

Referenced by SparseMatrix::addSymmetrizedTo(), main(), calculation_shared(), and add_random_diag_perturbation().

void mat::MatrixSymmetric::add_values ( 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.

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

Assign from sparse matrix given by three vectors.

The vectors contain row indices, column indices and values. The indices start at zero. The elements to be added must be given in upper triangluar storage. Information about sizes and blocks for rows as well as columns must also be given. Assumes that sizes and blocks are already set.

Warning:
All indexing start at zero.

Referenced by mainFun(), mat::MatrixSymmetric< ergo_real, Matri >::assignFromFull(), mat::MatrixSymmetric< ergo_real, Matri >::assign_from_sparse(), get_T(), compute_h_core_matrix_simple_dense(), add_disturbance_to_matrix(), get_simple_starting_guess_sparse(), get_diag_matrix_from_file(), main(), load_density_and_project_sparse(), compute_V_sparse(), compute_J_by_boxes_sparse(), and compute_K_by_boxes_sparse().

void mat::MatrixSymmetric::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 vectors.

The vectors contain row indices, column indices and values. The indices start at zero. The elements to be added must be given in upper triangluar storage. Information about sizes and blocks for rows as well as columns must also be given.

Warning:
All indexing start at zero.
void mat::MatrixSymmetric::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 set.

void mat::MatrixSymmetric::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 taking sizes and blocks arguments.

void mat::MatrixSymmetric::assignFromFull ( std::vector< Treal > const &  fullMat,
std::vector< int > const &  rowPermutation,
std::vector< int > const &  colPermutation 
) [inline]
Interval< Treal > mat::MatrixSymmetric::diff ( const MatrixSymmetric< Treal, Tmatrix > &  A,
const MatrixSymmetric< Treal, Tmatrix > &  B,
normType const  norm,
Treal const  requestedAccuracy 
) [static]

Returns interval containing the Euclidean norm of A - B ( || A - B ||_2 )

See also:
eucl_diff
frob_diff

References mat::frobNorm, template_blas_sqrt(), and mat::euclNorm.

Interval< Treal > mat::MatrixSymmetric::diffIfSmall ( const MatrixSymmetric< Treal, Tmatrix > &  A,
const MatrixSymmetric< Treal, Tmatrix > &  B,
normType const  norm,
Treal const  requestedAccuracy,
Treal const  maxAbsVal 
) [static]

Returns interval containing the Euclidean norm of A - B ( || A - B ||_2 ) based on the chosen norm.

BUT, in the case of Euclidean norm, the norm is only computed with the requested accuracy if it is smaller than 'maxAbsVal'.

See also:
euclDiffIfSmall
frob_diff

References mat::frobNorm, template_blas_sqrt(), and mat::euclNorm.

Treal mat::MatrixSymmetric::eucl_diff ( const MatrixSymmetric< Treal, Tmatrix > &  A,
const MatrixSymmetric< Treal, Tmatrix > &  B,
Treal const  requestedAccuracy 
) [static]
Treal mat::MatrixSymmetric::eucl_element_level_thresh ( Treal const  threshold)
Treal mat::MatrixSymmetric::eucl_thresh ( Treal const  threshold,
MatrixTriangular< Treal, Tmatrix > const *const  Zptr = NULL 
)
Interval< Treal > mat::MatrixSymmetric::euclDiffIfSmall ( const MatrixSymmetric< Treal, Tmatrix > &  A,
const MatrixSymmetric< Treal, Tmatrix > &  B,
Treal const  requestedAccuracy,
Treal const  maxAbsVal,
VectorType *const  eVecPtr = 0 
) [static]

Returns interval containing the Euclidean norm of A - B ( || A - B ||_2 ).

BUT, the norm is only computed with the requested accuracy if it is smaller than 'maxAbsVal'. Otherwise, the Frobenius norm is used to get the bounds.

References mat::euclIfSmall(), mat::Interval::length(), and mat::Interval::midPoint().

Treal mat::MatrixSymmetric::frob ( ) const [inline]
static Treal mat::MatrixSymmetric::frob_diff ( const MatrixSymmetric< Treal, Tmatrix > &  A,
const MatrixSymmetric< Treal, Tmatrix > &  B 
) [inline, static]
Treal mat::MatrixSymmetric::frob_thresh ( Treal const  threshold) [inline]

Does thresholding so that the error in the Frobenius norm is below the given threshold.

Returns an upper bound of the introduced error. If no elements on the block diagonal are removed the return value is equal to the introduced error.

Referenced by SCF_unrestricted::get_2e_part_and_energy(), and SCF_unrestricted::use_diis_to_get_new_fock_matrix().

void mat::MatrixSymmetric::fullMatrix ( std::vector< Treal > &  fullMat) const [inline]
void mat::MatrixSymmetric::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::MatrixSymmetric::gersgorin ( Treal &  lmin,
Treal &  lmax 
) const [inline]

Referenced by getAllEigsInterval(), and mainFun().

void mat::MatrixSymmetric::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.

Only upper triangle values are returned.

Warning:
All indexing start at zero.

Referenced by mainFun(), mat::MatrixSymmetric< ergo_real, Matri >::fullMatrix(), SCF_restricted::write_density_to_file(), SCF_unrestricted::write_density_to_file(), main(), and get_CSR_from_symmMatrix().

void mat::MatrixSymmetric::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::MatrixSymmetric::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 wanted elements must be given in upper triangluar storage. The output array contains values for the given indices.

Warning:
All indexing start at zero.

Referenced by SparseMatrix::SparseMatrix(), mainFun(), write_diag_elements_to_file(), small_calculation_core(), check_diagonal_elements_of_overlap_matrix(), and compute_J_by_boxes_sparse().

void mat::MatrixSymmetric::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.

static void mat::MatrixSymmetric::getPermutedAndSymmetrized ( std::vector< int > const &  rowind,
std::vector< int > const &  rowPermutation,
std::vector< int > &  newRowind,
std::vector< int > const &  colind,
std::vector< int > const &  colPermutation,
std::vector< int > &  newColind 
) [inline, static, protected]

This function permutes row and column indices according to the specified permutation and gives the indices as upper triangle in the new permutation.

Warning:
Duplicate indices are kept.

Referenced by mat::MatrixSymmetric< ergo_real, Matri >::assign_from_sparse(), mat::MatrixSymmetric< ergo_real, Matri >::add_values(), mat::MatrixSymmetric< ergo_real, Matri >::get_values(), and mat::MatrixSymmetric< ergo_real, Matri >::get_all_values().

void mat::MatrixSymmetric::getSizesAndBlocksForFrobNormMat ( SizesAndBlocks rows_new,
SizesAndBlocks cols_new 
) const
template<typename Tvector >
void mat::MatrixSymmetric::matVecProd ( Tvector &  y,
Tvector const &  x 
) const [inline]
Treal mat::MatrixSymmetric::mixed_diff ( const MatrixSymmetric< Treal, Tmatrix > &  A,
const MatrixSymmetric< Treal, Tmatrix > &  B,
Treal const  requestedAccuracy 
) [static]

Returns the 'mixed' norm of A - B ( || A - B ||_mixed )

Referenced by get_dens_from_fock_sparse(), output_diff_norm_values(), and SCF_restricted::get_2e_part_and_energy().

Treal mat::MatrixSymmetric::mixed_norm ( Treal const  requestedAccuracy,
int  maxIter = -1 
) const
Treal mat::MatrixSymmetric::mixed_norm_thresh ( Treal const  threshold)

Referenced by mainFun().

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

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

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

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

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

C += alpha * A * transpose(A) : C is symmetric.

References mat::syrk().

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

B += A : A and B are symmetric.

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

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

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

B -= A : A and B are symmetric.

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

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

MatrixSymmetric<Treal, Tmatrix>& mat::MatrixSymmetric::operator= ( const MatrixSymmetric< Treal, Tmatrix > &  symm) [inline]
MatrixSymmetric<Treal, Tmatrix>& mat::MatrixSymmetric::operator= ( const MatrixGeneral< Treal, Tmatrix > &  matr) [inline]
MatrixSymmetric<Treal, Tmatrix>& mat::MatrixSymmetric::operator= ( int const  k) [inline]
MatrixSymmetric< Treal, Tmatrix > & mat::MatrixSymmetric::operator= ( XY< Treal, MatrixSymmetric< Treal, Tmatrix > > const &  sm) [inline]

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

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

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

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

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

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

C = alpha * A * transpose(A) + beta * C : C is symmetric.

References mat::syrk().

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

C = alpha * A * transpose(A) : C is symmetric.

References mat::syrk().

MatrixSymmetric< Treal, Tmatrix > & mat::MatrixSymmetric::operator= ( const XYZ< MatrixTriangular< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix >, MatrixTriangular< Treal, Tmatrix > > &  zaz)

A = Z * A * transpose(Z) : Z is upper triangular and A is symmetric; A = transpose(Z) * A * Z : Z is upper triangular and A is symmetric.

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

C = A + B : A, B, and C are symmetric.

MatrixSymmetric< Treal, Tmatrix > & mat::MatrixSymmetric::operator= ( XmY< MatrixSymmetric< Treal, Tmatrix >, MatrixSymmetric< Treal, Tmatrix > > const &  mm) [inline]

C = A - B : A, B, and C are symmetric.

void mat::MatrixSymmetric::quickEuclBounds ( Treal &  euclLowerBound,
Treal &  euclUpperBound 
) const [inline]
void mat::MatrixSymmetric::random ( ) [inline]
void mat::MatrixSymmetric::randomZeroStructure ( Treal  probabilityBeingZero) [inline]

Referenced by mainFun().

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

Uses rule depending on the row and column indexes to set matrix elements The Trule class should have the function "Treal = set(int row,int col)" which is used to set the elements.

Referenced by mainFun().

void mat::MatrixSymmetric::simple_blockwise_frob_thresh ( Treal const  threshold) [inline]
void mat::MatrixSymmetric::ssmmUpperTriangleOnly ( const Treal  alpha,
const MatrixSymmetric< Treal, Tmatrix > &  A,
const MatrixSymmetric< Treal, Tmatrix > &  B,
const Treal  beta,
MatrixSymmetric< Treal, Tmatrix > &  C 
) [static]

C = alpha * A * B + beta * C where A and B are symmetric and only the upper triangle of C is computed, C is enforced to be symmetric!

Treal mat::MatrixSymmetric::thresh ( Treal const  threshold,
normType const  norm 
)

Does thresholding so that the error in the chosen norm is below the given threshold.

Returns the actual introduced error. In case of the Frobenius norm the return value may be an upper bound. In case of the Euclidean norm the return value is sometimes an upper bound as well but it can only happen if the whole matrix is removed.

See also:
frob_thresh(Treal)
eucl_thresh(Treal const)

References mat::frobNorm, mat::euclNorm, and mat::mixedNorm.

Referenced by get_dens_from_fock_sparse().

void mat::MatrixSymmetric::transfer ( MatrixSymmetric< Treal, Tmatrix > &  dest) [inline]

Transfer this matrix to dest, clearing previous content of dest if any.

Referenced by get_dens_from_fock_sparse(), and simple_purification().

void mat::MatrixSymmetric::write_to_buffer ( void *  buffer,
const int  n_bytes 
) const [inline]
void mat::MatrixSymmetric::writeToFileProt ( std::ofstream &  file) const [inline, protected]

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