ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
numerical_basis.h
Go to the documentation of this file.
1//==========================================================
2// AUTHOR : mohan
3// DATE : 2009-4-2
4// Last Modify: 2009-08-28
5//==========================================================
6#ifndef NUMERICAL_BASIS_H
7#define NUMERICAL_BASIS_H
8#include <vector>
9
10#include "bessel_basis.h"
16#include "source_base/matrix.h"
17#include "source_base/vector3.h"
19#include "source_cell/klist.h"
21#include "source_psi/psi.h"
22//==========================================================
23// CLASS :
24// NAME : Numerical_Basis
25//==========================================================
27{
28 public:
29 // this is not a good idea to construct the instance. Instead, there are many variables that CAN DEFINE the identity of this instance,
30 // these parameters should be provided in the constructor. For future refactor, I list them here:
31 // bessel_nao_*: including ecut, rcut, smearing, sigma, etc.
32 // a file name: for the function start_from_file_k, if starts from file, can construct a different instance, instead of using the same instance.
35
36 // void start_from_file_k(const int& ik, ModuleBase::ComplexMatrix& psi, const Structure_Factor& sf, const ModulePW::PW_Basis_K* wfcpw, const UnitCell& ucell);
37 void output_overlap(const psi::Psi<std::complex<double>>& psi,
38 const Structure_Factor& sf,
39 const K_Vectors& kv,
40 const ModulePW::PW_Basis_K* wfcpw,
41 const UnitCell& ucell,
42 const int& index);
43
44 private:
45 bool init_label = false;
46
48
49 std::vector<ModuleBase::IntArray> mu_index;
50 static std::vector<ModuleBase::IntArray> init_mu_index(const UnitCell& ucell);
51
52 void numerical_atomic_wfc(const int& ik,
53 const ModulePW::PW_Basis_K* wfcpw,
55 const Structure_Factor& sf,
56 const UnitCell& ucell);
57
59 const int& np,
60 const ModulePW::PW_Basis_K* wfcpw,
61 const psi::Psi<std::complex<double>>& psi,
62 const double derivative_order,
63 const Structure_Factor& sf,
64 const UnitCell& ucell) const;
65
66 // computed in the plane-wave basis
68 const int& np,
69 const double derivative_order,
70 const Structure_Factor& sf,
71 const ModulePW::PW_Basis_K* wfcpw,
72 const UnitCell& ucell) const;
73
75 const psi::Psi<std::complex<double>>& psi,
76 const double derivative_order,
77 const K_Vectors& kv,
78 const double tpiba);
79
80 // gk should be in the atomic unit (Bohr)
82 const int ucell_lmax) const;
83
84 // Ylm does not depend on the magnitude so unit is not important
85 static ModuleBase::matrix cal_ylm(const std::vector<ModuleBase::Vector3<double>> &gk,
86 const int ucell_lmax);
87
88 // gk and the returned gpow are both in the atomic unit (Bohr)
89 static std::vector<double> cal_gpow(const std::vector<ModuleBase::Vector3<double>> &gk,
90 const double derivative_order);
91
92 static void output_info(std::ofstream& ofs, const Bessel_Basis& bessel_basis, const K_Vectors& kv, const UnitCell& ucell);
93
94 static void output_k(std::ofstream& ofs, const K_Vectors& kv);
95
96 static void output_overlap_Q(std::ofstream& ofs,
97 const std::vector<ModuleBase::ComplexArray>& overlap_Q,
98 const K_Vectors& kv);
99
100 static void output_overlap_Sq(const std::string& name,
101 std::ofstream& ofs,
102 const std::vector<ModuleBase::ComplexArray>& overlap_Sq,
103 const K_Vectors& kv);
104
105 static void output_overlap_V(std::ofstream &ofs, const ModuleBase::matrix &overlap_V);
106};
107
108#endif
Definition bessel_basis.h:19
Definition klist.h:13
A basic type of data for complex array.
Definition complexarray.h:15
Definition complexmatrix.h:14
3 elements vector
Definition vector3.h:22
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
Definition numerical_basis.h:27
static void output_overlap_V(std::ofstream &ofs, const ModuleBase::matrix &overlap_V)
Definition numerical_basis.cpp:854
std::vector< ModuleBase::IntArray > mu_index
Definition numerical_basis.h:49
ModuleBase::ComplexArray cal_overlap_Q(const int &ik, const int &np, const ModulePW::PW_Basis_K *wfcpw, const psi::Psi< std::complex< double > > &psi, const double derivative_order, const Structure_Factor &sf, const UnitCell &ucell) const
Definition numerical_basis.cpp:223
void numerical_atomic_wfc(const int &ik, const ModulePW::PW_Basis_K *wfcpw, ModuleBase::ComplexMatrix &psi, const Structure_Factor &sf, const UnitCell &ucell)
Definition numerical_basis.cpp:532
Bessel_Basis bessel_basis
Definition numerical_basis.h:47
static void output_overlap_Q(std::ofstream &ofs, const std::vector< ModuleBase::ComplexArray > &overlap_Q, const K_Vectors &kv)
Definition numerical_basis.cpp:718
ModuleBase::ComplexArray cal_overlap_Sq(const int &ik, const int &np, const double derivative_order, const Structure_Factor &sf, const ModulePW::PW_Basis_K *wfcpw, const UnitCell &ucell) const
Definition numerical_basis.cpp:301
bool init_label
Definition numerical_basis.h:45
static ModuleBase::matrix cal_overlap_V(const ModulePW::PW_Basis_K *wfcpw, const psi::Psi< std::complex< double > > &psi, const double derivative_order, const K_Vectors &kv, const double tpiba)
Definition numerical_basis.cpp:422
static ModuleBase::matrix cal_ylm(const std::vector< ModuleBase::Vector3< double > > &gk, const int ucell_lmax)
Definition numerical_basis.cpp:467
static std::vector< ModuleBase::IntArray > init_mu_index(const UnitCell &ucell)
Definition numerical_basis.cpp:496
static std::vector< double > cal_gpow(const std::vector< ModuleBase::Vector3< double > > &gk, const double derivative_order)
Definition numerical_basis.cpp:475
static void output_overlap_Sq(const std::string &name, std::ofstream &ofs, const std::vector< ModuleBase::ComplexArray > &overlap_Sq, const K_Vectors &kv)
Definition numerical_basis.cpp:786
void output_overlap(const psi::Psi< std::complex< double > > &psi, const Structure_Factor &sf, const K_Vectors &kv, const ModulePW::PW_Basis_K *wfcpw, const UnitCell &ucell, const int &index)
Definition numerical_basis.cpp:61
~Numerical_Basis()
Definition numerical_basis.cpp:23
static void output_k(std::ofstream &ofs, const K_Vectors &kv)
Definition numerical_basis.cpp:638
static void output_info(std::ofstream &ofs, const Bessel_Basis &bessel_basis, const K_Vectors &kv, const UnitCell &ucell)
Definition numerical_basis.cpp:584
ModuleBase::realArray cal_flq(const std::vector< ModuleBase::Vector3< double > > &gk, const int ucell_lmax) const
Definition numerical_basis.cpp:446
Numerical_Basis()
Definition numerical_basis.cpp:20
Definition structure_factor.h:11
Definition unitcell.h:16
Definition psi.h:37
Definition exx_lip.h:23