Skip to content

Commit 32dc099

Browse files
Begin EXX KPAR
1 parent 47614dc commit 32dc099

File tree

3 files changed

+53
-27
lines changed

3 files changed

+53
-27
lines changed

source/source_pw/module_pwdft/operator_pw/exx_pw_pot.cpp

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,10 @@ void get_exx_potential(const K_Vectors* kv,
3232

3333
// calculate Fock pot
3434
auto param_fock = GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Fock];
35-
for (auto param: param_fock)
35+
for (int i = 0; i < param_fock.size(); i++)
3636
{
37-
double exx_div = exx_divergence(Conv_Coulomb_Pot_K::Coulomb_Type::Fock,
38-
0.0,
39-
kv,
40-
wfcpw,
41-
rhopw_dev,
42-
tpiba,
43-
gamma_extrapolation,
44-
ucell_omega);
37+
auto param = param_fock[i];
38+
double exx_div = OperatorEXXPW<std::complex<Real>, Device>::fock_div[i];
4539
double alpha = std::stod(param["alpha"]);
4640
const ModuleBase::Vector3<double> k_c = wfcpw->kvec_c[ik];
4741
const ModuleBase::Vector3<double> k_d = wfcpw->kvec_d[ik];
@@ -98,20 +92,21 @@ void get_exx_potential(const K_Vectors* kv,
9892

9993
// calculate erfc pot
10094
auto param_erfc = GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Erfc];
101-
for (auto param: param_erfc)
95+
for (int i = 0; i < param_erfc.size(); i++)
10296
{
97+
auto param = param_erfc[i];
10398
double erfc_omega = std::stod(param["omega"]);
10499
double erfc_omega2 = erfc_omega * erfc_omega;
105100
double alpha = std::stod(param["alpha"]);
101+
// double exx_div = OperatorEXXPW<std::complex<Real>, Device>::erfc_div[i];
106102
double exx_div = exx_divergence(Conv_Coulomb_Pot_K::Coulomb_Type::Erfc,
107-
erfc_omega,
108-
kv,
109-
wfcpw,
110-
rhopw_dev,
111-
tpiba,
112-
gamma_extrapolation,
113-
ucell_omega);
114-
103+
erfc_omega,
104+
kv,
105+
wfcpw,
106+
rhopw_dev,
107+
tpiba,
108+
gamma_extrapolation,
109+
ucell_omega);
115110
const ModuleBase::Vector3<double> k_c = wfcpw->kvec_c[ik];
116111
const ModuleBase::Vector3<double> k_d = wfcpw->kvec_d[ik];
117112
const ModuleBase::Vector3<double> q_c = wfcpw->kvec_c[iq];
@@ -212,14 +207,14 @@ void get_exx_stress_potential(const K_Vectors* kv,
212207
auto param_fock = GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Fock];
213208
for (auto param: param_fock)
214209
{
215-
double exx_div = exx_divergence(Conv_Coulomb_Pot_K::Coulomb_Type::Fock,
216-
0.0,
217-
kv,
218-
wfcpw,
219-
rhopw_dev,
220-
tpiba,
221-
gamma_extrapolation,
222-
ucell_omega);
210+
// double exx_div = exx_divergence(Conv_Coulomb_Pot_K::Coulomb_Type::Fock,
211+
// 0.0,
212+
// kv,
213+
// wfcpw,
214+
// rhopw_dev,
215+
// tpiba,
216+
// gamma_extrapolation,
217+
// ucell_omega);
223218
double alpha = std::stod(param["alpha"]);
224219

225220
const ModuleBase::Vector3<double> k_c = wfcpw->kvec_c[ik];

source/source_pw/module_pwdft/operator_pw/op_exx_pw.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323

2424
namespace hamilt
2525
{
26+
template <typename T, typename Device>
27+
std::vector<typename GetTypeReal<T>::type> OperatorEXXPW<T, Device>::fock_div = {};
28+
29+
template <typename T, typename Device>
30+
std::vector<typename GetTypeReal<T>::type> OperatorEXXPW<T, Device>::erfc_div = {};
2631

2732
template <typename T, typename Device>
2833
OperatorEXXPW<T, Device>::OperatorEXXPW(const int* isk_in,
@@ -83,6 +88,31 @@ OperatorEXXPW<T, Device>::OperatorEXXPW(const int* isk_in,
8388
rhopw_dev->setuptransform();
8489
rhopw_dev->collect_local_pw();
8590

91+
auto param_fock = GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Fock];
92+
for (auto param: param_fock)
93+
{
94+
fock_div.push_back(exx_divergence(Conv_Coulomb_Pot_K::Coulomb_Type::Fock,
95+
0.0,
96+
kv,
97+
wfcpw,
98+
rhopw_dev,
99+
tpiba,
100+
gamma_extrapolation,
101+
ucell->omega));
102+
}
103+
auto param_erfc = GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Erfc];
104+
for (auto param: param_erfc)
105+
{
106+
erfc_div.push_back(exx_divergence(Conv_Coulomb_Pot_K::Coulomb_Type::Erfc,
107+
std::stod(param["omega"]),
108+
kv,
109+
wfcpw,
110+
rhopw_dev,
111+
tpiba,
112+
gamma_extrapolation,
113+
ucell->omega));
114+
}
115+
86116
} // end of constructor
87117

88118
template <typename T, typename Device>

source/source_pw/module_pwdft/operator_pw/op_exx_pw.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,14 @@ class OperatorEXXPW : public OperatorPW<T, Device>
5555

5656
bool first_iter = true;
5757

58+
static std::vector<Real> fock_div, erfc_div;
59+
5860
private:
5961
const int* isk = nullptr;
6062
const ModulePW::PW_Basis_K* wfcpw = nullptr;
6163
const ModulePW::PW_Basis* rhopw = nullptr;
6264
ModulePW::PW_Basis* rhopw_dev = nullptr; // for device
6365
const UnitCell *ucell = nullptr;
64-
// Real exx_div = 0;
6566
Real tpiba = 0;
6667

6768
std::vector<int> get_q_points(const int ik) const;

0 commit comments

Comments
 (0)