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"
11#include "../../source_base/complexarray.h"
12#include "../../source_base/complexmatrix.h"
13#include "../../source_base/global_function.h"
14#include "../../source_base/intarray.h"
15#include "../../source_base/matrix.h"
16#include "../../source_base/vector3.h"
17#include "../../source_basis/module_pw/pw_basis_k.h"
18#include "../../source_cell/klist.h"
19#include "../../source_pw/module_pwdft/structure_factor.h"
20#include "../../source_psi/psi.h"
21//==========================================================
22// CLASS :
23// NAME : Numerical_Basis
24//==========================================================
26{
27 public:
28 // this is not a good idea to construct the instance. Instead, there are many variables that CAN DEFINE the identity of this instance,
29 // these parameters should be provided in the constructor. For future refactor, I list them here:
30 // bessel_nao_*: including ecut, rcut, smearing, sigma, etc.
31 // 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.
34
35 // void start_from_file_k(const int& ik, ModuleBase::ComplexMatrix& psi, const Structure_Factor& sf, const ModulePW::PW_Basis_K* wfcpw, const UnitCell& ucell);
36 void output_overlap(const psi::Psi<std::complex<double>>& psi,
37 const Structure_Factor& sf,
38 const K_Vectors& kv,
39 const ModulePW::PW_Basis_K* wfcpw,
40 const UnitCell& ucell,
41 const int& index);
42
43 private:
44 bool init_label = false;
45
47
48 std::vector<ModuleBase::IntArray> mu_index;
49 static std::vector<ModuleBase::IntArray> init_mu_index(const UnitCell& ucell);
50
51 void numerical_atomic_wfc(const int& ik,
52 const ModulePW::PW_Basis_K* wfcpw,
54 const Structure_Factor& sf,
55 const UnitCell& ucell);
56
58 const int& np,
59 const ModulePW::PW_Basis_K* wfcpw,
60 const psi::Psi<std::complex<double>>& psi,
61 const double derivative_order,
62 const Structure_Factor& sf,
63 const UnitCell& ucell) const;
64
65 // computed in the plane-wave basis
67 const int& np,
68 const double derivative_order,
69 const Structure_Factor& sf,
70 const ModulePW::PW_Basis_K* wfcpw,
71 const UnitCell& ucell) const;
72
74 const psi::Psi<std::complex<double>>& psi,
75 const double derivative_order,
76 const K_Vectors& kv,
77 const double tpiba);
78
79 // gk should be in the atomic unit (Bohr)
81 const int ucell_lmax) const;
82
83 // Ylm does not depend on the magnitude so unit is not important
84 static ModuleBase::matrix cal_ylm(const std::vector<ModuleBase::Vector3<double>> &gk,
85 const int ucell_lmax);
86
87 // gk and the returned gpow are both in the atomic unit (Bohr)
88 static std::vector<double> cal_gpow(const std::vector<ModuleBase::Vector3<double>> &gk,
89 const double derivative_order);
90
91 static void output_info(std::ofstream& ofs, const Bessel_Basis& bessel_basis, const K_Vectors& kv, const UnitCell& ucell);
92
93 static void output_k(std::ofstream& ofs, const K_Vectors& kv);
94
95 static void output_overlap_Q(std::ofstream& ofs,
96 const std::vector<ModuleBase::ComplexArray>& overlap_Q,
97 const K_Vectors& kv);
98
99 static void output_overlap_Sq(const std::string& name,
100 std::ofstream& ofs,
101 const std::vector<ModuleBase::ComplexArray>& overlap_Sq,
102 const K_Vectors& kv);
103
104 static void output_overlap_V(std::ofstream &ofs, const ModuleBase::matrix &overlap_V);
105};
106
107#endif
Definition bessel_basis.h:18
Definition klist.h:12
A basic type of data for complex array.
Definition complexarray.h:15
Definition complexmatrix.h:13
3 elements vector
Definition vector3.h:24
Definition matrix.h:18
double float array
Definition realarray.h:21
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:56
Definition numerical_basis.h:26
static void output_overlap_V(std::ofstream &ofs, const ModuleBase::matrix &overlap_V)
Definition numerical_basis.cpp:851
std::vector< ModuleBase::IntArray > mu_index
Definition numerical_basis.h:48
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:220
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:529
Bessel_Basis bessel_basis
Definition numerical_basis.h:46
static void output_overlap_Q(std::ofstream &ofs, const std::vector< ModuleBase::ComplexArray > &overlap_Q, const K_Vectors &kv)
Definition numerical_basis.cpp:715
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:298
bool init_label
Definition numerical_basis.h:44
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:419
static ModuleBase::matrix cal_ylm(const std::vector< ModuleBase::Vector3< double > > &gk, const int ucell_lmax)
Definition numerical_basis.cpp:464
static std::vector< ModuleBase::IntArray > init_mu_index(const UnitCell &ucell)
Definition numerical_basis.cpp:493
static std::vector< double > cal_gpow(const std::vector< ModuleBase::Vector3< double > > &gk, const double derivative_order)
Definition numerical_basis.cpp:472
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:783
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:59
~Numerical_Basis()
Definition numerical_basis.cpp:21
static void output_k(std::ofstream &ofs, const K_Vectors &kv)
Definition numerical_basis.cpp:635
static void output_info(std::ofstream &ofs, const Bessel_Basis &bessel_basis, const K_Vectors &kv, const UnitCell &ucell)
Definition numerical_basis.cpp:581
ModuleBase::realArray cal_flq(const std::vector< ModuleBase::Vector3< double > > &gk, const int ucell_lmax) const
Definition numerical_basis.cpp:443
Numerical_Basis()
Definition numerical_basis.cpp:18
Definition structure_factor.h:10
Definition unitcell.h:15
Definition psi.h:37
Definition exx_lip.h:23