ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
complexmatrix.h
Go to the documentation of this file.
1#ifndef COMPLEXMATRIX_H
2#define COMPLEXMATRIX_H
3
4#include <complex>
5
6#include "matrix.h"
7
8#ifdef _MCD_CHECK
9#include "mcd.h"
10#endif
11namespace ModuleBase
12{
14{
15
16public:
17
18 int nr=0;
19 int nc=0;
20 int size=0;
21 std::complex<double> *c=nullptr;
22
23 ComplexMatrix(): nr(0), nc(0), size(0), c(nullptr){}
24 ComplexMatrix(const int nrows,const int ncols,const bool flag_zero=true); // Peize Lin add flag_zero 2019-05-13
26 ComplexMatrix(ComplexMatrix && m1); // Peize Lin add 2016-08-05
27 explicit ComplexMatrix(const matrix &m); // Peize Lin add 2017-03-29
29
30 void create(const int nrow,const int ncol,const bool flag_zero=true); // Peize Lin add flag_zero 2019-05-13
32 ComplexMatrix& operator=(ComplexMatrix && m); // Peize Lin add 2016-08-05
33
34 //============
35 // Operators
36 //============
37 std::complex<double> &operator()(const int ir,const int ic)
38 {
39 assert(ir>=0); assert(ir<nr); assert(ic>=0); assert(ic<nc);
40 return c[ir*nc+ic];//mohan modify in-line 2007-10-1
41 }
42 const std::complex<double> &operator()(const int ir,const int ic)const
43 {
44 assert(ir>=0); assert(ir<nr); assert(ic>=0); assert(ic<nc);
45 return c[ir*nc+ic];//mohan modify in-line 2007-10-13
46 }
47
48 ComplexMatrix& operator*=(const std::complex<double> &s);
51 //return a matrix whose element is the real part of element of the ComplexMatrix.
52 matrix real() const; // Peize Lin add 2017-03-29
53
54 //==================
55 // member function:
56 //==================
57 //set all elements to be std::complex<double> {0.0,0.0}
58 void zero_out(void);
59 //set to be a unit matrix,
60 void set_as_identity_matrix(void);
61
62 std::ostream & print( std::ostream & os, const double threshold_abs=0.0, const double threshold_imag=0.0 ) const; // Peize Lin add 2021.09.08
63
64 // check if all the elements are real
65 bool checkreal(void);
66
67 using type=std::complex<double>; // Peiae Lin add 2022.08.08 for template
68};
69
73ComplexMatrix operator*(const std::complex<double> &s, const ComplexMatrix &m);
74ComplexMatrix operator*(const ComplexMatrix &m, const std::complex<double> &s);
75ComplexMatrix operator*(const double &s, const ComplexMatrix &m);
76ComplexMatrix operator*(const ComplexMatrix &m, const double &s);
77
78//calculate the trace
79std::complex<double> trace(const ComplexMatrix &m);
80
81//calculate the sum of the square of the modulus of the elements in ir row.
82double abs2_row(const ComplexMatrix &m,const int ir); // mohan add 2008-7-1
83
84//calculate the sum of the square of the modulus of the elements in ic-th column.
85double abs2_column(const ComplexMatrix &m,const int ic); // mohan add 2008-7-1
86
87// calculate the sum of the square of the modulus of all elements.
88double abs2(const ComplexMatrix &m);
89
90// calculate the sum of the square of the modulus of all elements of an array of ComplexMatrix.
91double abs2(const int nmat, ComplexMatrix **m);
92
93ComplexMatrix transpose(const ComplexMatrix &m, const bool &conjugate);
94ComplexMatrix conj(const ComplexMatrix &m); // Peize Lin add 2019-05-13
95
96//do mout += s*min
98 const std::complex<double> &s,
99 const ComplexMatrix &min,
100 ComplexMatrix &mout);
101
102//do (*mout[i]) += s * (*min[i]); int i<nmat
104 const int &nmat,
105 const std::complex<double> &s,
107 ComplexMatrix **mout);
108
109// Do mout = s1*m1 + s2*m2
110void scaled_sum(
111 const std::complex<double> &s1,
112 const ComplexMatrix &m1,
113 const std::complex<double> &s2,
114 const ComplexMatrix &m2,
115 ComplexMatrix &mout);
116
117// Do (*mout[i]) = s1 * (*m1[i]) + s2 * (*m2[i])
118void scaled_sum(
119 const int &nmat,
120 const std::complex<double> &s1,
121 ComplexMatrix **m1,
122 const std::complex<double> &s2,
123 ComplexMatrix **m2,
124 ComplexMatrix **mout);
125}
126#endif
#define min(x, y)
Definition branred.cpp:18
Definition complexmatrix.h:14
std::complex< double > type
Definition complexmatrix.h:67
ComplexMatrix & operator=(const ComplexMatrix &m)
Definition complexmatrix.cpp:226
void set_as_identity_matrix(void)
Definition complexmatrix.cpp:129
void zero_out(void)
Definition complexmatrix.cpp:30
const std::complex< double > & operator()(const int ir, const int ic) const
Definition complexmatrix.h:42
~ComplexMatrix()
Definition complexmatrix.cpp:86
bool checkreal(void)
Definition complexmatrix.cpp:441
int nr
Definition complexmatrix.h:18
void create(const int nrow, const int ncol, const bool flag_zero=true)
Definition complexmatrix.cpp:96
matrix real() const
Definition complexmatrix.cpp:265
std::complex< double > & operator()(const int ir, const int ic)
Definition complexmatrix.h:37
std::complex< double > * c
Definition complexmatrix.h:21
ComplexMatrix & operator-=(const ComplexMatrix &m)
Definition complexmatrix.cpp:258
ComplexMatrix & operator+=(const ComplexMatrix &m)
Definition complexmatrix.cpp:251
std::ostream & print(std::ostream &os, const double threshold_abs=0.0, const double threshold_imag=0.0) const
Definition complexmatrix.cpp:417
int nc
Definition complexmatrix.h:19
ComplexMatrix & operator*=(const std::complex< double > &s)
Definition complexmatrix.cpp:244
int size
Definition complexmatrix.h:20
ComplexMatrix()
Definition complexmatrix.h:23
Definition matrix.h:19
Definition array_pool.h:6
ComplexMatrix operator-(const ComplexMatrix &m1, const ComplexMatrix &m2)
Definition complexmatrix.cpp:154
ComplexArray operator*(const double r, const ComplexArray &cd)
Scale a ComplexArray cd by real r.
Definition complexarray.cpp:120
double abs2(const ComplexArray &cd)
Sum of absolute squares of all elements in cd.
Definition complexarray.cpp:206
std::complex< double > trace(const ComplexMatrix &m)
Definition complexmatrix.cpp:273
double abs2_column(const ComplexMatrix &m, const int ic)
Definition complexmatrix.cpp:357
double abs2_row(const ComplexMatrix &m, const int ir)
Definition complexmatrix.cpp:345
void scaled_sum(double r1, const ComplexArray &cd1, double r2, const ComplexArray &cd2, ComplexArray &cd3)
Does cd3 = r1*cd1 + r2*cd2.
Definition complexarray.cpp:241
ComplexMatrix transpose(const ComplexMatrix &m, const bool &conjugate)
Definition complexmatrix.cpp:394
void scale_accumulate(double r, const ComplexArray &cd1, ComplexArray &cd2)
Does cd2 += r * cd1.
Definition complexarray.cpp:229
ComplexMatrix operator+(const ComplexMatrix &m1, const ComplexMatrix &m2)
Definition complexmatrix.cpp:143
ComplexMatrix conj(const ComplexMatrix &m)
Definition complexmatrix.cpp:408