ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
psi_initializer_nao.h
Go to the documentation of this file.
1#ifndef PSI_INITIALIZER_NAO_H
2#define PSI_INITIALIZER_NAO_H
5#include "psi_initializer.h"
6
7#include <memory>
8/*
9Psi (planewave based wavefunction) initializer: numerical atomic orbital method
10*/
11template <typename T>
13{
14 private:
15 using Real = typename GetTypeReal<T>::type;
16
17 public:
19 {
20 this->method_ = "nao";
21 };
23
24 virtual void init_psig(T* psig, const int& ik) override;
25
27 virtual void initialize(const Structure_Factor*, //< structure factor
28 const ModulePW::PW_Basis_K*, //< planewave basis
29 const UnitCell*, //< unit cell
30 const K_Vectors*, //< kpoints
31 const int& = 1, //< random seed
32 const pseudopot_cell_vnl* = nullptr, //< nonlocal pseudopotential
33 const int& = 0) override; //< MPI rank
34
35 void read_external_orbs(const std::string* orbital_files, const int& rank);
36 virtual void tabulate() override;
37 std::vector<std::string> external_orbs() const
38 {
39 return orbital_files_;
40 }
41 std::vector<std::vector<int>> nr() const
42 {
43 return nr_;
44 }
45 std::vector<int> nr(const int& itype) const
46 {
47 return nr_[itype];
48 }
49 int nr(const int& itype, const int& ichi) const
50 {
51 return nr_[itype][ichi];
52 }
53 std::vector<std::vector<std::vector<double>>> chi() const
54 {
55 return chi_;
56 }
57 std::vector<std::vector<double>> chi(const int& itype) const
58 {
59 return chi_[itype];
60 }
61 std::vector<double> chi(const int& itype, const int& ichi) const
62 {
63 return chi_[itype][ichi];
64 }
65 double chi(const int& itype, const int& ichi, const int& ir) const
66 {
67 return chi_[itype][ichi][ir];
68 }
69 std::vector<std::vector<std::vector<double>>> rgrid() const
70 {
71 return rgrid_;
72 }
73 std::vector<std::vector<double>> rgrid(const int& itype) const
74 {
75 return rgrid_[itype];
76 }
77 std::vector<double> rgrid(const int& itype, const int& ichi) const
78 {
79 return rgrid_[itype][ichi];
80 }
81 double rgrid(const int& itype, const int& ichi, const int& ir) const
82 {
83 return rgrid_[itype][ichi][ir];
84 }
85
86 protected:
88 void allocate_ao_table();
89 std::vector<std::string> orbital_files_;
91 std::unique_ptr<ModuleBase::CubicSpline> cubspl_;
95 std::vector<std::vector<int>> nr_;
97 std::vector<std::vector<std::vector<double>>> chi_;
99 std::vector<std::vector<std::vector<double>>> rgrid_;
102};
103#endif
Definition klist.h:13
A class that provides spherical Bessel transforms.
Definition spherical_bessel_transformer.h:69
double float array
Definition realarray.h:21
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:57
Definition structure_factor.h:11
Definition unitcell.h:16
Definition VNL_in_pw.h:21
Definition psi_initializer_nao.h:13
std::vector< std::vector< double > > rgrid(const int &itype) const
Definition psi_initializer_nao.h:73
double rgrid(const int &itype, const int &ichi, const int &ir) const
Definition psi_initializer_nao.h:81
virtual void initialize(const Structure_Factor *, const ModulePW::PW_Basis_K *, const UnitCell *, const K_Vectors *, const int &=1, const pseudopot_cell_vnl *=nullptr, const int &=0) override
initialize the psi_initializer with external data and methods
Definition psi_initializer_nao.cpp:150
std::vector< std::vector< int > > nr_
number of realspace grids per type per chi, [itype][ichi]
Definition psi_initializer_nao.h:95
void allocate_ao_table()
allocate memory for overlap table
Definition psi_initializer_nao.cpp:123
std::unique_ptr< ModuleBase::CubicSpline > cubspl_
cubic spline for interpolation
Definition psi_initializer_nao.h:91
std::vector< double > rgrid(const int &itype, const int &ichi) const
Definition psi_initializer_nao.h:77
std::vector< std::vector< int > > nr() const
Definition psi_initializer_nao.h:41
~psi_initializer_nao()
Definition psi_initializer_nao.h:22
psi_initializer_nao()
Definition psi_initializer_nao.h:18
std::vector< int > nr(const int &itype) const
Definition psi_initializer_nao.h:45
virtual void init_psig(T *psig, const int &ik) override
CENTRAL FUNCTION: init psi in pw basis.
Definition psi_initializer_nao.cpp:253
ModuleBase::realArray projmap_
radial map, [itype][l][izeta] -> i
Definition psi_initializer_nao.h:93
typename GetTypeReal< T >::type Real
Definition psi_initializer_nao.h:15
std::vector< double > chi(const int &itype, const int &ichi) const
Definition psi_initializer_nao.h:61
virtual void tabulate() override
CENTRAL FUNCTION: calculate the interpolate table if needed.
Definition psi_initializer_nao.cpp:198
std::vector< std::vector< std::vector< double > > > chi_
data of numerical atomic orbital per type per chi per position, [itype][ichi][ir]
Definition psi_initializer_nao.h:97
int nr(const int &itype, const int &ichi) const
Definition psi_initializer_nao.h:49
ModuleBase::SphericalBesselTransformer sbt
useful for atomic-like methods
Definition psi_initializer_nao.h:101
std::vector< std::vector< double > > chi(const int &itype) const
Definition psi_initializer_nao.h:57
void read_external_orbs(const std::string *orbital_files, const int &rank)
Definition psi_initializer_nao.cpp:46
std::vector< std::string > external_orbs() const
Definition psi_initializer_nao.h:37
std::vector< std::vector< std::vector< double > > > rgrid() const
Definition psi_initializer_nao.h:69
std::vector< std::vector< std::vector< double > > > chi() const
Definition psi_initializer_nao.h:53
std::vector< std::string > orbital_files_
Definition psi_initializer_nao.h:89
double chi(const int &itype, const int &ichi, const int &ir) const
Definition psi_initializer_nao.h:65
std::vector< std::vector< std::vector< double > > > rgrid_
r of numerical atomic orbital per type per chi per position, [itype][ichi][ir]
Definition psi_initializer_nao.h:99
Definition psi_initializer.h:53
std::string method_
method name
Definition psi_initializer.h:136
#define T
Definition exp.cpp:237
T type
Definition macros.h:8