static num energy (const densvars<num> &d) { using pw91_like_x_internal::chi2; using m0xy_metagga_xc_internal::zet; using m0xy_metagga_xc_internal::m05_c_anti; using m0xy_metagga_xc_internal::ueg_c_anti; using m0xy_metagga_xc_internal::m05_c_para; using m0xy_metagga_xc_internal::ueg_c_para; // parameters for anti-parallel spin contributions const parameter param_c_anti[5] = { 1.000000e+00, 1.092970e+00, -3.791710e+00, 2.828100e+00, -1.058909e+01 }; // parameters for parallel spin contributions const parameter param_c_para[5] = { 1.000000e+00, -3.054300e+00, 7.618540e+00, 1.476650e+00, -1.192365e+01 }; num chi_a2 = chi2(d.a, d.gaa); num chi_b2 = chi2(d.b, d.gbb); num zet_a = zet(d.a, d.taua); num zet_b = zet(d.b, d.taub); num Dsigma_a = m0xy_metagga_xc_internal::Dsigma(d.a,d.gaa,d.taua); num Dsigma_b = m0xy_metagga_xc_internal::Dsigma(d.b,d.gbb,d.taub); num Ec_ab = ueg_c_anti(d) * m05_c_anti(param_c_anti,chi_a2,chi_b2); num Ec_aa = ueg_c_para(d.a) * m05_c_para(param_c_para,chi_a2,zet_a,Dsigma_a); num Ec_bb = ueg_c_para(d.b) * m05_c_para(param_c_para,chi_b2,zet_b,Dsigma_b); return Ec_ab + Ec_aa + Ec_bb; }
static num m06hfx(const densvars<num> &d) { using pw91_like_x_internal::chi2; using m0xy_metagga_xc_internal::zet; using m0xy_metagga_xc_internal::fw; using m0xy_metagga_xc_internal::h; using m0xy_metagga_xc_internal::alpha_x; const parameter param_a[12] = { 1.179732e-01, -1.066708e+00, -1.462405e-01, 7.481848e+00, 3.776679e+00, -4.436118e+01, -1.830962e+01, 1.003903e+02, 3.864360e+01, -9.806018e+01, -2.557716e+01, 3.590404e+01 }; const parameter param_d[6] = { -1.179732e-01, -2.500000e-03, -1.180056e-02, 0.000000e+00, 0.000000e+00, 0.000000e+00 }; num chia2 = chi2(d.a, d.gaa); num chib2 = chi2(d.b, d.gbb); return ( ( pbex::energy_pbe_ab(pbex::R_pbe,d.a,d.gaa)*fw(param_a, d.a, d.taua) + lsda_x(d.a)*h(param_d, alpha_x, chia2, zet(d.a, d.taua))) + ( pbex::energy_pbe_ab(pbex::R_pbe,d.b,d.gbb)*fw(param_a, d.b, d.taub) + lsda_x(d.b)*h(param_d, alpha_x, chib2, zet(d.b, d.taub))) ); }
static num m06hfc(const densvars<num> &d) { using pw91_like_x_internal::chi2; using m0xy_metagga_xc_internal::zet; using m0xy_metagga_xc_internal::m06_c_anti; using m0xy_metagga_xc_internal::ueg_c_anti; using m0xy_metagga_xc_internal::m06_c_para; using m0xy_metagga_xc_internal::ueg_c_para; // parameters for anti-parallel spin contributions const parameter param_c_anti[5] = { 1.674634E+00, 5.732017E+01, 5.955416E+01, -2.311007E+02, 1.255199E+02 }; const parameter param_d_anti[6] = { -6.746338E-01, -1.534002E-01, -9.021521E-02, -1.292037E-03, -2.352983E-04, 0.000000e+00 }; // parameters for parallel spin contributions const parameter param_c_para[5] = { 1.023254E-01, -2.453783E+00, 2.913180E+01, -3.494358E+01, 2.315955E+01 }; const parameter param_d_para[6] = { 8.976746E-01, -2.345830E-01, 2.368173E-01, -9.913890E-04, -1.146165E-02, 0.000000e+00 }; num chi_a2 = chi2(d.a, d.gaa); num chi_b2 = chi2(d.b, d.gbb); num zet_a = zet(d.a, d.taua); num zet_b = zet(d.b, d.taub); num Dsigma_a = m0xy_metagga_xc_internal::Dsigma(d.a,d.gaa,d.taua); num Dsigma_b = m0xy_metagga_xc_internal::Dsigma(d.b,d.gbb,d.taub); //About six correct digits in Ec_ab num Ec_ab = ueg_c_anti(d) * m06_c_anti(param_c_anti, param_d_anti, chi_a2, zet_a, chi_b2,zet_b); num Ec_aa = ueg_c_para(d.a) * m06_c_para(param_c_para, param_d_para, chi_a2, zet_a, Dsigma_a); num Ec_bb = ueg_c_para(d.b) * m06_c_para(param_c_para, param_d_para, chi_b2, zet_b, Dsigma_b); return Ec_ab + Ec_aa + Ec_bb; }