Skip to content

Commit 44c02d5

Browse files
authored
Merge pull request #170 from Srlive1201/develop
add Sphere truction of coulomb in HF/PBE0
2 parents cb47661 + 34ffbbe commit 44c02d5

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

source/src_ri/conv_coulomb_pot_k.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "conv_coulomb_pot_k.h"
22
#include "../module_base/constants.h"
33
#include "../module_orbital/ORB_atomic_lm.h"
4-
4+
#include "../src_pw/global.h"
55
std::vector<double> Conv_Coulomb_Pot_K::cal_psi_ccp( const std::vector<double> & psif )
66
{
77
std::vector<double> psik2_ccp(psif.size());
@@ -10,6 +10,21 @@ std::vector<double> Conv_Coulomb_Pot_K::cal_psi_ccp( const std::vector<double> &
1010
return psik2_ccp;
1111
}
1212

13+
// rongshi add 2022-07-27
14+
// Sphere truction -- Spencer
15+
std::vector<double> Conv_Coulomb_Pot_K::cal_psi_hf(const std::vector<double> &psif,
16+
const std::vector<double> &k_radial,
17+
const double omega = 0)
18+
{
19+
double Rc = pow(0.75 * GlobalC::kv.nks * GlobalC::ucell.omega / (ModuleBase::PI), 0.3333334);
20+
// cout << "hf_Rc: " << Rc << endl;
21+
std::vector<double> psik2_ccp(psif.size());
22+
for (size_t ik = 0; ik < psif.size(); ++ik)
23+
psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik] * (1 - std::cos(k_radial[ik] * Rc));
24+
return psik2_ccp;
25+
}
26+
27+
1328
std::vector<double> Conv_Coulomb_Pot_K::cal_psi_hse(
1429
const std::vector<double> & psif,
1530
const std::vector<double> & k_radial,
@@ -35,6 +50,8 @@ Numerical_Orbital_Lm Conv_Coulomb_Pot_K::cal_orbs_ccp<Numerical_Orbital_Lm>(
3550
{
3651
case Ccp_Type::Ccp:
3752
psik2_ccp = cal_psi_ccp( orbs.get_psif() ); break;
53+
case Ccp_Type::Hf:
54+
psik2_ccp = cal_psi_hf(orbs.get_psif(), orbs.get_k_radial()); break;
3855
case Ccp_Type::Hse:
3956
psik2_ccp = cal_psi_hse( orbs.get_psif(), orbs.get_k_radial(), parameter.at("hse_omega") ); break;
4057
default:

source/src_ri/conv_coulomb_pot_k.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ class Conv_Coulomb_Pot_K
1010
public:
1111

1212
enum class Ccp_Type{ // parameter:
13-
Ccp, //
13+
Ccp, //
14+
Hf, //
1415
Hse}; // "hse_omega"
1516

1617
template<typename T> static T cal_orbs_ccp(
@@ -35,6 +36,10 @@ class Conv_Coulomb_Pot_K
3536
private:
3637

3738
static std::vector<double> cal_psi_ccp( const std::vector<double> & psif );
39+
40+
static std::vector<double> cal_psi_hf(const std::vector<double> &psif,
41+
const std::vector<double> &k_radial,
42+
const double omega);
3843

3944
static std::vector<double> cal_psi_hse(
4045
const std::vector<double> & psif,

source/src_ri/exx_lcao.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,8 +643,9 @@ gettimeofday( &t_start, NULL);
643643
switch(info.hybrid_type)
644644
{
645645
case Exx_Global::Hybrid_Type::HF:
646+
abfs_ccp = Conv_Coulomb_Pot_K::cal_orbs_ccp(this->abfs, Conv_Coulomb_Pot_K::Ccp_Type::Hf, {}, info.ccp_rmesh_times); break;
646647
case Exx_Global::Hybrid_Type::PBE0:
647-
abfs_ccp = Conv_Coulomb_Pot_K::cal_orbs_ccp( this->abfs, Conv_Coulomb_Pot_K::Ccp_Type::Ccp, {}, info.ccp_rmesh_times ); break;
648+
abfs_ccp = Conv_Coulomb_Pot_K::cal_orbs_ccp( this->abfs, Conv_Coulomb_Pot_K::Ccp_Type::Hf, {}, info.ccp_rmesh_times ); break;
648649
case Exx_Global::Hybrid_Type::HSE:
649650
abfs_ccp = Conv_Coulomb_Pot_K::cal_orbs_ccp( this->abfs, Conv_Coulomb_Pot_K::Ccp_Type::Hse, {{"hse_omega",info.hse_omega}}, info.ccp_rmesh_times ); break;
650651
default:

0 commit comments

Comments
 (0)