ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
sto_elecond.h
Go to the documentation of this file.
1#ifndef STOELECOND_H
2#define STOELECOND_H
3
8
9template <typename FPTYPE, typename Device>
10class Sto_EleCond : protected EleCond<FPTYPE, Device>
11{
12 public:
13#ifdef __ENABLE_FLOAT_FFTW
14 using lowTYPE = float; // Here we use float to accelerate the calculation, which is enough for the accuracy
15#else
16 using lowTYPE = double;
17#endif
18 using lcomplex = std::complex<lowTYPE>;
19#ifdef __DSP
20 using resmem_lcomplex_op = base_device::memory::resize_memory_op_mt<std::complex<lowTYPE>, Device>;
21 using delmem_lcomplex_op = base_device::memory::delete_memory_op_mt<std::complex<lowTYPE>, Device>;
22#else
25#endif
29 public:
30 Sto_EleCond(UnitCell* p_ucell_in,
31 K_Vectors* p_kv_in,
32 elecstate::ElecState* p_elec_in,
33 ModulePW::PW_Basis_K* p_wfcpw_in,
34 psi::Psi<std::complex<FPTYPE>, Device>* p_psi_in,
35 pseudopot_cell_vnl* p_ppcell_in,
36 hamilt::Hamilt<std::complex<FPTYPE>, Device>* p_hamilt_in,
38 Stochastic_WF<std::complex<FPTYPE>, Device>* p_stowf_in);
40 delete hamilt_sto_;
41 };
54 void decide_nche(const FPTYPE dt, const FPTYPE cond_thr, const int& fd_nche, FPTYPE try_emin, FPTYPE try_emax);
67 void sKG(const int& smear_type,
68 const double& fwhmin,
69 const double& wcut,
70 const double& dw_in,
71 const double& dt_in,
72 const bool& nonlocal,
73 const int& npart_sto);
74
75 protected:
76 int nbands_ks = 0;
77 int nbands_sto = 0;
78 int cond_nche = 0;
79 int fd_nche = 0;
80 int cond_dtbatch = 0;
84
89 protected:
94 void cal_jmatrix(hamilt::HamiltSdftPW<std::complex<lowTYPE>, Device>* hamilt,
95 const psi::Psi<std::complex<lowTYPE>, Device>& kspsi_all,
96 const psi::Psi<std::complex<lowTYPE>, Device>& vkspsi,
97 const double* en,
98 const double* en_all,
99 std::complex<FPTYPE>* leftfact,
100 std::complex<FPTYPE>* rightfact,
101 psi::Psi<std::complex<lowTYPE>, Device>& leftchi,
102 psi::Psi<std::complex<lowTYPE>, Device>& rightchi,
103 psi::Psi<std::complex<lowTYPE>, Device>& left_hchi,
104 psi::Psi<std::complex<lowTYPE>, Device>& right_hchi,
105 psi::Psi<std::complex<lowTYPE>, Device>& batch_vchi,
106 psi::Psi<std::complex<lowTYPE>, Device>& batch_vhchi,
107#ifdef __MPI
108 psi::Psi<std::complex<lowTYPE>, Device>& chi_all,
109 psi::Psi<std::complex<lowTYPE>, Device>& hchi_all,
110 void* gatherinfo_ks,
111 void* gatherinfo_sto,
112#endif
113 const int& bsize_psi,
114 std::complex<lowTYPE>* j1,
115 std::complex<lowTYPE>* j2,
116 std::complex<lowTYPE>* tmpj,
118 const int& ik,
119 const std::complex<lowTYPE>& factor,
120 const int bandinfo[6]);
121};
122#endif // STOELECOND_H
Definition elecond.h:14
Definition klist.h:12
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:56
Definition sto_che.h:9
Definition sto_elecond.h:11
Stochastic_WF< std::complex< FPTYPE >, Device > * p_stowf
pointer to the stochastic wavefunctions
Definition sto_elecond.h:82
Sto_Func< FPTYPE > stofunc
functions
Definition sto_elecond.h:83
hamilt::Hamilt< std::complex< FPTYPE >, Device > * p_hamilt
pointer to the Hamiltonian
Definition sto_elecond.h:81
void decide_nche(const FPTYPE dt, const FPTYPE cond_thr, const int &fd_nche, FPTYPE try_emin, FPTYPE try_emax)
Set the N order of Chebyshev expansion for conductivities It will change class member : fd_nche,...
Definition sto_elecond.cpp:47
~Sto_EleCond()
Definition sto_elecond.h:39
hamilt::HamiltSdftPW< std::complex< lowTYPE >, Device > * hamilt_sto_
pointer to the Hamiltonian for sDFT
Definition sto_elecond.h:86
void sKG(const int &smear_type, const double &fwhmin, const double &wcut, const double &dw_in, const double &dt_in, const bool &nonlocal, const int &npart_sto)
calculate Stochastic Kubo-Greenwood
Definition sto_elecond.cpp:478
hamilt::HamiltSdftPW< std::complex< FPTYPE >, Device > * p_hamilt_sto
pointer to the Hamiltonian for sDFT
Definition sto_elecond.h:85
void cal_jmatrix(hamilt::HamiltSdftPW< std::complex< lowTYPE >, Device > *hamilt, const psi::Psi< std::complex< lowTYPE >, Device > &kspsi_all, const psi::Psi< std::complex< lowTYPE >, Device > &vkspsi, const double *en, const double *en_all, std::complex< FPTYPE > *leftfact, std::complex< FPTYPE > *rightfact, psi::Psi< std::complex< lowTYPE >, Device > &leftchi, psi::Psi< std::complex< lowTYPE >, Device > &rightchi, psi::Psi< std::complex< lowTYPE >, Device > &left_hchi, psi::Psi< std::complex< lowTYPE >, Device > &right_hchi, psi::Psi< std::complex< lowTYPE >, Device > &batch_vchi, psi::Psi< std::complex< lowTYPE >, Device > &batch_vhchi, psi::Psi< std::complex< lowTYPE >, Device > &chi_all, psi::Psi< std::complex< lowTYPE >, Device > &hchi_all, void *gatherinfo_ks, void *gatherinfo_sto, const int &bsize_psi, std::complex< lowTYPE > *j1, std::complex< lowTYPE > *j2, std::complex< lowTYPE > *tmpj, hamilt::Velocity< lowTYPE, Device > &velop, const int &ik, const std::complex< lowTYPE > &factor, const int bandinfo[6])
calculate Jmatrix <leftv|J|rightv>
Definition sto_elecond.cpp:148
lowTYPE low_emax_
Emax of the Hamiltonian for sDFT.
Definition sto_elecond.h:88
int nbands_sto
number of stochastic bands
Definition sto_elecond.h:77
double lowTYPE
Definition sto_elecond.h:16
lowTYPE low_emin_
Emin of the Hamiltonian for sDFT.
Definition sto_elecond.h:87
int fd_nche
number of Chebyshev orders for Fermi-Dirac function
Definition sto_elecond.h:79
int cond_nche
number of Chebyshev orders for conductivities
Definition sto_elecond.h:78
std::complex< lowTYPE > lcomplex
Definition sto_elecond.h:18
int nbands_ks
number of KS bands
Definition sto_elecond.h:76
int cond_dtbatch
number of time steps in a batch
Definition sto_elecond.h:80
Definition sto_func.h:6
Definition sto_wf.h:13
Definition unitcell.h:15
Definition elecstate.h:15
Definition hamilt_sdft_pw.h:11
Definition hamilt.h:17
Definition op_pw_vel.h:13
Definition vnl_pw.h:21
Definition psi.h:37
#define __MPI
Definition hamilt.h:13
base device SOURCES math_hegvd_test cpp endif() if(ENABLE_GOOGLEBENCH) AddTest(TARGET PERF_MODULE_HSOLVER_KERNELS LIBS parameter $
Definition CMakeLists.txt:10
Definition memory_op.h:99
Definition memory_op.h:115
Definition memory_op.h:17