Esempio n. 1
0
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;
}
Esempio n. 2
0
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)))
          );
}
Esempio n. 3
0
  static num energy_pbe_ab(const parameter &R,
			   const num &rho,
			   const num &grad)
  {
    using pw91_like_x_internal::prefactor;
    return prefactor(rho)*enhancement(R,rho,grad);
  }
Esempio n. 4
0
  static num enhancement_RPBE(const num &rho,
			      const num &grad)
  {
    using pw91_like_x_internal::S2;
    const parameter mu = 0.2195149727645171;
    return 1 - R_pbe*expm1((-mu/R_pbe)*S2(rho,grad));
  }
Esempio n. 5
0
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;
}
Esempio n. 6
0
  static num enhancement(const parameter &R, 
			 const num &rho,
			 const num &grad)
  {
    using pw91_like_x_internal::S2;
   
#ifdef XCFUN_REF_PBEX_MU
    // ulfek: mu from Daresbury implementation
    const parameter mu = 0.2195149727645171;
#else
    const parameter mu = 0.066725*M_PI*M_PI/3.0;
#endif
    num st2 = S2(rho,grad);
    num t1 = 1 + mu*st2/R;   
    return 1 + R - R/t1; // Intel <= 11.1 miscompiles(?) this line with -fast
  }