ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
elecstate_lcao.h
Go to the documentation of this file.
1#ifndef ELECSTATE_LCAO_H
2#define ELECSTATE_LCAO_H
3
4#include "elecstate.h"
8
9#include <vector>
10
11namespace elecstate
12{
13template <typename TK>
15{
16 public:
18 {
19 } // will be called by ElecStateLCAO_TDDFT
21 const K_Vectors* klist_in,
22 int nks_in,
23 Gint_Gamma* gint_gamma_in, // mohan add 2024-04-01
24 Gint_k* gint_k_in, // mohan add 2024-04-01
25 ModulePW::PW_Basis* rhopw_in,
26 ModulePW::PW_Basis_Big* bigpw_in)
27 {
28 init_ks(chg_in, klist_in, nks_in, rhopw_in, bigpw_in);
29 this->gint_gamma = gint_gamma_in; // mohan add 2024-04-01
30 this->gint_k = gint_k_in; // mohan add 2024-04-01
31 this->classname = "ElecStateLCAO";
32 }
33
35 {
36 if (this->DM != nullptr)
37 {
38 delete this->DM;
39 }
40 }
41
42 // void init(Charge* chg_in):charge(chg_in){} override;
43
44 // interface for HSolver to calculate rho from Psi
45 virtual void psiToRho(const psi::Psi<TK>& psi) override;
46 // virtual void psiToRho(const psi::Psi<double>& psi) override;
47 // return current electronic density rho, as a input for constructing Hamiltonian
48 // const double* getRho(int spin) const override;
49 virtual void cal_tau(const psi::Psi<TK>& psi) override;
50
51 // update charge density for next scf step
52 // void getNewRho() override;
53
54 // initial density matrix
55 void init_DM(const K_Vectors* kv, const Parallel_Orbitals* paraV, const int nspin);
57 {
58 return const_cast<DensityMatrix<TK, double>*>(this->DM);
59 }
60 static int out_wfc_lcao;
61 static bool need_psi_grid;
62
63 double get_spin_constrain_energy() override;
64
65#ifdef __PEXSI
66 // use for pexsi
67
74 void dmToRho(std::vector<TK*> pexsi_DM, std::vector<TK*> pexsi_EDM);
75#endif
76
78
79 protected:
80 // calculate electronic charge density on grid points or density matrix in real space
81 // the consequence charge density rho saved into rho_out, preparing for charge mixing.
82 // void updateRhoK(const psi::Psi<std::complex<double>>& psi) ;//override;
83 // sum over all pools for rho and ebands
84 // void parallelK();
85 // calcualte rho for each k
86 // void rhoBandK(const psi::Psi<std::complex<double>>& psi);
87
88 Gint_Gamma* gint_gamma = nullptr; // mohan add 2024-04-01
89 Gint_k* gint_k = nullptr; // mohan add 2024-04-01
90};
91
92template <typename TK>
94
95template <typename TK>
97
98} // namespace elecstate
99
100#endif
Definition charge.h:20
Definition gint_gamma.h:23
Definition gint_k.h:13
Definition klist.h:13
Definition pw_basis_big.h:16
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
Definition parallel_orbitals.h:9
Definition density_matrix.h:36
Definition elecstate_lcao.h:15
virtual ~ElecStateLCAO()
Definition elecstate_lcao.h:34
static int out_wfc_lcao
Definition elecstate_lcao.h:60
ElecStateLCAO()
Definition elecstate_lcao.h:17
Gint_Gamma * gint_gamma
Definition elecstate_lcao.h:88
virtual void cal_tau(const psi::Psi< TK > &psi) override
static bool need_psi_grid
Definition elecstate_lcao.h:61
void init_DM(const K_Vectors *kv, const Parallel_Orbitals *paraV, const int nspin)
Definition elecstate_lcao.cpp:94
virtual void psiToRho(const psi::Psi< TK > &psi) override
double get_spin_constrain_energy() override
DensityMatrix< TK, double > * DM
Definition elecstate_lcao.h:77
Gint_k * gint_k
Definition elecstate_lcao.h:89
ElecStateLCAO(Charge *chg_in, const K_Vectors *klist_in, int nks_in, Gint_Gamma *gint_gamma_in, Gint_k *gint_k_in, ModulePW::PW_Basis *rhopw_in, ModulePW::PW_Basis_Big *bigpw_in)
Definition elecstate_lcao.h:20
DensityMatrix< TK, double > * get_DM() const
Definition elecstate_lcao.h:56
Definition elecstate.h:15
std::string classname
Definition elecstate.h:119
void init_ks(Charge *chg_in, const K_Vectors *klist_in, int nk_in, ModulePW::PW_Basis *rhopw_in, const ModulePW::PW_Basis_Big *bigpw_in)
Definition elecstate.cpp:57
Definition psi.h:37
Definition cal_dm.h:10
Definition exx_lip.h:23