|
6 | 6 | // 3. xc_spin_libxc, which is the wrapper for LDA functional, spin polarized |
7 | 7 |
|
8 | 8 | #include "xc_functional.h" |
| 9 | +#include "../src_pw/global.h" |
| 10 | +#include "../module_base/global_function.h" |
9 | 11 | #include <stdexcept> |
10 | 12 |
|
11 | 13 | void XC_Functional::xc(const double &rho, double &exc, double &vxc) |
@@ -33,8 +35,13 @@ void XC_Functional::xc(const double &rho, double &exc, double &vxc) |
33 | 35 | // Exchange functionals containing attenuated slater exchange |
34 | 36 | case XC_HYB_GGA_XC_PBEH: |
35 | 37 | // PBE0 |
36 | | - XC_Functional::slater(rs, e, v); |
37 | | - e *= 0.75; v*= 0.75; |
| 38 | + double ex, vx, ec, vc; |
| 39 | + XC_Functional::slater(rs, ex, vx); |
| 40 | + ex *= (1 - GlobalC::exx_global.info.hybrid_alpha); |
| 41 | + vx *= (1 - GlobalC::exx_global.info.hybrid_alpha); |
| 42 | + XC_Functional::pw(rs, 0, ec, vc); |
| 43 | + e = ex + ec; |
| 44 | + v = vx + vc; |
38 | 45 | break; |
39 | 46 |
|
40 | 47 | // Correlation functionals containing PW correlation |
@@ -85,8 +92,15 @@ void XC_Functional::xc_spin(const double &rho, const double &zeta, |
85 | 92 | // Exchange functionals containing attenuated slater exchange |
86 | 93 | case XC_HYB_GGA_XC_PBEH: |
87 | 94 | // PBE0 |
88 | | - XC_Functional::slater_spin(rho, zeta, e, vup, vdw); |
89 | | - e *= 0.75; vup *= 0.75; vdw *=0.75; |
| 95 | + double ex, vupx, vdwx, ec, vupc, vdwc; |
| 96 | + 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); |
| 100 | + XC_Functional::pz_spin(rs, zeta, ec, vupc, vdwc); |
| 101 | + e = ex + ec; |
| 102 | + vup = vupx + vupc; |
| 103 | + vdw = vdwx + vdwc; |
90 | 104 | break; |
91 | 105 |
|
92 | 106 | // Correlation functionals containing PZ correlation |
|
0 commit comments