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

#include <onsite_projector.h>

Collaboration diagram for projectors::OnsiteProjector< T, Device >:

Public Member Functions

void init_proj (const std::string &orbital_dir, const std::vector< std::string > &orb_files, const std::vector< int > &nproj, const std::vector< int > &lproj, const std::vector< int > &iproj, const std::vector< double > &onsite_r)
 initialize the radial projector for real-space projection involving operators
 
void tabulate_atomic (const int ik, const char grad='n')
 calculate the onsite projectors in reciprocal space(|G+K>) for all atoms
 
void overlap_proj_psi (const int npm, const std::complex< double > *ppsi)
 
void read_abacus_orb (std::ifstream &ifs, std::string &elem, double &ecut, int &nr, double &dr, std::vector< int > &nzeta, std::vector< std::vector< double > > &radials, const int rank=0)
 
void init (const std::string &orbital_dir, const UnitCell *ucell_in, const psi::Psi< std::complex< T >, Device > &psi, const K_Vectors &kv, const ModulePW::PW_Basis_K &pw_basis, Structure_Factor &sf, const double onsite_radius, const int nq, const double dq, const ModuleBase::matrix &wg, const ModuleBase::matrix &ekb)
 
void cal_occupations (const psi::Psi< std::complex< T >, Device > *psi, const ModuleBase::matrix &wg_in)
 calculate and print the occupations of all lm orbitals
 
int get_size_becp () const
 
std::complex< double > * get_becp () const
 
std::complex< double > * get_h_becp () const
 
std::complex< double > * get_tab_atomic () const
 
int get_tot_nproj () const
 
int get_npw () const
 
int get_npwx () const
 
const int & get_nh (int iat) const
 
hamilt::Onsite_Proj_tools< T, Device > * get_fs_tools () const
 

Static Public Member Functions

static OnsiteProjector< T, Device > * get_instance ()
 static access to this class instance
 

Private Types

using gemm_op = ModuleBase::gemm_op< std::complex< T >, Device >
 rename the operators for CPU/GPU device
 
using resmem_complex_op = base_device::memory::resize_memory_op< std::complex< T >, Device >
 
using resmem_complex_h_op = base_device::memory::resize_memory_op< std::complex< T >, base_device::DEVICE_CPU >
 
using setmem_complex_op = base_device::memory::set_memory_op< std::complex< T >, Device >
 
using delmem_complex_op = base_device::memory::delete_memory_op< std::complex< T >, Device >
 
using delmem_complex_h_op = base_device::memory::delete_memory_op< std::complex< T >, base_device::DEVICE_CPU >
 
using syncmem_complex_h2d_op = base_device::memory::synchronize_memory_op< std::complex< T >, Device, base_device::DEVICE_CPU >
 
using syncmem_complex_d2h_op = base_device::memory::synchronize_memory_op< std::complex< T >, base_device::DEVICE_CPU, Device >
 
using resmem_var_op = base_device::memory::resize_memory_op< T, Device >
 
using resmem_var_h_op = base_device::memory::resize_memory_op< T, base_device::DEVICE_CPU >
 
using setmem_var_op = base_device::memory::set_memory_op< T, Device >
 
using delmem_var_op = base_device::memory::delete_memory_op< T, Device >
 
using delmem_var_h_op = base_device::memory::delete_memory_op< T, base_device::DEVICE_CPU >
 
using syncmem_var_h2d_op = base_device::memory::synchronize_memory_op< T, Device, base_device::DEVICE_CPU >
 
using syncmem_var_d2h_op = base_device::memory::synchronize_memory_op< T, base_device::DEVICE_CPU, Device >
 
using resmem_int_op = base_device::memory::resize_memory_op< int, Device >
 
using delmem_int_op = base_device::memory::delete_memory_op< int, Device >
 
using syncmem_int_h2d_op = base_device::memory::synchronize_memory_op< int, Device, base_device::DEVICE_CPU >
 

Private Member Functions

 OnsiteProjector ()
 
 ~OnsiteProjector ()
 

Private Attributes

Device * ctx = {}
 
base_device::DEVICE_CPU * cpu_ctx = {}
 
base_device::AbacusDevice_t device = {}
 
hamilt::Onsite_Proj_tools< T, Device > * fs_tools = nullptr
 
std::complex< double > * tab_atomic_ = nullptr
 
std::complex< double > * becp = nullptr
 
std::complex< double > * h_becp
 
int size_becp = 0
 
int size_vproj = 0
 
int tot_nproj = 0
 
int npw_ = 0
 
int npwx_ = 0
 
int ik_ = 0
 
std::vector< std::vector< int > > it2ia
 
std::vector< double > rgrid
 
std::vector< std::vector< double > > projs
 
std::vector< std::vector< int > > it2iproj
 
std::vector< int > lproj
 
std::vector< int > iat_nh
 
const UnitCellucell = nullptr
 
const ModulePW::PW_Basis_Kpw_basis_ = nullptr
 
Structure_Factorsf_ = nullptr
 
int ntype = 0
 
RadialProjection::RadialProjector rp_
 
std::vector< int > irow2it_
 
std::vector< int > irow2iproj_
 
std::vector< int > irow2m_
 
std::map< std::tuple< int, int, int, int >, int > itiaiprojm2irow_
 
ModuleBase::realArray tab
 
ModuleBase::matrix nhtol
 
bool initialed = false
 

Static Private Attributes

static OnsiteProjector< T, Device > * instance
 

Member Typedef Documentation

◆ delmem_complex_h_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::delmem_complex_h_op = base_device::memory::delete_memory_op<std::complex<T>, base_device::DEVICE_CPU>
private

◆ delmem_complex_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::delmem_complex_op = base_device::memory::delete_memory_op<std::complex<T>, Device>
private

◆ delmem_int_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::delmem_int_op = base_device::memory::delete_memory_op<int, Device>
private

◆ delmem_var_h_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::delmem_var_h_op = base_device::memory::delete_memory_op<T, base_device::DEVICE_CPU>
private

◆ delmem_var_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::delmem_var_op = base_device::memory::delete_memory_op<T, Device>
private

◆ gemm_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::gemm_op = ModuleBase::gemm_op<std::complex<T>, Device>
private

rename the operators for CPU/GPU device

◆ resmem_complex_h_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::resmem_complex_h_op = base_device::memory::resize_memory_op<std::complex<T>, base_device::DEVICE_CPU>
private

◆ resmem_complex_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::resmem_complex_op = base_device::memory::resize_memory_op<std::complex<T>, Device>
private

◆ resmem_int_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::resmem_int_op = base_device::memory::resize_memory_op<int, Device>
private

◆ resmem_var_h_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::resmem_var_h_op = base_device::memory::resize_memory_op<T, base_device::DEVICE_CPU>
private

◆ resmem_var_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::resmem_var_op = base_device::memory::resize_memory_op<T, Device>
private

◆ setmem_complex_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::setmem_complex_op = base_device::memory::set_memory_op<std::complex<T>, Device>
private

◆ setmem_var_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::setmem_var_op = base_device::memory::set_memory_op<T, Device>
private

◆ syncmem_complex_d2h_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::syncmem_complex_d2h_op = base_device::memory::synchronize_memory_op<std::complex<T>, base_device::DEVICE_CPU, Device>
private

◆ syncmem_complex_h2d_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::syncmem_complex_h2d_op = base_device::memory::synchronize_memory_op<std::complex<T>, Device, base_device::DEVICE_CPU>
private

◆ syncmem_int_h2d_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::syncmem_int_h2d_op = base_device::memory::synchronize_memory_op<int, Device, base_device::DEVICE_CPU>
private

◆ syncmem_var_d2h_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::syncmem_var_d2h_op = base_device::memory::synchronize_memory_op<T, base_device::DEVICE_CPU, Device>
private

◆ syncmem_var_h2d_op

template<typename T , typename Device >
using projectors::OnsiteProjector< T, Device >::syncmem_var_h2d_op = base_device::memory::synchronize_memory_op<T, Device, base_device::DEVICE_CPU>
private

Constructor & Destructor Documentation

◆ OnsiteProjector()

template<typename T , typename Device >
projectors::OnsiteProjector< T, Device >::OnsiteProjector ( )
inlineprivate

◆ ~OnsiteProjector()

template<typename T , typename Device >
projectors::OnsiteProjector< T, Device >::~OnsiteProjector ( )
private

Member Function Documentation

◆ cal_occupations()

template<typename T , typename Device >
void projectors::OnsiteProjector< T, Device >::cal_occupations ( const psi::Psi< std::complex< T >, Device > *  psi,
const ModuleBase::matrix wg_in 
)

calculate and print the occupations of all lm orbitals

◆ get_becp()

template<typename T , typename Device >
std::complex< double > * projectors::OnsiteProjector< T, Device >::get_becp ( ) const
inline

◆ get_fs_tools()

template<typename T , typename Device >
hamilt::Onsite_Proj_tools< T, Device > * projectors::OnsiteProjector< T, Device >::get_fs_tools ( ) const
inline

◆ get_h_becp()

template<typename T , typename Device >
std::complex< double > * projectors::OnsiteProjector< T, Device >::get_h_becp ( ) const
inline

◆ get_instance()

template<typename T , typename Device >
static OnsiteProjector< T, Device > * projectors::OnsiteProjector< T, Device >::get_instance ( )
static

static access to this class instance

Here is the caller graph for this function:

◆ get_nh()

template<typename T , typename Device >
const int & projectors::OnsiteProjector< T, Device >::get_nh ( int  iat) const
inline

◆ get_npw()

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::get_npw ( ) const
inline

◆ get_npwx()

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::get_npwx ( ) const
inline

◆ get_size_becp()

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::get_size_becp ( ) const
inline

◆ get_tab_atomic()

template<typename T , typename Device >
std::complex< double > * projectors::OnsiteProjector< T, Device >::get_tab_atomic ( ) const
inline

◆ get_tot_nproj()

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::get_tot_nproj ( ) const
inline

◆ init()

template<typename T , typename Device >
void projectors::OnsiteProjector< T, Device >::init ( const std::string &  orbital_dir,
const UnitCell ucell_in,
const psi::Psi< std::complex< T >, Device > &  psi,
const K_Vectors kv,
const ModulePW::PW_Basis_K pw_basis,
Structure_Factor sf,
const double  onsite_radius,
const int  nq,
const double  dq,
const ModuleBase::matrix wg,
const ModuleBase::matrix ekb 
)

◆ init_proj()

template<typename T , typename Device >
void projectors::OnsiteProjector< T, Device >::init_proj ( const std::string &  orbital_dir,
const std::vector< std::string > &  orb_files,
const std::vector< int > &  nproj,
const std::vector< int > &  lproj,
const std::vector< int > &  iproj,
const std::vector< double > &  onsite_r 
)

initialize the radial projector for real-space projection involving operators

Parameters
orbital_dirYou know what it is
orb_filesYou know what it is
nproj# of projectors for each type defined in UnitCell, can be zero
lprojangular momentum for each projector
iprojindex of zeta function that each projector generated from
onsite_ronsite-radius for all valid projectors
rgrid[out] the radial grid shared by all projectors
projs[out] projectors indexed by iproj
it2iproj[out] for each type, the projector index (across all types)

◆ overlap_proj_psi()

template<typename T , typename Device >
void projectors::OnsiteProjector< T, Device >::overlap_proj_psi ( const int  npm,
const std::complex< double > *  ppsi 
)

◆ read_abacus_orb()

template<typename T , typename Device >
void projectors::OnsiteProjector< T, Device >::read_abacus_orb ( std::ifstream &  ifs,
std::string &  elem,
double &  ecut,
int &  nr,
double &  dr,
std::vector< int > &  nzeta,
std::vector< std::vector< double > > &  radials,
const int  rank = 0 
)

◆ tabulate_atomic()

template<typename T , typename Device >
void projectors::OnsiteProjector< T, Device >::tabulate_atomic ( const int  ik,
const char  grad = 'n' 
)

calculate the onsite projectors in reciprocal space(|G+K>) for all atoms

Member Data Documentation

◆ becp

template<typename T , typename Device >
std::complex<double>* projectors::OnsiteProjector< T, Device >::becp = nullptr
private

◆ cpu_ctx

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

◆ ctx

template<typename T , typename Device >
Device* projectors::OnsiteProjector< T, Device >::ctx = {}
private

◆ device

template<typename T , typename Device >
base_device::AbacusDevice_t projectors::OnsiteProjector< T, Device >::device = {}
private

◆ fs_tools

template<typename T , typename Device >
hamilt::Onsite_Proj_tools<T, Device>* projectors::OnsiteProjector< T, Device >::fs_tools = nullptr
private

◆ h_becp

template<typename T , typename Device >
std::complex<double>* projectors::OnsiteProjector< T, Device >::h_becp
private

◆ iat_nh

template<typename T , typename Device >
std::vector<int> projectors::OnsiteProjector< T, Device >::iat_nh
private

◆ ik_

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::ik_ = 0
private

◆ initialed

template<typename T , typename Device >
bool projectors::OnsiteProjector< T, Device >::initialed = false
private

◆ instance

template<typename T , typename Device >
OnsiteProjector<T, Device>* projectors::OnsiteProjector< T, Device >::instance
staticprivate

◆ irow2iproj_

template<typename T , typename Device >
std::vector<int> projectors::OnsiteProjector< T, Device >::irow2iproj_
private

◆ irow2it_

template<typename T , typename Device >
std::vector<int> projectors::OnsiteProjector< T, Device >::irow2it_
private

◆ irow2m_

template<typename T , typename Device >
std::vector<int> projectors::OnsiteProjector< T, Device >::irow2m_
private

◆ it2ia

template<typename T , typename Device >
std::vector<std::vector<int> > projectors::OnsiteProjector< T, Device >::it2ia
private

◆ it2iproj

template<typename T , typename Device >
std::vector<std::vector<int> > projectors::OnsiteProjector< T, Device >::it2iproj
private

◆ itiaiprojm2irow_

template<typename T , typename Device >
std::map<std::tuple<int, int, int, int>, int> projectors::OnsiteProjector< T, Device >::itiaiprojm2irow_
private

◆ lproj

template<typename T , typename Device >
std::vector<int> projectors::OnsiteProjector< T, Device >::lproj
private

◆ nhtol

template<typename T , typename Device >
ModuleBase::matrix projectors::OnsiteProjector< T, Device >::nhtol
private

◆ npw_

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::npw_ = 0
private

◆ npwx_

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::npwx_ = 0
private

◆ ntype

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::ntype = 0
private

◆ projs

template<typename T , typename Device >
std::vector<std::vector<double> > projectors::OnsiteProjector< T, Device >::projs
private

◆ pw_basis_

template<typename T , typename Device >
const ModulePW::PW_Basis_K* projectors::OnsiteProjector< T, Device >::pw_basis_ = nullptr
private

◆ rgrid

template<typename T , typename Device >
std::vector<double> projectors::OnsiteProjector< T, Device >::rgrid
private

◆ rp_

template<typename T , typename Device >
RadialProjection::RadialProjector projectors::OnsiteProjector< T, Device >::rp_
private

◆ sf_

template<typename T , typename Device >
Structure_Factor* projectors::OnsiteProjector< T, Device >::sf_ = nullptr
private

◆ size_becp

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::size_becp = 0
private

◆ size_vproj

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::size_vproj = 0
private

◆ tab

template<typename T , typename Device >
ModuleBase::realArray projectors::OnsiteProjector< T, Device >::tab
private

◆ tab_atomic_

template<typename T , typename Device >
std::complex<double>* projectors::OnsiteProjector< T, Device >::tab_atomic_ = nullptr
private

◆ tot_nproj

template<typename T , typename Device >
int projectors::OnsiteProjector< T, Device >::tot_nproj = 0
private

◆ ucell

template<typename T , typename Device >
const UnitCell* projectors::OnsiteProjector< T, Device >::ucell = nullptr
private

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