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
8
9class Occupy
10{
11
12public:
13
14 Occupy();
15 ~Occupy();
16
17 static void decision(const std::string &name,const std::string &smearing_method,const double &smearing_sigma);
18
19 static const bool& gauss(void)
20 {
22 }
23
24 static const bool& fix(void)
25 {
26 return fixed_occupations;
27 }
28
29public:
30
31 // gaussian_broadening
33 static int gaussian_type;
34 static double gaussian_parameter;
35
36 // fixed occupations
37 static bool fixed_occupations;
38
39 static void iweights(const int nks,
40 const std::vector<double>& wk,
41 const int nband,
42 const double& nelec,
43 const ModuleBase::matrix& ekb,
44 double& ef,
46 const int& is,
47 const std::vector<int>& isk);
48
49 static void gweights(const int nks,
50 const std::vector<double>& wk,
51 const int nband,
52 const double& nelec,
53 const double& smearing_sigma,
54 const int ngauss,
55 const ModuleBase::matrix& ekb,
56 double& ef,
57 double& demet,
59 const int& is,
60 const std::vector<int>& isk);
61
62 static void tweights(const int nks,const int nspin,const int nband,
63 const double &nelec,const int ntetra,
64 const ModuleBase::matrix &tetra,double **ekb,double &ef,ModuleBase::matrix &wg);
65
66 static double wsweight(const ModuleBase::Vector3<double> &r, ModuleBase::Vector3<double> *rws,const int nrws);
67
68private:
69 static void efermig(const ModuleBase::matrix& ekb,
70 const int nbnd,
71 const int nks,
72 const double& nelec,
73 const std::vector<double>& wk,
74 const double& smearing_sigma,
75 const int ngauss,
76 double& ef,
77 const int& is,
78 const std::vector<int>& isk);
79
80 static double sumkg(const ModuleBase::matrix& ekb,
81 const int nband,
82 const int nks,
83 const std::vector<double>& wk,
84 const double& smearing_sigma,
85 const int ngauss,
86 const double& e,
87 const int& is,
88 const std::vector<int>& isk);
89
90 static double wgauss(const double& x, const int n);
91
92 static double w1gauss(const double& x, const int n);
93
94 //============================
95 // Needed in tweights
96 //============================
97 static void efermit(double** ekb,
98 const int nband,
99 const int nks,
100 const double& nelec,
101 const int nspin,
102 const int ntetra,
103 const ModuleBase::matrix& tetra,
104 double& ef);
105
106 static double sumkt(double** ekb,
107 const int nband,
108 const int nks,
109 const int nspin,
110 const int ntetra,
111 const ModuleBase::matrix& tetra,
112 const double& eup);
113
114 static void piksort(const int n, double* a);
115};
116
117#endif
3 elements vector
Definition vector3.h:22
Definition matrix.h:19
Definition occupy.h:10
static double gaussian_parameter
Definition occupy.h:34
static int gaussian_type
Definition occupy.h:33
static double w1gauss(const double &x, const int n)
Definition occupy.cpp:514
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:432
static bool use_gaussian_broadening
Definition occupy.h:32
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:205
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:391
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:24
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:268
Occupy()
Definition occupy.cpp:8
static bool fixed_occupations
Definition occupy.h:37
~Occupy()
Definition occupy.cpp:11
static const bool & gauss(void)
Definition occupy.h:19
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)