Skip to content

Commit 050d9a0

Browse files
committed
remove the dependence of exx_global in xc_functional_wrapper_xc.cpp
1 parent 5303b46 commit 050d9a0

File tree

5 files changed

+25
-16
lines changed

5 files changed

+25
-16
lines changed

source/input_conv.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ void Input_Conv::Convert(void)
362362
if (GlobalC::exx_global.info.hybrid_type != Exx_Global::Hybrid_Type::No)
363363
{
364364
GlobalC::exx_global.info.hybrid_alpha = INPUT.exx_hybrid_alpha;
365+
XC_Functional::get_hybrid_alpha(INPUT.exx_hybrid_alpha);
365366
GlobalC::exx_global.info.hse_omega = INPUT.exx_hse_omega;
366367
GlobalC::exx_global.info.separate_loop = INPUT.exx_separate_loop;
367368
GlobalC::exx_global.info.hybrid_step = INPUT.exx_hybrid_step;

source/module_xc/xc_functional.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ XC_Functional::~XC_Functional(){}
99
std::vector<int> XC_Functional::func_id(1);
1010
int XC_Functional::func_type = 0;
1111
bool XC_Functional::use_libxc = true;
12+
double XC_Functional::hybrid_alpha = 0.25;
13+
14+
void XC_Functional::get_hybrid_alpha(const double alpha_in)
15+
{
16+
hybrid_alpha = alpha_in;
17+
}
1218

1319
int XC_Functional::get_func_type()
1420
{

source/module_xc/xc_functional.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class XC_Functional
8383

8484
static int get_func_type();
8585
static void set_xc_type(const std::string xc_func_in);
86+
static void get_hybrid_alpha(const double alpha_in);
8687
#ifdef USE_LIBXC
8788
static void set_xc_type_libxc(const std::string xc_func_in);
8889
static std::vector<xc_func_type> init_func(const int xc_polarized);
@@ -94,6 +95,9 @@ class XC_Functional
9495
static int func_type; //0:none, 1:lda, 2:gga, 3:mgga, 4:hybrid
9596
static bool use_libxc;
9697

98+
//exx_hybrid_alpha for mixing exx in hybrid functional:
99+
static double hybrid_alpha;
100+
97101
//-------------------
98102
// xc_functional_wrapper_xc.cpp
99103
//-------------------

source/module_xc/xc_functional_wrapper_gcxc.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ void XC_Functional::gcxc(const double &rho, const double &grho, double &sxc,
8080
case XC_HYB_GGA_XC_PBEH: //PBE0
8181
double sx, v1x, v2x, sc, v1c, v2c;
8282
XC_Functional::pbex(rho, grho, 0, sx, v1x, v2x);
83-
sx *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
84-
v1x *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
85-
v2x *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
83+
sx *= (1.0 - XC_Functional::hybrid_alpha);
84+
v1x *= (1.0 - XC_Functional::hybrid_alpha);
85+
v2x *= (1.0 - XC_Functional::hybrid_alpha);
8686
XC_Functional::pbec(rho, grho, 0, sc, v1c, v2c);
8787
s = sx + sc;
8888
v1 = v1x + v1c;
@@ -181,16 +181,16 @@ void XC_Functional::gcx_spin(double rhoup, double rhodw, double grhoup2, double
181181
if (rhoup > small && sqrt(fabs(grhoup2)) > small)
182182
{
183183
XC_Functional::pbex(2.0 * rhoup, 4.0 * grhoup2, 0, sxup, v1xup, v2xup);
184-
sxup *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
185-
v1xup *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
186-
v2xup *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
184+
sxup *= (1.0 - XC_Functional::hybrid_alpha);
185+
v1xup *= (1.0 - XC_Functional::hybrid_alpha);
186+
v2xup *= (1.0 - XC_Functional::hybrid_alpha);
187187
}
188188
if (rhodw > small && sqrt(fabs(grhodw2)) > small)
189189
{
190190
XC_Functional::pbex(2.0 * rhodw, 4.0 * grhodw2, 0, sxdw, v1xdw, v2xdw);
191-
sxdw *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
192-
v1xdw *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
193-
v2xdw *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
191+
sxdw *= (1.0 - XC_Functional::hybrid_alpha);
192+
v1xdw *= (1.0 - XC_Functional::hybrid_alpha);
193+
v2xdw *= (1.0 - XC_Functional::hybrid_alpha);
194194
}
195195
break;
196196
case XC_GGA_X_PBE_SOL: //PBXsol

source/module_xc/xc_functional_wrapper_xc.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
// 3. xc_spin_libxc, which is the wrapper for LDA functional, spin polarized
77

88
#include "xc_functional.h"
9-
#include "../src_pw/global.h"
10-
#include "../module_base/global_function.h"
119
#include <stdexcept>
1210

1311
void XC_Functional::xc(const double &rho, double &exc, double &vxc)
@@ -37,8 +35,8 @@ void XC_Functional::xc(const double &rho, double &exc, double &vxc)
3735
// PBE0
3836
double ex, vx, ec, vc;
3937
XC_Functional::slater(rs, ex, vx);
40-
ex *= (1 - GlobalC::exx_global.info.hybrid_alpha);
41-
vx *= (1 - GlobalC::exx_global.info.hybrid_alpha);
38+
ex *= (1 - XC_Functional::hybrid_alpha);
39+
vx *= (1 - XC_Functional::hybrid_alpha);
4240
XC_Functional::pw(rs, 0, ec, vc);
4341
e = ex + ec;
4442
v = vx + vc;
@@ -94,9 +92,9 @@ void XC_Functional::xc_spin(const double &rho, const double &zeta,
9492
// PBE0
9593
double ex, vupx, vdwx, ec, vupc, vdwc;
9694
XC_Functional::slater_spin(rho, zeta, ex, vupx, vdwx);
97-
ex *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
98-
vupx *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
99-
vdwx *= (1.0 - GlobalC::exx_global.info.hybrid_alpha);
95+
ex *= (1.0 - XC_Functional::hybrid_alpha);
96+
vupx *= (1.0 - XC_Functional::hybrid_alpha);
97+
vdwx *= (1.0 - XC_Functional::hybrid_alpha);
10098
XC_Functional::pw_spin(rs, zeta, ec, vupc, vdwc);
10199
e = ex + ec;
102100
vup = vupx + vupc;

0 commit comments

Comments
 (0)