ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
pot_surchem.hpp
Go to the documentation of this file.
1#ifndef POTSURCHEM_H
2#define POTSURCHEM_H
3
5#include "pot_base.h"
6
7namespace elecstate
8{
9
10class PotSurChem : public PotBase
11{
12 public:
13 // constructor for exchange-correlation potential
14 // meta-GGA should input matrix of kinetic potential, it is optional
15 PotSurChem(const ModulePW::PW_Basis* rho_basis_in,
16 Structure_Factor* structure_factors_in,
17 const double* vlocal_in,
18 surchem* surchem_in)
19 : vlocal(vlocal_in), surchem_(surchem_in)
20 {
21 this->rho_basis_ = rho_basis_in;
22 this->structure_factors_ = structure_factors_in;
23 this->dynamic_mode = true;
24 this->fixed_mode = false;
25 }
27 {
28 if (this->allocated)
29 {
30 this->surchem_->clear();
31 }
32 }
33
34 void cal_v_eff(const Charge*const chg, const UnitCell*const ucell, ModuleBase::matrix& v_eff) override
35 {
36 if (!this->allocated)
37 {
38 this->surchem_->allocate(this->rho_basis_->nrxx, v_eff.nr);
39 this->allocated = true;
40 }
41
42 v_eff += this->surchem_->v_correction(*ucell,
43 *chg->pgrid,
44 const_cast<ModulePW::PW_Basis*>(this->rho_basis_),
45 v_eff.nr,
46 chg->rho,
47 this->vlocal,
48 this->structure_factors_);
49 }
50
51 private:
52 surchem* surchem_ = nullptr;
54 const double* vlocal = nullptr;
55 bool allocated = false;
56};
57
58} // namespace elecstate
59
60#endif
Definition charge.h:20
double ** rho
Definition charge.h:38
const Parallel_Grid * pgrid
Definition charge.h:47
Definition matrix.h:19
int nr
Definition matrix.h:23
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
int nrxx
Definition pw_basis.h:120
Definition structure_factor.h:11
Definition unitcell.h:16
Definition pot_base.h:22
const ModulePW::PW_Basis * rho_basis_
Definition pot_base.h:35
bool dynamic_mode
Definition pot_base.h:32
bool fixed_mode
Definition pot_base.h:31
Definition pot_surchem.hpp:11
surchem * surchem_
Definition pot_surchem.hpp:52
const double * vlocal
Definition pot_surchem.hpp:54
Structure_Factor * structure_factors_
Definition pot_surchem.hpp:53
~PotSurChem()
Definition pot_surchem.hpp:26
void cal_v_eff(const Charge *const chg, const UnitCell *const ucell, ModuleBase::matrix &v_eff) override
Definition pot_surchem.hpp:34
PotSurChem(const ModulePW::PW_Basis *rho_basis_in, Structure_Factor *structure_factors_in, const double *vlocal_in, surchem *surchem_in)
Definition pot_surchem.hpp:15
bool allocated
Definition pot_surchem.hpp:55
Definition surchem.h:15
void clear()
Definition surchem.cpp:45
ModuleBase::matrix v_correction(const UnitCell &cell, const Parallel_Grid &pgrid, const ModulePW::PW_Basis *rho_basis, const int &nspin, const double *const *const rho, const double *vlocal, Structure_Factor *sf)
Definition H_correction_pw.cpp:9
void allocate(const int &nrxx, const int &nspin)
Definition surchem.cpp:16
Definition cal_dm.h:10