ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
psi_prepare.h
Go to the documentation of this file.
1#ifndef PSI_PREPARE_H
2#define PSI_PREPARE_H
6
7namespace psi
8{
9
10// This class is used to prepare the wavefunction
11template <typename T, typename Device = base_device::DEVICE_CPU>
13{
14 public:
15 PSIPrepare(const std::string& init_wfc_in,
16 const std::string& ks_solver_in,
17 const std::string& basis_type_in,
18 const int& rank,
19 const UnitCell& ucell,
20 const Structure_Factor& sf,
21 const K_Vectors& kv_in,
25
27 void prepare_init(const int& random_seed);
28
29 //------------------------ only for psi_initializer --------------------
38 void initialize_psi(Psi<std::complex<double>>* psi,
39 psi::Psi<T, Device>* kspw_psi,
41 std::ofstream& ofs_running);
42
47 void initialize_lcao_in_pw(Psi<T>* psi_local, std::ofstream& ofs_running);
48
49 // psi_initializer<T, Device>* psi_initer = nullptr;
50 // change to use smart pointer to manage the memory, and avoid memory leak
51 // while the std::make_unique() is not supported till C++14,
52 // so use the new and std::unique_ptr to manage the memory, but this makes new-delete not symmetric
53 std::unique_ptr<psi_initializer<T>> psi_initer;
54
55 private:
56 // wavefunction initialization type
57 std::string init_wfc = "none";
58
59 // Kohn-Sham solver type
60 std::string ks_solver = "none";
61
62 // basis type
63 std::string basis_type = "none";
64
65 // pw basis
67
68 // parallel kpoints
69 const K_Vectors& kv;
70
71 // unit cell
73
74 // structure factor
76
77 // nonlocal pseudopotential
79
80 Device* ctx = {};
81 base_device::DEVICE_CPU* cpu_ctx = {};
82 const int rank;
83
84 //-------------------------OP--------------------------------------------
87};
88
90void allocate_psi(Psi<std::complex<double>>*& psi, const int& nks, const std::vector<int>& ngk, const int& nbands, const int& npwx);
91
92} // namespace psi
93#endif
Definition klist.h:12
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 hamilt.h:17
Definition vnl_pw.h:21
Base class for PSIPrepare without template parameters.
Definition psi_prepare_base.h:15
Definition psi_prepare.h:13
const K_Vectors & kv
Definition psi_prepare.h:69
void initialize_psi(Psi< std::complex< double > > *psi, psi::Psi< T, Device > *kspw_psi, hamilt::Hamilt< T, Device > *p_hamilt, std::ofstream &ofs_running)
initialize the wavefunction
Definition psi_prepare.cpp:115
void prepare_init(const int &random_seed)
prepare the wavefunction initialization
Definition psi_prepare.cpp:38
std::string basis_type
Definition psi_prepare.h:63
const ModulePW::PW_Basis_K & pw_wfc
Definition psi_prepare.h:66
std::string ks_solver
Definition psi_prepare.h:60
std::string init_wfc
Definition psi_prepare.h:57
const int rank
MPI rank.
Definition psi_prepare.h:82
std::unique_ptr< psi_initializer< T > > psi_initer
Definition psi_prepare.h:53
const pseudopot_cell_vnl & nlpp
Definition psi_prepare.h:78
const UnitCell & ucell
Definition psi_prepare.h:72
~PSIPrepare()
Definition psi_prepare.h:24
base_device::DEVICE_CPU * cpu_ctx
CPU device.
Definition psi_prepare.h:81
Device * ctx
device
Definition psi_prepare.h:80
const Structure_Factor & sf
Definition psi_prepare.h:75
void initialize_lcao_in_pw(Psi< T > *psi_local, std::ofstream &ofs_running)
initialize NAOs in plane wave basis, only for LCAO_IN_PW
Definition psi_prepare.cpp:264
Definition psi.h:37
Definition exx_lip.h:23
void allocate_psi(Psi< std::complex< double > > *&psi, const int &nks, const std::vector< int > &ngk, const int &nbands, const int &npwx)
allocate the wavefunction
Definition psi_prepare.cpp:275