ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
onsite_projector.h
Go to the documentation of this file.
1#ifndef MODULEHAMILTPW_ONSITEPROJECTOR_H
2#define MODULEHAMILTPW_ONSITEPROJECTOR_H
8#include "source_psi/psi.h"
10
11#include <string>
12#include <vector>
13#include <complex>
14namespace projectors
15{
16 template <typename T, typename Device>
18 {
19 public:
20
34 void init_proj(const std::string& orbital_dir,
35 const std::vector<std::string>& orb_files,
36 const std::vector<int>& nproj, // for each type, the number of projectors
37 const std::vector<int>& lproj, // angular momentum of projectors within the type (l of zeta function)
38 const std::vector<int>& iproj, // index of projectors within the type (izeta)
39 const std::vector<double>& onsite_r); // for each type, the projector index (across all types)
40
44 void tabulate_atomic(const int ik, const char grad = 'n');
45
47 const int npm,
48 const std::complex<double>* ppsi
49 );
50 void read_abacus_orb(std::ifstream& ifs,
51 std::string& elem,
52 double& ecut,
53 int& nr,
54 double& dr,
55 std::vector<int>& nzeta,
56 std::vector<std::vector<double>>& radials,
57 const int rank = 0);
60 void init(const std::string& orbital_dir,
61 const UnitCell* ucell_in,
62 const psi::Psi<std::complex<T>, Device>& psi,
63 const K_Vectors& kv,
64 const ModulePW::PW_Basis_K& pw_basis, // level1: the plane wave basis, need ik
65 Structure_Factor& sf, // level2: the structure factor calculator
66 const double onsite_radius,
67 const int nq,
68 const double dq,
69 const ModuleBase::matrix& wg,
70 const ModuleBase::matrix& ekb);
71
73 void cal_occupations(const psi::Psi<std::complex<T>, Device>* psi, const ModuleBase::matrix& wg_in);
74
75 int get_size_becp() const { return size_becp; }
76 std::complex<double>* get_becp() const { return becp; }
77 std::complex<double>* get_h_becp() const { return h_becp; }
78 std::complex<double>* get_tab_atomic() const { return tab_atomic_; }
79 int get_tot_nproj() const { return tot_nproj; }
80 int get_npw() const { return npw_; }
81 int get_npwx() const { return npwx_; }
82 const int& get_nh(int iat) const { return iat_nh[iat]; }
83
85
86 private:
89
90 Device* ctx = {};
91 base_device::DEVICE_CPU* cpu_ctx = {};
94
96
97 std::complex<double>* tab_atomic_ = nullptr;
98 std::complex<double>* becp = nullptr; // nbands * nkb
99 // save becp in CPU memory, only used when Device is GPU
100 std::complex<double>* h_becp;
101
102 int size_becp = 0;
103 int size_vproj = 0;
104 int tot_nproj = 0;
105 int npw_ = 0;
106 int npwx_ = 0;
107 int ik_ = 0;
108 std::vector<std::vector<int>> it2ia;
109 std::vector<double> rgrid;
110 std::vector<std::vector<double>> projs;
111 std::vector<std::vector<int>> it2iproj;
112 std::vector<int> lproj;
113 std::vector<int> iat_nh;
114
115 const UnitCell* ucell = nullptr;
116
117 const ModulePW::PW_Basis_K* pw_basis_ = nullptr; // level1: the plane wave basis, need ik
118 Structure_Factor* sf_ = nullptr; // level2: the structure factor calculator
119 int ntype = 0;
120
122 std::vector<int> irow2it_;
123 std::vector<int> irow2iproj_;
124 std::vector<int> irow2m_;
125 std::map<std::tuple<int, int, int, int>, int> itiaiprojm2irow_;
126
129
130 bool initialed = false;
131
134
141 = base_device::memory::synchronize_memory_op<std::complex<T>, Device, base_device::DEVICE_CPU>;
143 = base_device::memory::synchronize_memory_op<std::complex<T>, base_device::DEVICE_CPU, Device>;
144
152
156 };
157}// namespace projectors
158
159#endif // MODULEHAMILTPW_ONSITEPROJECTOR_H
Definition klist.h:13
Definition matrix.h:19
double float array
Definition realarray.h:21
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:57
RadialProjector is for projecting a function who has seperatable radial and angular parts: f(r) = f(|...
Definition radial_proj.h:67
Definition structure_factor.h:11
Definition unitcell.h:16
Nonlocal pseudopotential tools in plane wave basis set. used for calculating force and stress for dif...
Definition onsite_proj_tools.h:31
Definition onsite_projector.h:18
int size_vproj
Definition onsite_projector.h:103
ModuleBase::matrix nhtol
Definition onsite_projector.h:128
void overlap_proj_psi(const int npm, const std::complex< double > *ppsi)
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
int get_npwx() const
Definition onsite_projector.h:81
int get_size_becp() const
Definition onsite_projector.h:75
std::vector< std::vector< int > > it2ia
Definition onsite_projector.h:108
std::complex< double > * h_becp
Definition onsite_projector.h:100
std::map< std::tuple< int, int, int, int >, int > itiaiprojm2irow_
Definition onsite_projector.h:125
static OnsiteProjector< T, Device > * get_instance()
static access to this class instance
const UnitCell * ucell
Definition onsite_projector.h:115
std::complex< double > * get_tab_atomic() const
Definition onsite_projector.h:78
std::complex< double > * get_becp() const
Definition onsite_projector.h:76
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
RadialProjection::RadialProjector rp_
Definition onsite_projector.h:121
void tabulate_atomic(const int ik, const char grad='n')
calculate the onsite projectors in reciprocal space(|G+K>) for all atoms
OnsiteProjector()
Definition onsite_projector.h:87
int npwx_
Definition onsite_projector.h:106
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)
std::complex< double > * get_h_becp() const
Definition onsite_projector.h:77
std::complex< double > * tab_atomic_
Definition onsite_projector.h:97
int get_npw() const
Definition onsite_projector.h:80
std::vector< int > lproj
Definition onsite_projector.h:112
const ModulePW::PW_Basis_K * pw_basis_
Definition onsite_projector.h:117
std::vector< int > iat_nh
Definition onsite_projector.h:113
Device * ctx
Definition onsite_projector.h:90
base_device::DEVICE_CPU * cpu_ctx
Definition onsite_projector.h:91
int tot_nproj
Definition onsite_projector.h:104
std::vector< std::vector< int > > it2iproj
Definition onsite_projector.h:111
int get_tot_nproj() const
Definition onsite_projector.h:79
const int & get_nh(int iat) const
Definition onsite_projector.h:82
std::vector< int > irow2m_
Definition onsite_projector.h:124
std::vector< int > irow2it_
Definition onsite_projector.h:122
Structure_Factor * sf_
Definition onsite_projector.h:118
std::vector< double > rgrid
Definition onsite_projector.h:109
hamilt::Onsite_Proj_tools< T, Device > * get_fs_tools() const
Definition onsite_projector.h:84
int ntype
Definition onsite_projector.h:119
std::complex< double > * becp
Definition onsite_projector.h:98
std::vector< int > irow2iproj_
Definition onsite_projector.h:123
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)
base_device::AbacusDevice_t device
Definition onsite_projector.h:92
hamilt::Onsite_Proj_tools< T, Device > * fs_tools
Definition onsite_projector.h:95
std::vector< std::vector< double > > projs
Definition onsite_projector.h:110
int size_becp
Definition onsite_projector.h:102
int ik_
Definition onsite_projector.h:107
static OnsiteProjector< T, Device > * instance
Definition onsite_projector.h:93
ModuleBase::realArray tab
Definition onsite_projector.h:127
bool initialed
Definition onsite_projector.h:130
int npw_
Definition onsite_projector.h:105
Definition psi.h:37
AbacusDevice_t
Definition types.h:12
Definition onsite_projector.h:15
Definition exx_lip.h:23
Definition math_kernel_op.h:217
Definition memory_op.h:77
Definition memory_op.h:17
Definition memory_op.h:31