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#endif
10namespace ModuleBase
11{
13{
14
15public:
16
17 int nr=0;
18 int nc=0;
19 int size=0;
20 std::complex<double> *c=nullptr;
21
22 ComplexMatrix(): nr(0), nc(0), size(0), c(nullptr){}
23 ComplexMatrix(const int nrows,const int ncols,const bool flag_zero=true); // Peize Lin add flag_zero 2019-05-13
25 ComplexMatrix(ComplexMatrix && m1); // Peize Lin add 2016-08-05
26 explicit ComplexMatrix(const matrix &m); // Peize Lin add 2017-03-29
28
29 void create(const int nrow,const int ncol,const bool flag_zero=true); // Peize Lin add flag_zero 2019-05-13
31 ComplexMatrix& operator=(ComplexMatrix && m); // Peize Lin add 2016-08-05
32
33 //============
34 // Operators
35 //============
36 std::complex<double> &operator()(const int ir,const int ic)
37 {
38 assert(ir>=0); assert(ir<nr); assert(ic>=0); assert(ic<nc);
39 return c[ir*nc+ic];//mohan modify in-line 2007-10-1
40 }
41 const std::complex<double> &operator()(const int ir,const int ic)const
42 {
43 assert(ir>=0); assert(ir<nr); assert(ic>=0); assert(ic<nc);
44 return c[ir*nc+ic];//mohan modify in-line 2007-10-13
45 }
46
47 ComplexMatrix& operator*=(const std::complex<double> &s);
50 //return a matrix whose element is the real part of element of the ComplexMatrix.
51 matrix real() const; // Peize Lin add 2017-03-29
52
53 //==================
54 // member function:
55 //==================
56 //set all elements to be std::complex<double> {0.0,0.0}
57 void zero_out(void);
58 //set to be a unit matrix,
59 void set_as_identity_matrix(void);
60
61 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
62
63 // check if all the elements are real
64 bool checkreal(void) const;
65
66 using type=std::complex<double>; // Peiae Lin add 2022.08.08 for template
67};
68
72ComplexMatrix operator*(const std::complex<double> &s, const ComplexMatrix &m);
73ComplexMatrix operator*(const ComplexMatrix &m, const std::complex<double> &s);
74ComplexMatrix operator*(const double &s, const ComplexMatrix &m);
75ComplexMatrix operator*(const ComplexMatrix &m, const double &s);
76
77//calculate the trace
78std::complex<double> trace(const ComplexMatrix &m);
79
80//calculate the sum of the square of the modulus of the elements in ir row.
81double abs2_row(const ComplexMatrix &m,const int ir); // mohan add 2008-7-1
82
83//calculate the sum of the square of the modulus of the elements in ic-th column.
84double abs2_column(const ComplexMatrix &m,const int ic); // mohan add 2008-7-1
85
86// calculate the sum of the square of the modulus of all elements.
87double abs2(const ComplexMatrix &m);
88
89// calculate the sum of the square of the modulus of all elements of an array of ComplexMatrix.
90double abs2(const int nmat, ComplexMatrix **m);
91
92ComplexMatrix transpose(const ComplexMatrix &m, const bool &conjugate);
93ComplexMatrix conj(const ComplexMatrix &m); // Peize Lin add 2019-05-13
94
95//do mout += s*min
97 const std::complex<double> &s,
98 const ComplexMatrix &min,
99 ComplexMatrix &mout);
100
101//do (*mout[i]) += s * (*min[i]); int i<nmat
103 const int &nmat,
104 const std::complex<double> &s,
106 ComplexMatrix **mout);
107
108// Do mout = s1*m1 + s2*m2
109void scaled_sum(
110 const std::complex<double> &s1,
111 const ComplexMatrix &m1,
112 const std::complex<double> &s2,
113 const ComplexMatrix &m2,
114 ComplexMatrix &mout);
115
116// Do (*mout[i]) = s1 * (*m1[i]) + s2 * (*m2[i])
117void scaled_sum(
118 const int &nmat,
119 const std::complex<double> &s1,
120 ComplexMatrix **m1,
121 const std::complex<double> &s2,
122 ComplexMatrix **m2,
123 ComplexMatrix **mout);
124}
125#endif
#define min(x, y)
Definition branred.cpp:18
Definition complexmatrix.h:13
std::complex< double > type
Definition complexmatrix.h:66
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:41
~ComplexMatrix()
Definition complexmatrix.cpp:86
int nr
Definition complexmatrix.h:17
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:36
std::complex< double > * c
Definition complexmatrix.h:20
bool checkreal(void) const
Definition complexmatrix.cpp:441
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:18
ComplexMatrix & operator*=(const std::complex< double > &s)
Definition complexmatrix.cpp:244
int size
Definition complexmatrix.h:19
ComplexMatrix()
Definition complexmatrix.h:22
Definition matrix.h:18
Definition clebsch_gordan_coeff.cpp:8
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:173
double abs2(const ComplexArray &cd)
Sum of absolute squares of all elements in cd.
Definition complexarray.cpp:336
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:385
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:367
ComplexMatrix operator+(const ComplexMatrix &m1, const ComplexMatrix &m2)
Definition complexmatrix.cpp:143
ComplexMatrix conj(const ComplexMatrix &m)
Definition complexmatrix.cpp:408