ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
charge.h
Go to the documentation of this file.
1#ifndef CHARGE_H
2#define CHARGE_H
3
12
13//a forward declaration of UnitCell
14class UnitCell;
15
16// Electron Charge Density
17class Charge
18{
19
20 public:
21
22 Charge();
23 ~Charge();
24
25 //==========================================================
26 // MEMBER VARIABLES :
27 // init_chg : "atomic" or "file"
28 // NAME : total number of electrons
29 // NAME : rho (nspin,ncxyz), the charge density in real space
30 // NAME : rho_save (nspin,ncxyz), for charge mixing
31 // NAME : rhog, charge density in G space
32 // NAME : rhog_save, chage density in G space
33 // NAME : rho_core [nrxx], the core charge in real space
34 // NAME : rhog_core [ngm], the core charge in reciprocal space
35 //==========================================================
36
37 double **rho = nullptr;
38 double **rho_save = nullptr;
39
40 std::complex<double> **rhog = nullptr;
41 std::complex<double> **rhog_save = nullptr;
42
43 double **kin_r = nullptr; // kinetic energy density in real space, for meta-GGA
44 double **kin_r_save = nullptr; // kinetic energy density in real space, for meta-GGA
45 const Parallel_Grid* pgrid = nullptr;
46
47 private:
48
49 //temporary
50 double *_space_rho = nullptr;
51 double *_space_rho_save = nullptr;
52 std::complex<double> *_space_rhog = nullptr;
53 std::complex<double> *_space_rhog_save = nullptr;
54 double *_space_kin_r = nullptr;
55 double *_space_kin_r_save = nullptr;
56
57 public:
58
59 double **nhat = nullptr; //compensation charge for PAW
60 double **nhat_save = nullptr; //compensation charge for PAW
61 // wenfei 2023-09-05
62
63 double *rho_core = nullptr;
64 std::complex<double> *rhog_core = nullptr;
65
66 int prenspin = 1;
67
68 void set_rhopw(ModulePW::PW_Basis* rhopw_in);
69
80 void init_rho(elecstate::Efermi& eferm_iout,
81 const UnitCell& ucell,
82 const Parallel_Grid& pgrid,
83 const ModuleBase::ComplexMatrix& strucFac,
85 const void* klist = nullptr,
86 const void* wfcpw = nullptr);
87
88 void allocate(const int &nspin_in);
89
90 void atomic_rho(const int spin_number_need,
91 const double& omega,
92 double** rho_in,
93 const ModuleBase::ComplexMatrix& strucFac,
94 const UnitCell& ucell) const;
95
96 void set_rho_core(const UnitCell& ucell,
97 const ModuleBase::ComplexMatrix& structure_factor,
98 const bool* numeric);
99
100 void set_rho_core_paw();
101
102 void renormalize_rho();
103
104 double sum_rho() const;
105
107
108 // for non-linear core correction
110 (
111 const bool &numeric,
112 const double omega,
113 const double tpiba2,
114 const int mesh,
115 const double *r,
116 const double *rab,
117 const double *rhoc,
118 double *rhocg
119 ) const;
120
121 double cal_rho2ne(const double *rho_in) const;
122
123 void check_rho(); // to check whether the charge density is normal
124
125 void init_final_scf(); //LiuXh add 20180619
126
127 public:
131 void init_chgmpi();
132
137 void rho_mpi();
138
146 void reduce_diff_pools(double* array_rho) const;
147
148 void set_omega(double* omega_in){this->omega_ = omega_in;};
149
150 // mohan add 2021-02-20
151 int nrxx=0; // number of r vectors in this processor
152 int nxyz = 0; // total number of r vectors
153 int ngmc=0; // number of g vectors in this processor
154 int nspin=0; // number of spins
155 ModulePW::PW_Basis* rhopw = nullptr;// When double_grid is used, rhopw = rhodpw (dense grid)
156 bool cal_elf = false; // whether to calculate electron localization function (ELF)
157
158 private:
159
160 void destroy(); // free arrays liuyu 2023-03-12
161
162 double* omega_ = nullptr; // omega for non-linear core correction
163
165
166 bool allocate_rho_final_scf; // LiuXh add 20180606
167
168#ifdef __MPI
169 int *rec = nullptr; //The number of elements each process should receive into the receive buffer.
170 int *dis = nullptr; //The displacement (relative to recvbuf) for each process in the receive buffer.
171#endif
172
173};
174
175#endif // charge
Definition charge.h:18
double ** rho
Definition charge.h:37
int * dis
Definition charge.h:170
double * _space_kin_r
Definition charge.h:54
void save_rho_before_sum_band()
Definition charge.cpp:622
~Charge()
Definition charge.cpp:42
double ** nhat_save
Definition charge.h:60
int * rec
Definition charge.h:169
double * _space_kin_r_save
Definition charge.h:55
bool allocate_rho_final_scf
Definition charge.h:166
double sum_rho() const
Definition charge.cpp:164
void set_rho_core(const UnitCell &ucell, const ModuleBase::ComplexMatrix &structure_factor, const bool *numeric)
Definition charge_init.cpp:274
std::complex< double > ** rhog_save
Definition charge.h:41
bool cal_elf
Definition charge.h:156
std::complex< double > ** rhog
Definition charge.h:40
void reduce_diff_pools(double *array_rho) const
Reduce among different pools If NPROC_IN_POOLs are all the same, use GlobalV::KP_WORLD else,...
Definition charge_mpi.cpp:27
void init_final_scf()
Definition charge.cpp:686
void check_rho()
Definition charge.cpp:650
std::complex< double > * rhog_core
Definition charge.h:64
void set_rhopw(ModulePW::PW_Basis *rhopw_in)
Definition charge.cpp:51
Charge()
Definition charge.cpp:36
void atomic_rho(const int spin_number_need, const double &omega, double **rho_in, const ModuleBase::ComplexMatrix &strucFac, const UnitCell &ucell) const
Definition charge.cpp:225
double ** kin_r
Definition charge.h:43
double * _space_rho
Definition charge.h:50
void set_omega(double *omega_in)
Definition charge.h:148
void renormalize_rho()
Definition charge.cpp:197
void init_chgmpi()
init some arrays for mpi_inter_pools, rho_mpi
Definition charge_mpi.cpp:9
std::complex< double > * _space_rhog_save
Definition charge.h:53
void rho_mpi()
Sum rho at different pools (k-point parallelism). Only used when GlobalV::KPAR > 1.
Definition charge_mpi.cpp:119
void allocate(const int &nspin_in)
Definition charge.cpp:80
const Parallel_Grid * pgrid
Definition charge.h:45
int ngmc
Definition charge.h:153
double ** kin_r_save
Definition charge.h:44
double ** rho_save
Definition charge.h:38
double cal_rho2ne(const double *rho_in) const
Definition charge.cpp:635
int nrxx
Definition charge.h:151
void non_linear_core_correction(const bool &numeric, const double omega, const double tpiba2, const int mesh, const double *r, const double *rab, const double *rhoc, double *rhocg) const
Definition charge_init.cpp:382
void init_rho(elecstate::Efermi &eferm_iout, const UnitCell &ucell, const Parallel_Grid &pgrid, const ModuleBase::ComplexMatrix &strucFac, ModuleSymmetry::Symmetry &symm, const void *klist=nullptr, const void *wfcpw=nullptr)
Init charge density from file or atomic pseudo-wave-functions.
Definition charge_init.cpp:21
double ** nhat
Definition charge.h:59
double * _space_rho_save
Definition charge.h:51
int prenspin
Definition charge.h:66
std::complex< double > * _space_rhog
Definition charge.h:52
double * rho_core
Definition charge.h:63
ModulePW::PW_Basis * rhopw
Definition charge.h:155
void destroy()
Definition charge.cpp:56
double * omega_
Definition charge.h:162
void set_rho_core_paw()
Definition charge_init.cpp:375
int nxyz
Definition charge.h:152
bool allocate_rho
Definition charge.h:164
int nspin
Definition charge.h:154
Definition complexmatrix.h:14
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
Definition symmetry.h:16
Definition parallel_grid.h:8
Definition unitcell.h:17
This file contains all energies about first-principle calculations.
Definition fp_energy.h:63