ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
occupy.h
Go to the documentation of this file.
1#ifndef OCCUPY_H
2#define OCCUPY_H
3
7
8class Occupy
9{
10
11public:
12
13 Occupy();
14 ~Occupy();
15
16 static void decision(const std::string &name,const std::string &smearing_method,const double &smearing_sigma);
17
18 static const bool& gauss(void)
19 {
21 }
22
23 static const bool& fix(void)
24 {
25 return fixed_occupations;
26 }
27
28public:
29
30 // gaussian_broadening
32 static int gaussian_type;
33 static double gaussian_parameter;
34
35 // fixed occupations
36 static bool fixed_occupations;
37
38 static void iweights(const int nks,
39 const std::vector<double>& wk,
40 const int nband,
41 const double& nelec,
42 const ModuleBase::matrix& ekb,
43 double& ef,
45 const int& is,
46 const std::vector<int>& isk);
47
48 static void gweights(const int nks,
49 const std::vector<double>& wk,
50 const int nband,
51 const double& nelec,
52 const double& smearing_sigma,
53 const int ngauss,
54 const ModuleBase::matrix& ekb,
55 double& ef,
56 double& demet,
58 const int& is,
59 const std::vector<int>& isk);
60
61 static void tweights(const int nks,const int nspin,const int nband,
62 const double &nelec,const int ntetra,
63 const ModuleBase::matrix &tetra,double **ekb,double &ef,ModuleBase::matrix &wg);
64
65 static double wsweight(const ModuleBase::Vector3<double> &r, ModuleBase::Vector3<double> *rws,const int nrws);
66
67private:
68 static void efermig(const ModuleBase::matrix& ekb,
69 const int nbnd,
70 const int nks,
71 const double& nelec,
72 const std::vector<double>& wk,
73 const double& smearing_sigma,
74 const int ngauss,
75 double& ef,
76 const int& is,
77 const std::vector<int>& isk);
78
79 static double sumkg(const ModuleBase::matrix& ekb,
80 const int nband,
81 const int nks,
82 const std::vector<double>& wk,
83 const double& smearing_sigma,
84 const int ngauss,
85 const double& e,
86 const int& is,
87 const std::vector<int>& isk);
88
89 static double wgauss(const double& x, const int n);
90
91 static double w1gauss(const double& x, const int n);
92
93 //============================
94 // Needed in tweights
95 //============================
96 static void efermit(double** ekb,
97 const int nband,
98 const int nks,
99 const double& nelec,
100 const int nspin,
101 const int ntetra,
102 const ModuleBase::matrix& tetra,
103 double& ef);
104
105 static double sumkt(double** ekb,
106 const int nband,
107 const int nks,
108 const int nspin,
109 const int ntetra,
110 const ModuleBase::matrix& tetra,
111 const double& eup);
112
113 static void piksort(const int n, double* a);
114};
115
116#endif
3 elements vector
Definition vector3.h:24
Definition matrix.h:18
Definition occupy.h:9
static double gaussian_parameter
Definition occupy.h:33
static int gaussian_type
Definition occupy.h:32
static double w1gauss(const double &x, const int n)
Definition occupy.cpp:515
static void iweights(const int nks, const std::vector< double > &wk, const int nband, const double &nelec, const ModuleBase::matrix &ekb, double &ef, ModuleBase::matrix &wg, const int &is, const std::vector< int > &isk)
calculates weights and fermi energy for semiconductors and insulators
Definition occupy.cpp:131
static double wgauss(const double &x, const int n)
Definition occupy.cpp:433
static bool use_gaussian_broadening
Definition occupy.h:31
static void gweights(const int nks, const std::vector< double > &wk, const int nband, const double &nelec, const double &smearing_sigma, const int ngauss, const ModuleBase::matrix &ekb, double &ef, double &demet, ModuleBase::matrix &wg, const int &is, const std::vector< int > &isk)
calculates weights with the gaussian spreading technique
Definition occupy.cpp:204
static double sumkg(const ModuleBase::matrix &ekb, const int nband, const int nks, const std::vector< double > &wk, const double &smearing_sigma, const int ngauss, const double &e, const int &is, const std::vector< int > &isk)
This function computes the number of states under a given energy e.
Definition occupy.cpp:392
static double sumkt(double **ekb, const int nband, const int nks, const int nspin, const int ntetra, const ModuleBase::matrix &tetra, const double &eup)
static void piksort(const int n, double *a)
static const bool & fix(void)
Definition occupy.h:23
static void efermit(double **ekb, const int nband, const int nks, const double &nelec, const int nspin, const int ntetra, const ModuleBase::matrix &tetra, double &ef)
static void efermig(const ModuleBase::matrix &ekb, const int nbnd, const int nks, const double &nelec, const std::vector< double > &wk, const double &smearing_sigma, const int ngauss, double &ef, const int &is, const std::vector< int > &isk)
Finds the Fermi energy.
Definition occupy.cpp:267
Occupy()
Definition occupy.cpp:8
static bool fixed_occupations
Definition occupy.h:36
~Occupy()
Definition occupy.cpp:11
static const bool & gauss(void)
Definition occupy.h:18
static void decision(const std::string &name, const std::string &smearing_method, const double &smearing_sigma)
Definition occupy.cpp:28
static void tweights(const int nks, const int nspin, const int nband, const double &nelec, const int ntetra, const ModuleBase::matrix &tetra, double **ekb, double &ef, ModuleBase::matrix &wg)
static double wsweight(const ModuleBase::Vector3< double > &r, ModuleBase::Vector3< double > *rws, const int nrws)