22template <
typename T,
typename Device>
35 template <
typename T_in,
typename Device_in = Device>
40 virtual void act(
const int nbands,
61 const int*
isk =
nullptr;
69 const T *
get_pw(
const int m,
const int iq)
const;
73 void act_op(
const int nbands,
172template <
typename Real,
typename Device>
178 bool gamma_extrapolation,
182 bool is_stress =
false);
184template <
typename Real,
typename Device>
190 bool gamma_extrapolation,
201 bool gamma_extrapolation,
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:56
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
Definition op_pw_exx.h:24
psi::Psi< T, Device > psi
Definition op_pw_exx.h:116
bool first_iter
Definition op_pw_exx.h:56
T * h_psi_real
Definition op_pw_exx.h:123
void multiply_potential(T *density_recip, int ik, int iq) const
Definition op_pw_exx.cpp:451
const int * isk
Definition op_pw_exx.h:61
void set_wg(const ModuleBase::matrix *wg_in)
Definition op_pw_exx.h:52
T * density_recip
Definition op_pw_exx.h:125
T * density_real
Definition op_pw_exx.h:122
ModulePW::PW_Basis * rhopw_dev
Definition op_pw_exx.h:64
Real tpiba
Definition op_pw_exx.h:66
int cnt
Definition op_pw_exx.h:105
void cal_density_recip(const T *psi_nk_real, const T *psi_mq_real, double omega) const
double cal_exx_energy_op(psi::Psi< T, Device > *psi_) const
Definition op_pw_exx.cpp:510
std::map< int, std::vector< int > > q_points
Definition op_pw_exx.h:137
base_device::AbacusDevice_t device
Definition op_pw_exx.h:146
T * psi_nk_real
Definition op_pw_exx.h:120
const ModuleBase::matrix * wg
Definition op_pw_exx.h:117
virtual ~OperatorEXXPW()
Definition op_pw_exx.cpp:129
void rho_recip2real(const T *rho_recip, T *rho_real, bool add=false, Real factor=1.0) const
const ModuleBase::matrix * p_wg
Definition op_pw_exx.h:140
Device * ctx
Definition op_pw_exx.h:144
void construct_ace() const
Definition op_pw_exx_ace.cpp:76
void act_op(const int nbands, const int nbasis, const int npol, const T *tmpsi_in, T *tmhpsi, const int ngk_ik=0, const bool is_first_node=false) const
Definition op_pw_exx.cpp:200
const T * get_pw(const int m, const int iq) const
Definition op_pw_exx.cpp:465
double cal_exx_energy_ace(psi::Psi< T, Device > *psi_) const
Definition op_pw_exx_ace.cpp:291
typename ct::PsiToContainer< Device >::type ct_Device
Definition op_pw_exx.h:148
static std::vector< Real > erfc_div
Definition op_pw_exx.h:58
const ModulePW::PW_Basis_K * wfcpw
Definition op_pw_exx.h:62
T * h_psi_recip
Definition op_pw_exx.h:127
static std::vector< Real > fock_div
Definition op_pw_exx.h:58
std::vector< T * > Xi_ace_k
Definition op_pw_exx.h:134
const ModulePW::PW_Basis * rhopw
Definition op_pw_exx.h:63
void set_psi(psi::Psi< T, Device > &psi_in) const
Definition op_pw_exx.h:50
void act_op_ace(const int nbands, const int nbasis, const int npol, const T *tmpsi_in, T *tmhpsi, const int ngk_ik=0, const bool is_first_node=false) const
Definition op_pw_exx_ace.cpp:11
T * h_psi_ace
Definition op_pw_exx.h:131
bool gamma_extrapolation
Definition op_pw_exx.h:168
double cal_exx_energy(psi::Psi< T, Device > *psi_) const
Definition op_pw_exx.cpp:497
Real * pot
Definition op_pw_exx.h:128
base_device::DEVICE_CPU * cpu_ctx
Definition op_pw_exx.h:145
std::vector< int > get_q_points(const int ik) const
Definition op_pw_exx.cpp:405
K_Vectors * kv
Definition op_pw_exx.h:113
T * psi_mq_real
Definition op_pw_exx.h:121
T * psi_h_psi_ace
Definition op_pw_exx.h:132
typename GetTypeReal< T >::type Real
Definition op_pw_exx.h:26
T * L_ace
Definition op_pw_exx.h:133
bool potential_got
Definition op_pw_exx.h:107
const UnitCell * ucell
Definition op_pw_exx.h:65
void act_op_kpar(const int nbands, const int nbasis, const int npol, const T *tmpsi_in, T *tmhpsi, const int ngk_ik=0, const bool is_first_node=false) const
Definition op_pw_exx.cpp:297
virtual void act(const int nbands, const int nbasis, const int npol, const T *tmpsi_in, T *tmhpsi, const int ngk_ik=0, const bool is_first_node=false) const override
Definition op_pw_exx.cpp:171
int ik
Definition operator.h:99
virtual void add(Operator *next)
bool is_first_node
Definition operator.h:107
#define T
Definition exp.cpp:237
Coulomb_Type
Definition conv_coulomb_pot_k.h:10
AbacusDevice_t
Definition types.h:12
void get_exx_stress_potential(const K_Vectors *kv, const ModulePW::PW_Basis_K *wfcpw, ModulePW::PW_Basis *rhopw_dev, Real *pot, double tpiba, bool gamma_extrapolation, double ucell_omega, int ik, int iq)
Definition op_pw_exx_pot.cpp:216
void get_exx_potential(const K_Vectors *kv, const ModulePW::PW_Basis_K *wfcpw, ModulePW::PW_Basis *rhopw_dev, Real *pot, double tpiba, bool gamma_extrapolation, double ucell_omega, int ik, int iq, bool is_stress=false)
Definition op_pw_exx_pot.cpp:9
double exx_divergence(Conv_Coulomb_Pot_K::Coulomb_Type coulomb_type, double erfc_omega, const K_Vectors *kv, const ModulePW::PW_Basis_K *wfcpw, ModulePW::PW_Basis *rhopw_dev, double tpiba, bool gamma_extrapolation, double ucell_omega)
Definition op_pw_exx_pot.cpp:398
T type
Definition macros.h:8
Definition math_kernel_op.h:131
Definition math_kernel_op.h:167
Definition math_kernel_op.h:216
Definition math_kernel_op.h:150
Definition memory_op.h:115
Definition memory_op.h:17
Definition memory_op.h:31
Definition memory_op.h:61
Definition tensor_types.h:113