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 // Passing an explicit output matrix makes the lifetime and allocation explicit and avoids hidden allocations.
35 void cal_v_eff(const Charge*const chg, const UnitCell*const ucell, ModuleBase::matrix& v_eff) override
36 {
37 if (!this->allocated)
38 {
39 this->surchem_->allocate(this->rho_basis_->nrxx, v_eff.nr);
40 this->allocated = true;
41 }
42 ModuleBase::matrix v_sol_correction(v_eff.nr, this->rho_basis_->nrxx);
43 this->surchem_->v_correction(*ucell,
44 *chg->pgrid,
45 const_cast<ModulePW::PW_Basis*>(this->rho_basis_),
46 v_eff.nr,
47 chg->rho,
48 this->vlocal,
49 this->structure_factors_,
50 v_sol_correction);
51 v_eff += v_sol_correction;
52 }
53
54 private:
55 surchem* surchem_ = nullptr;
57 const double* vlocal = nullptr;
58 bool allocated = false;
59};
60
61} // namespace elecstate
62
63#endif
Definition charge.h:18
double ** rho
Definition charge.h:37
const Parallel_Grid * pgrid
Definition charge.h:45
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:17
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:55
const double * vlocal
Definition pot_surchem.hpp:57
Structure_Factor * structure_factors_
Definition pot_surchem.hpp:56
~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:35
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:58
Definition surchem.h:15
void clear()
Definition surchem.cpp:45
void 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, ModuleBase::matrix &v)
Definition H_correction_pw.cpp:9
void allocate(const int &nrxx, const int &nspin)
Definition surchem.cpp:16
Definition cal_dm.h:10