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