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:57
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
Definition op_exx_pw.h:24
psi::Psi< T, Device > psi
Definition op_exx_pw.h:116
bool first_iter
Definition op_exx_pw.h:56
T * h_psi_real
Definition op_exx_pw.h:123
void multiply_potential(T *density_recip, int ik, int iq) const
Definition op_exx_pw.cpp:439
const int * isk
Definition op_exx_pw.h:61
void set_wg(const ModuleBase::matrix *wg_in)
Definition op_exx_pw.h:52
T * density_recip
Definition op_exx_pw.h:125
T * density_real
Definition op_exx_pw.h:122
ModulePW::PW_Basis * rhopw_dev
Definition op_exx_pw.h:64
Real tpiba
Definition op_exx_pw.h:66
int cnt
Definition op_exx_pw.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_exx_pw.cpp:498
std::map< int, std::vector< int > > q_points
Definition op_exx_pw.h:137
base_device::AbacusDevice_t device
Definition op_exx_pw.h:146
T * psi_nk_real
Definition op_exx_pw.h:120
const ModuleBase::matrix * wg
Definition op_exx_pw.h:117
virtual ~OperatorEXXPW()
Definition op_exx_pw.cpp:126
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_exx_pw.h:140
Device * ctx
Definition op_exx_pw.h:144
void construct_ace() const
Definition exx_pw_ace.cpp:71
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_exx_pw.cpp:194
const T * get_pw(const int m, const int iq) const
Definition op_exx_pw.cpp:453
double cal_exx_energy_ace(psi::Psi< T, Device > *psi_) const
Definition exx_pw_ace.cpp:282
typename ct::PsiToContainer< Device >::type ct_Device
Definition op_exx_pw.h:148
static std::vector< Real > erfc_div
Definition op_exx_pw.h:58
const ModulePW::PW_Basis_K * wfcpw
Definition op_exx_pw.h:62
T * h_psi_recip
Definition op_exx_pw.h:127
static std::vector< Real > fock_div
Definition op_exx_pw.h:58
std::vector< T * > Xi_ace_k
Definition op_exx_pw.h:134
const ModulePW::PW_Basis * rhopw
Definition op_exx_pw.h:63
void set_psi(psi::Psi< T, Device > &psi_in) const
Definition op_exx_pw.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 exx_pw_ace.cpp:8
T * h_psi_ace
Definition op_exx_pw.h:131
bool gamma_extrapolation
Definition op_exx_pw.h:168
double cal_exx_energy(psi::Psi< T, Device > *psi_) const
Definition op_exx_pw.cpp:485
Real * pot
Definition op_exx_pw.h:128
base_device::DEVICE_CPU * cpu_ctx
Definition op_exx_pw.h:145
std::vector< int > get_q_points(const int ik) const
Definition op_exx_pw.cpp:393
K_Vectors * kv
Definition op_exx_pw.h:113
T * psi_mq_real
Definition op_exx_pw.h:121
T * psi_h_psi_ace
Definition op_exx_pw.h:132
typename GetTypeReal< T >::type Real
Definition op_exx_pw.h:26
T * L_ace
Definition op_exx_pw.h:133
bool potential_got
Definition op_exx_pw.h:107
const UnitCell * ucell
Definition op_exx_pw.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_exx_pw.cpp:290
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_exx_pw.cpp:168
Definition operator_pw.h:8
int ik
Definition operator.h:101
virtual void add(Operator *next)
bool is_first_node
Definition operator.h:109
#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 exx_pw_pot.cpp:209
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)
Definition exx_pw_pot.cpp:8
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 exx_pw_pot.cpp:385
T type
Definition macros.h:8
Definition math_kernel_op.h:132
Definition math_kernel_op.h:168
Definition math_kernel_op.h:217
Definition math_kernel_op.h:151
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