ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
hamilt::OperatorEXXPW< T, Device > Class Template Reference

#include <op_exx_pw.h>

Inheritance diagram for hamilt::OperatorEXXPW< T, Device >:
Collaboration diagram for hamilt::OperatorEXXPW< T, Device >:

Public Member Functions

 OperatorEXXPW (const int *isk_in, const ModulePW::PW_Basis_K *wfcpw_in, const ModulePW::PW_Basis *rhopw_in, K_Vectors *kv_in, const UnitCell *ucell)
 
template<typename T_in , typename Device_in = Device>
 OperatorEXXPW (const OperatorEXXPW< T_in, Device_in > *op_exx)
 
virtual ~OperatorEXXPW ()
 
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
 
double cal_exx_energy (psi::Psi< T, Device > *psi_) const
 
void set_psi (psi::Psi< T, Device > &psi_in) const
 
void set_wg (const ModuleBase::matrix *wg_in)
 
void construct_ace () const
 
- Public Member Functions inherited from hamilt::OperatorPW< T, Device >
virtual ~OperatorPW ()
 
- Public Member Functions inherited from hamilt::Operator< T, Device >
 Operator ()
 
virtual ~Operator ()
 
virtual hpsi_info hPsi (hpsi_info &input) const
 
virtual void init (const int ik_in)
 
virtual void add (Operator *next)
 
virtual int get_ik () const
 
virtual void act (const psi::Psi< T, Device > &psi_in, psi::Psi< T, Device > &psi_out, const int nbands) const
 
int get_act_type () const
 
calculation_type get_cal_type () const
 

Public Attributes

bool first_iter = false
 
- Public Attributes inherited from hamilt::OperatorPW< T, Device >
std::string classname
 
- Public Attributes inherited from hamilt::Operator< T, Device >
Operatornext_op
 interface type 3: return a Psi-type HPsi
 

Private Types

using Real = typename GetTypeReal< T >::type
 
using ct_Device = typename ct::PsiToContainer< Device >::type
 
using setmem_complex_op = base_device::memory::set_memory_op< T, Device >
 
using setmem_real_op = base_device::memory::set_memory_op< Real, Device >
 
using setmem_real_cpu_op = base_device::memory::set_memory_op< Real, base_device::DEVICE_CPU >
 
using resmem_complex_op = base_device::memory::resize_memory_op< T, Device >
 
using delmem_complex_op = base_device::memory::delete_memory_op< T, Device >
 
using syncmem_complex_op = base_device::memory::synchronize_memory_op< T, Device, Device >
 
using resmem_real_op = base_device::memory::resize_memory_op< Real, Device >
 
using delmem_real_op = base_device::memory::delete_memory_op< Real, Device >
 
using gemm_complex_op = ModuleBase::gemm_op< T, Device >
 
using axpy_complex_op = ModuleBase::axpy_op< T, Device >
 
using vec_add_vec_complex_op = ModuleBase::vector_add_vector_op< T, Device >
 
using dot_op = ModuleBase::dot_real_op< T, Device >
 
using syncmem_complex_c2d_op = base_device::memory::synchronize_memory_op< T, Device, base_device::DEVICE_CPU >
 
using syncmem_complex_d2c_op = base_device::memory::synchronize_memory_op< T, base_device::DEVICE_CPU, Device >
 
using syncmem_real_c2d_op = base_device::memory::synchronize_memory_op< Real, Device, base_device::DEVICE_CPU >
 
using syncmem_real_d2c_op = base_device::memory::synchronize_memory_op< Real, base_device::DEVICE_CPU, Device >
 
using lapack_potrf = container::kernels::lapack_potrf< T, ct_Device >
 
using lapack_trtri = container::kernels::lapack_trtri< T, ct_Device >
 

Private Member Functions

std::vector< int > get_q_points (const int ik) const
 
const Tget_pw (const int m, const int iq) const
 
void multiply_potential (T *density_recip, int ik, int iq) const
 
double exx_divergence (Conv_Coulomb_Pot_K::Coulomb_Type coulomb_type, double erfc_omega=0) const
 
void get_potential () const
 
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
 
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
 
double cal_exx_energy_op (psi::Psi< T, Device > *psi_) const
 
double cal_exx_energy_ace (psi::Psi< T, Device > *psi_) const
 
void cal_density_recip (const T *psi_nk_real, const T *psi_mq_real, double omega) const
 
void rho_recip2real (const T *rho_recip, T *rho_real, bool add=false, Real factor=1.0) const
 
void cal_density_recip (const std::complex< double > *psi_nk_real, const std::complex< double > *psi_mq_real, double omega) const
 
void cal_density_recip (const std::complex< float > *psi_nk_real, const std::complex< float > *psi_mq_real, double omega) const
 
void rho_recip2real (const std::complex< double > *rho_recip, std::complex< double > *rho_real, bool add, double factor) const
 
void rho_recip2real (const std::complex< float > *rho_recip, std::complex< float > *rho_real, bool add, float factor) const
 

Private Attributes

const int * isk = nullptr
 
const ModulePW::PW_Basis_Kwfcpw = nullptr
 
const ModulePW::PW_Basisrhopw = nullptr
 
ModulePW::PW_Basisrhopw_dev = nullptr
 
const UnitCellucell = nullptr
 
Real tpiba = 0
 
int cnt = 0
 
bool potential_got = false
 
K_Vectorskv = nullptr
 
psi::Psi< T, Device > psi
 
const ModuleBase::matrixwg
 
Tpsi_nk_real = nullptr
 
Tpsi_mq_real = nullptr
 
Tdensity_real = nullptr
 
Th_psi_real = nullptr
 
Tdensity_recip = nullptr
 
Th_psi_recip = nullptr
 
Realpot = nullptr
 
Th_psi_ace = nullptr
 
Tpsi_h_psi_ace = nullptr
 
TL_ace = nullptr
 
std::vector< T * > Xi_ace_k
 
std::map< int, std::vector< int > > q_points
 
const ModuleBase::matrixp_wg
 
Device * ctx = {}
 
base_device::DEVICE_CPU * cpu_ctx = {}
 
base_device::AbacusDevice_t device = {}
 
bool gamma_extrapolation = true
 

Additional Inherited Members

- Public Types inherited from hamilt::Operator< T, Device >
typedef std::tuple< const psi::Psi< T, Device > *, const psi::Range, T * > hpsi_info
 
- Protected Types inherited from hamilt::Operator< T, Device >
using set_memory_op = base_device::memory::set_memory_op< T, Device >
 
- Protected Member Functions inherited from hamilt::Operator< T, Device >
Tget_hpsi (const hpsi_info &info) const
 
- Protected Attributes inherited from hamilt::Operator< T, Device >
int ik
 
int act_type
 determine which act() interface would be called in hPsi()
 
bool in_place
 
enum calculation_type cal_type
 
Operatornext_sub_op
 
bool is_first_node
 
psi::Psi< T, Device > * hpsi
 
Device * ctx
 

Member Typedef Documentation

◆ axpy_complex_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::axpy_complex_op = ModuleBase::axpy_op<T, Device>
private

◆ ct_Device

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::ct_Device = typename ct::PsiToContainer<Device>::type
private

◆ delmem_complex_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::delmem_complex_op = base_device::memory::delete_memory_op<T, Device>
private

◆ delmem_real_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::delmem_real_op = base_device::memory::delete_memory_op<Real, Device>
private

◆ dot_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::dot_op = ModuleBase::dot_real_op<T, Device>
private

◆ gemm_complex_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::gemm_complex_op = ModuleBase::gemm_op<T, Device>
private

◆ lapack_potrf

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::lapack_potrf = container::kernels::lapack_potrf<T, ct_Device>
private

◆ lapack_trtri

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::lapack_trtri = container::kernels::lapack_trtri<T, ct_Device>
private

◆ Real

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::Real = typename GetTypeReal<T>::type
private

◆ resmem_complex_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::resmem_complex_op = base_device::memory::resize_memory_op<T, Device>
private

◆ resmem_real_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::resmem_real_op = base_device::memory::resize_memory_op<Real, Device>
private

◆ setmem_complex_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::setmem_complex_op = base_device::memory::set_memory_op<T, Device>
private

◆ setmem_real_cpu_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::setmem_real_cpu_op = base_device::memory::set_memory_op<Real, base_device::DEVICE_CPU>
private

◆ setmem_real_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::setmem_real_op = base_device::memory::set_memory_op<Real, Device>
private

◆ syncmem_complex_c2d_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::syncmem_complex_c2d_op = base_device::memory::synchronize_memory_op<T, Device, base_device::DEVICE_CPU>
private

◆ syncmem_complex_d2c_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::syncmem_complex_d2c_op = base_device::memory::synchronize_memory_op<T, base_device::DEVICE_CPU, Device>
private

◆ syncmem_complex_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::syncmem_complex_op = base_device::memory::synchronize_memory_op<T, Device, Device>
private

◆ syncmem_real_c2d_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::syncmem_real_c2d_op = base_device::memory::synchronize_memory_op<Real, Device, base_device::DEVICE_CPU>
private

◆ syncmem_real_d2c_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::syncmem_real_d2c_op = base_device::memory::synchronize_memory_op<Real, base_device::DEVICE_CPU, Device>
private

◆ vec_add_vec_complex_op

template<typename T , typename Device >
using hamilt::OperatorEXXPW< T, Device >::vec_add_vec_complex_op = ModuleBase::vector_add_vector_op<T, Device>
private

Constructor & Destructor Documentation

◆ OperatorEXXPW() [1/2]

template<typename T , typename Device >
hamilt::OperatorEXXPW< T, Device >::OperatorEXXPW ( const int *  isk_in,
const ModulePW::PW_Basis_K wfcpw_in,
const ModulePW::PW_Basis rhopw_in,
K_Vectors kv_in,
const UnitCell ucell 
)
Here is the call graph for this function:

◆ OperatorEXXPW() [2/2]

template<typename T , typename Device >
template<typename T_in , typename Device_in >
hamilt::OperatorEXXPW< T, Device >::OperatorEXXPW ( const OperatorEXXPW< T_in, Device_in > *  op_exx)
explicit

◆ ~OperatorEXXPW()

template<typename T , typename Device >
hamilt::OperatorEXXPW< T, Device >::~OperatorEXXPW ( )
virtual

Member Function Documentation

◆ act()

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::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
overridevirtual

do operation : |hpsi_choosed> = V|psi_choosed> V is the target operator act on choosed psi, the consequence should be added to choosed hpsi interface type 1: pointer-only (default)

Note
PW: nbasis = max_npw * npol, nbands = nband * npol, npol = npol. Strange but PAY ATTENTION!!!

Reimplemented from hamilt::Operator< T, Device >.

◆ act_op()

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::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
private
Here is the call graph for this function:

◆ act_op_ace()

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::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
private
Here is the call graph for this function:

◆ cal_density_recip() [1/3]

void hamilt::OperatorEXXPW< std::complex< double >, base_device::DEVICE_CPU >::cal_density_recip ( const std::complex< double > *  psi_nk_real,
const std::complex< double > *  psi_mq_real,
double  omega 
) const
private

◆ cal_density_recip() [2/3]

void hamilt::OperatorEXXPW< std::complex< float >, base_device::DEVICE_CPU >::cal_density_recip ( const std::complex< float > *  psi_nk_real,
const std::complex< float > *  psi_mq_real,
double  omega 
) const
private

◆ cal_density_recip() [3/3]

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::cal_density_recip ( const T psi_nk_real,
const T psi_mq_real,
double  omega 
) const
private

◆ cal_exx_energy()

template<typename T , typename Device >
double hamilt::OperatorEXXPW< T, Device >::cal_exx_energy ( psi::Psi< T, Device > *  psi_) const

◆ cal_exx_energy_ace()

template<typename T , typename Device >
double hamilt::OperatorEXXPW< T, Device >::cal_exx_energy_ace ( psi::Psi< T, Device > *  psi_) const
private
Here is the call graph for this function:

◆ cal_exx_energy_op()

template<typename T , typename Device >
double hamilt::OperatorEXXPW< T, Device >::cal_exx_energy_op ( psi::Psi< T, Device > *  psi_) const
private
Here is the call graph for this function:

◆ construct_ace()

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::construct_ace ( ) const
Here is the call graph for this function:

◆ exx_divergence()

template<typename T , typename Device >
double hamilt::OperatorEXXPW< T, Device >::exx_divergence ( Conv_Coulomb_Pot_K::Coulomb_Type  coulomb_type,
double  erfc_omega = 0 
) const
private
Here is the call graph for this function:

◆ get_potential()

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::get_potential ( ) const
private

◆ get_pw()

template<typename T , typename Device >
const T * hamilt::OperatorEXXPW< T, Device >::get_pw ( const int  m,
const int  iq 
) const
private

◆ get_q_points()

template<typename T , typename Device >
std::vector< int > hamilt::OperatorEXXPW< T, Device >::get_q_points ( const int  ik) const
private
Here is the call graph for this function:

◆ multiply_potential()

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::multiply_potential ( T density_recip,
int  ik,
int  iq 
) const
private
Here is the call graph for this function:

◆ rho_recip2real() [1/3]

void hamilt::OperatorEXXPW< std::complex< double >, base_device::DEVICE_CPU >::rho_recip2real ( const std::complex< double > *  rho_recip,
std::complex< double > *  rho_real,
bool  add,
double  factor 
) const
private

◆ rho_recip2real() [2/3]

void hamilt::OperatorEXXPW< std::complex< float >, base_device::DEVICE_CPU >::rho_recip2real ( const std::complex< float > *  rho_recip,
std::complex< float > *  rho_real,
bool  add,
float  factor 
) const
private

◆ rho_recip2real() [3/3]

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::rho_recip2real ( const T rho_recip,
T rho_real,
bool  add = false,
Real  factor = 1.0 
) const
private

◆ set_psi()

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::set_psi ( psi::Psi< T, Device > &  psi_in) const
inline

◆ set_wg()

template<typename T , typename Device >
void hamilt::OperatorEXXPW< T, Device >::set_wg ( const ModuleBase::matrix wg_in)
inline
Here is the caller graph for this function:

Member Data Documentation

◆ cnt

template<typename T , typename Device >
int hamilt::OperatorEXXPW< T, Device >::cnt = 0
mutableprivate

◆ cpu_ctx

template<typename T , typename Device >
base_device::DEVICE_CPU* hamilt::OperatorEXXPW< T, Device >::cpu_ctx = {}
private

◆ ctx

template<typename T , typename Device >
Device* hamilt::OperatorEXXPW< T, Device >::ctx = {}
private

◆ density_real

template<typename T , typename Device >
T* hamilt::OperatorEXXPW< T, Device >::density_real = nullptr
private

◆ density_recip

template<typename T , typename Device >
T* hamilt::OperatorEXXPW< T, Device >::density_recip = nullptr
private

◆ device

template<typename T , typename Device >
base_device::AbacusDevice_t hamilt::OperatorEXXPW< T, Device >::device = {}
private

◆ first_iter

template<typename T , typename Device >
bool hamilt::OperatorEXXPW< T, Device >::first_iter = false

◆ gamma_extrapolation

template<typename T , typename Device >
bool hamilt::OperatorEXXPW< T, Device >::gamma_extrapolation = true
private

◆ h_psi_ace

template<typename T , typename Device >
T* hamilt::OperatorEXXPW< T, Device >::h_psi_ace = nullptr
mutableprivate

◆ h_psi_real

template<typename T , typename Device >
T* hamilt::OperatorEXXPW< T, Device >::h_psi_real = nullptr
private

◆ h_psi_recip

template<typename T , typename Device >
T* hamilt::OperatorEXXPW< T, Device >::h_psi_recip = nullptr
private

◆ isk

template<typename T , typename Device >
const int* hamilt::OperatorEXXPW< T, Device >::isk = nullptr
private

◆ kv

template<typename T , typename Device >
K_Vectors* hamilt::OperatorEXXPW< T, Device >::kv = nullptr
private

◆ L_ace

template<typename T , typename Device >
T* hamilt::OperatorEXXPW< T, Device >::L_ace = nullptr
mutableprivate

◆ p_wg

template<typename T , typename Device >
const ModuleBase::matrix* hamilt::OperatorEXXPW< T, Device >::p_wg
private

◆ pot

template<typename T , typename Device >
Real* hamilt::OperatorEXXPW< T, Device >::pot = nullptr
private

◆ potential_got

template<typename T , typename Device >
bool hamilt::OperatorEXXPW< T, Device >::potential_got = false
mutableprivate

◆ psi

template<typename T , typename Device >
psi::Psi<T, Device> hamilt::OperatorEXXPW< T, Device >::psi
mutableprivate

◆ psi_h_psi_ace

template<typename T , typename Device >
T* hamilt::OperatorEXXPW< T, Device >::psi_h_psi_ace = nullptr
mutableprivate

◆ psi_mq_real

template<typename T , typename Device >
T* hamilt::OperatorEXXPW< T, Device >::psi_mq_real = nullptr
private

◆ psi_nk_real

template<typename T , typename Device >
T* hamilt::OperatorEXXPW< T, Device >::psi_nk_real = nullptr
private

◆ q_points

template<typename T , typename Device >
std::map<int, std::vector<int> > hamilt::OperatorEXXPW< T, Device >::q_points
mutableprivate

◆ rhopw

template<typename T , typename Device >
const ModulePW::PW_Basis* hamilt::OperatorEXXPW< T, Device >::rhopw = nullptr
private

◆ rhopw_dev

template<typename T , typename Device >
ModulePW::PW_Basis* hamilt::OperatorEXXPW< T, Device >::rhopw_dev = nullptr
private

◆ tpiba

template<typename T , typename Device >
Real hamilt::OperatorEXXPW< T, Device >::tpiba = 0
private

◆ ucell

template<typename T , typename Device >
const UnitCell* hamilt::OperatorEXXPW< T, Device >::ucell = nullptr
private

◆ wfcpw

template<typename T , typename Device >
const ModulePW::PW_Basis_K* hamilt::OperatorEXXPW< T, Device >::wfcpw = nullptr
private

◆ wg

template<typename T , typename Device >
const ModuleBase::matrix* hamilt::OperatorEXXPW< T, Device >::wg
private

◆ Xi_ace_k

template<typename T , typename Device >
std::vector<T*> hamilt::OperatorEXXPW< T, Device >::Xi_ace_k
mutableprivate

The documentation for this class was generated from the following files: