3
#include "sblock_matrix.h"
5
namespace psi{ namespace mcscf{
7
SBlockMatrix::SBlockMatrix()
12
SBlockMatrix::SBlockMatrix(std::string label, int nirreps, size_t*& rows_size, size_t*& cols_size)
15
block_matrix_ = new BlockMatrix(label,nirreps,rows_size,cols_size);
16
block_matrix_->add_reference();
19
SBlockMatrix::SBlockMatrix(std::string label, int nirreps, int*& rows_size, int*& cols_size)
22
block_matrix_ = new BlockMatrix(label,nirreps,rows_size,cols_size);
23
block_matrix_->add_reference();
26
SBlockMatrix::SBlockMatrix(BlockMatrix* block_matrix)
27
: block_matrix_(block_matrix)
29
block_matrix_->add_reference();
32
SBlockMatrix::SBlockMatrix(SBlockMatrix& src)
34
block_matrix_ = src.block_matrix_;
35
block_matrix_->add_reference();
38
void SBlockMatrix::allocate(std::string label, int nirreps, size_t*& rows_size, size_t*& cols_size)
40
block_matrix_ = new BlockMatrix(label,nirreps,rows_size,cols_size);
41
block_matrix_->add_reference();
44
void SBlockMatrix::allocate(std::string label, int nirreps, int*& rows_size, int*& cols_size)
46
block_matrix_ = new BlockMatrix(label,nirreps,rows_size,cols_size);
47
block_matrix_->add_reference();
50
SBlockMatrix& SBlockMatrix::operator+= (SBlockMatrix& src)
52
check("operator+="); src.check("operator+=");
53
*(block_matrix_) += *(src.block_matrix_);
57
SBlockMatrix& SBlockMatrix::operator= (SBlockMatrix& src)
59
check("operator="); src.check("operator=");
60
*(block_matrix_) = *(src.block_matrix_);
61
// Make sure we don't copy ourself!
62
/* if (block_matrix_ == src.block_matrix_) return *this;
64
block_matrix_->subtract_reference(); // Remove reference from existing object
65
block_matrix_ = src.block_matrix_;
66
block_matrix_->add_reference(); // Add reference to our new object
71
// void SBlockMatrix::copy(SBlockMatrix& src)
73
// block_matrix_->subtract_reference();
74
// block_matrix_ = new BlockMatrix();
75
// *block_matrix_ = *src.block_matrix_;
76
// block_matrix_->add_reference(); // Add reference to our new object
79
void SBlockMatrix::multiply(bool transpose_A, bool transpose_B, SBlockMatrix& A, SBlockMatrix& B)
81
check("multiply"); A.check("multiply"); B.check("multiply");
82
block_matrix_->multiply(transpose_A,transpose_B,A.getBlockMatrix(),B.getBlockMatrix());
85
void SBlockMatrix::diagonalize(SBlockMatrix& eigenmatrix,SBlockVector& eigenvalues)
87
check("diagonalize"); eigenmatrix.check("diagonalize"); eigenvalues.check("multiply");
88
block_matrix_->diagonalize(eigenmatrix.getBlockMatrix(),eigenvalues.getBlockVector());
91
double dot(SBlockMatrix& A,SBlockMatrix& B)
93
A.check("dot"); B.check("dot");
94
return( dot(A.getBlockMatrix(),B.getBlockMatrix()) );
97
void SBlockMatrix::check(const char* cstr)
100
fprintf(outfile,"\n\n Error: SBlockMatrix operation '%s' is using an uninitialized matrix",cstr);
102
exit(PSI_RETURN_FAILURE);
b'\\ No newline at end of file'