ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
matrix.h
Go to the documentation of this file.
1#ifndef MATRIX_H
2#define MATRIX_H
3
4// Peize Lin update 2018-07-29
5
6#ifdef _MCD_CHECK
7#include "mcd.h"
8#endif
9
10#include <ostream>
11#include<cassert>
12
13#include<fstream>// test
14
15namespace ModuleBase
16{
17
18class matrix
19{
20 /* data */
21public:
22
23 int nr=0;
24 int nc=0; /* Number of rows and columns */
25 double *c=nullptr; /* Holds the data */
26
27 /* Constructors and destructor */
28 matrix(): nr(0), nc(0), c(nullptr){}
29 matrix( const int nrows, const int ncols, const bool flag_zero=true ); // Peize Lin add flag_zero 2018-07-02
30 matrix( const matrix &m1 ); /* copy constructor */
31 matrix( matrix && m1 ); // Peize Lin add 2016-08-05
32 ~matrix();
33
34 void create( const int nrow, const int ncol, const bool flag_zero=true ); // Peize Lin add flag_zero 2018-07-02
35 matrix& operator=(const matrix &m1); // Peize Lin change 2018-03-12
36 matrix& operator=( matrix && m1 ); // Peize Lin add 2016-08-05
37
38 double &operator()(const int ir,const int ic)
39 {
40 assert(ir>=0); assert(ir<nr); assert(ic>=0); assert(ic<nc);
41 return c[ir*nc+ic];
42 }
43
44 const double &operator()(const int ir,const int ic) const
45 {
46 assert(ir>=0); assert(ir<nr); assert(ic>=0); assert(ic<nc);
47 return c[ir*nc+ic];
48 }
49
50// inline double &operator()(int i,int j) const
51// { return c[nc*i+j]; }
52
53 void operator*=(const double &s);
54 void operator+=(const matrix &m);
55 void operator-=(const matrix &m);
56
57 /* member function: */
59
60 double det(void);
61
62 // mohan add 2011-01-13
63 double trace_on(void) const;
64
65 /* zero out all the entries */
66 void zero_out(void);
67
68 /* fill all entries with number */
69 void fill_out(const double x);
70
71 void get_extreme_eigen_values(double &ev_lower, double &ev_upper) const; // mohan add 2011-01-13
72
73 void reshape( const int nr_new, const int nc_new, const bool flag_zero = true ); // Peize Lin add 2017-05-27
74
75 double max() const; // Peize Lin add 2016-09-08
76 double min() const; // Peize Lin add 2016-09-08
77 double absmax() const; // Peize Lin add 2018-07-02
78
79 double norm() const; // Peize Lin add 2018-08-12
80
81 std::ostream & print( std::ostream & os, const double threshold=0.0 ) const; // Peize Lin add 2021.09.08
82
83 using type=double; // Peiae Lin add 2022.08.08 for template
84};
85
86
87matrix operator+(const matrix &m1, const matrix &m2);
88matrix operator-(const matrix &m1, const matrix &m2);
89matrix operator*(const matrix &m1, const matrix &m2);
90matrix operator*(const double &s, const matrix &m);
91matrix operator*(const matrix &m, const double &s);
92
93matrix transpose(const matrix &m);
94double trace_on(const matrix &A, const matrix &B); // mohan add 2011-01-13
95double mdot(const matrix &A, const matrix &B); // mohan add 2011-01-13
96
97//std::ostream & operator<<( std::ostream & os, const matrix & m ); // Peize Lin add 2016-09-08
98
99}
100
101#endif // MATRIX_H
Definition matrix.h:19
~matrix()
Definition matrix.cpp:109
void zero_out(void)
Definition matrix.cpp:281
matrix()
Definition matrix.h:28
void reshape(const int nr_new, const int nc_new, const bool flag_zero=true)
Definition matrix.cpp:356
int nr
Definition matrix.h:23
double * c
Definition matrix.h:25
double trace_on(void) const
Definition matrix.cpp:313
std::ostream & print(std::ostream &os, const double threshold=0.0) const
Definition matrix.cpp:410
int nc
Definition matrix.h:24
matrix & operator=(const matrix &m1)
Definition matrix-inl.h:45
void operator-=(const matrix &m)
Definition matrix.cpp:266
double absmax() const
Definition matrix.cpp:449
void operator+=(const matrix &m)
Definition matrix.cpp:250
double norm() const
Definition matrix.cpp:460
matrix Inverse(void)
double max() const
Definition matrix.cpp:427
double & operator()(const int ir, const int ic)
Definition matrix.h:38
void get_extreme_eigen_values(double &ev_lower, double &ev_upper) const
double det(void)
double min() const
Definition matrix.cpp:437
void fill_out(const double x)
Definition matrix.cpp:293
double type
Definition matrix.h:83
const double & operator()(const int ir, const int ic) const
Definition matrix.h:44
void create(const int nrow, const int ncol, const bool flag_zero=true)
Definition matrix.cpp:122
void operator*=(const double &s)
Definition matrix.cpp:242
Definition array_pool.h:6
double trace_on(const matrix &A, const matrix &B)
Definition matrix.cpp:365
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
ComplexMatrix transpose(const ComplexMatrix &m, const bool &conjugate)
Definition complexmatrix.cpp:394
ComplexMatrix operator+(const ComplexMatrix &m1, const ComplexMatrix &m2)
Definition complexmatrix.cpp:143
double mdot(const matrix &A, const matrix &B)
Definition matrix.cpp:377
#define threshold
Definition sph_bessel_recursive_test.cpp:4