iucar / rpms / psi4

Forked from rpms/psi4 3 years ago
Clone
Blob Blame History Raw
diff -up psi4-1.3.2/psi4/driver/procrouting/dft/dh_functionals.py.libxc5 psi4-1.3.2/psi4/driver/procrouting/dft/dh_functionals.py
--- psi4-1.3.2/psi4/driver/procrouting/dft/dh_functionals.py.libxc5	2020-05-05 09:06:43.806038249 +0200
+++ psi4-1.3.2/psi4/driver/procrouting/dft/dh_functionals.py	2020-05-05 09:02:26.227501499 +0200
@@ -594,13 +594,13 @@ def get_pwpb95_tweaks():
     c_pw6 = bt / (X_FACTOR_C * X2S * X2S)
     d_pw6 = -(bt - beta) / (X_FACTOR_C * X2S * X2S)
     f_pw6 = 1.0e-6 / (X_FACTOR_C * X2S**expo_pw6)
-    return ([a_pw6, b_pw6, c_pw6, d_pw6, f_pw6, alpha_pw6, expo_pw6])
+    return ([bt, alpha_pw6, expo_pw6])
 
 
 funcs.append({
     "name": "PWPB95",
     "x_functionals": {
-        "GGA_X_PW91": {
+        "GGA_X_MPW91": {  # only mpw91, not pw91, is tweakable
             "tweak": get_pwpb95_tweaks(),
             "alpha": 0.50
         }
@@ -626,7 +626,7 @@ funcs.append({
     "name": "PTPSS",
     "x_functionals": {
         "MGGA_X_TPSS": {
-            "tweak": [0.15, 0.88491, 0.047, 0.872, 0.16952],
+            "tweak": [0.15, 0.88491, 0.047, 0.872, 0.16952, -999., -999.],  # last two are filled in from defaults
             "alpha": 0.50
         }
     },
diff -up psi4-1.3.2/psi4/driver/procrouting/dft/gga_functionals.py.libxc5 psi4-1.3.2/psi4/driver/procrouting/dft/gga_functionals.py
--- psi4-1.3.2/psi4/driver/procrouting/dft/gga_functionals.py.libxc5	2020-05-05 09:06:48.714819789 +0200
+++ psi4-1.3.2/psi4/driver/procrouting/dft/gga_functionals.py	2020-05-05 09:02:26.238501010 +0200
@@ -138,7 +138,7 @@ funcs.append({
         "GGA_X_PW91": {}
     },
     "c_functionals": {
-        "GGA_C_Pw91": {}
+        "GGA_C_PW91": {}
     },
     "citation": '    J.P. Perdew et. al., Phys. Rev. B., 46(11), 6671-6687, 1992\n',
     "description": '    PW91 GGA Exchange-Correlation Functional\n',
@@ -150,7 +150,7 @@ funcs.append({
         "GGA_X_mPW91": {}
     },
     "c_functionals": {
-        "GGA_C_Pw91": {}
+        "GGA_C_PW91": {}
     },
     "citation": '    C. Adamo, V. Barone, J. Chem. Phys., 108, 664, 1998\n',
     "description": '    mPWPW GGA Exchange-Correlation Functional\n',
diff -up psi4-1.3.2/psi4/driver/procrouting/dft/hyb_functionals.py.libxc5 psi4-1.3.2/psi4/driver/procrouting/dft/hyb_functionals.py
--- psi4-1.3.2/psi4/driver/procrouting/dft/hyb_functionals.py.libxc5	2020-05-05 09:06:43.816037804 +0200
+++ psi4-1.3.2/psi4/driver/procrouting/dft/hyb_functionals.py	2020-05-05 09:02:26.240500921 +0200
@@ -174,7 +174,7 @@ funcs.append({
     },
     "c_functionals": {
         "GGA_C_PBE": {
-            "tweak": [0.03]
+            "tweak": [0.03, -999., -999.]  # last two are filled in from defaults
         }
     },
     "dispersion": {
@@ -357,13 +357,13 @@ def get_pw6b95_tweaks():
     c_pw6 = bt / (X_FACTOR_C * X2S * X2S)
     d_pw6 = -(bt - beta) / (X_FACTOR_C * X2S * X2S)
     f_pw6 = 1.0e-6 / (X_FACTOR_C * X2S**expo_pw6)
-    return ([a_pw6, b_pw6, c_pw6, d_pw6, f_pw6, alpha_pw6, expo_pw6])
+    return ([bt, alpha_pw6, expo_pw6])
 
 
 funcs.append({
     "name": "PW6B95",
     "x_functionals": {
-        "GGA_X_PW91": {
+        "GGA_X_MPW91": {
             "tweak": get_pw6b95_tweaks(),
             "alpha": 0.72
         }
diff -up psi4-1.3.2/psi4/src/psi4/libfunctional/LibXCfunctional.cc.libxc5 psi4-1.3.2/psi4/src/psi4/libfunctional/LibXCfunctional.cc
--- psi4-1.3.2/psi4/src/psi4/libfunctional/LibXCfunctional.cc.libxc5	2020-05-05 09:06:43.824037448 +0200
+++ psi4-1.3.2/psi4/src/psi4/libfunctional/LibXCfunctional.cc	2020-05-05 09:02:26.258500120 +0200
@@ -199,11 +199,11 @@ void LibXCFunctional::set_omega(double o
     omega_ = omega;
     user_omega_ = true;
     if (xc_func_name_ == "XC_GGA_X_WPBEH") {
-        xc_gga_x_wpbeh_set_params(xc_functional_.get(), omega);
+        xc_func_set_ext_params(xc_functional_.get(), &omega);
     } else if (xc_func_name_ == "XC_GGA_X_HJS_PBE") {
-        xc_gga_x_hjs_set_params(xc_functional_.get(), omega);
+        xc_func_set_ext_params(xc_functional_.get(), &omega);
     } else if (xc_func_name_ == "XC_HYB_GGA_XC_LRC_WPBEH") {
-        xc_gga_x_wpbeh_set_params(xc_functional_->func_aux[0], omega);
+        xc_func_set_ext_params(xc_functional_->func_aux[0], &omega);
     } else if (xc_func_name_ == "XC_HYB_GGA_XC_WB97X") {
         xc_functional_->cam_omega = omega;
     } else if (xc_func_name_ == "XC_HYB_GGA_XC_WB97") {
@@ -249,100 +249,45 @@ std::map<std::string, double> LibXCFunct
 void LibXCFunctional::set_tweak(std::vector<double> values) {
     bool failed = true;
     size_t vsize = values.size();
-    if (xc_func_name_ == "XC_GGA_X_B86") {
-        if (vsize == 3) {
-            // (XC(func_type) *p, FLOAT beta, FLOAT gamma, FLOAT omega);
-            xc_gga_x_b86_set_params(xc_functional_.get(), values[0], values[1], values[2]);
-            failed = false;
-        }
-    } else if (xc_func_name_ == "XC_GGA_X_B88") {
-        if (vsize == 2) {
-            // (XC(func_type) *p, FLOAT beta, FLOAT gamma);
-            xc_gga_x_b88_set_params(xc_functional_.get(), values[0], values[1]);
-            failed = false;
-        }
-    } else if (xc_func_name_ == "XC_GGA_X_PBE") {
-        if (vsize == 2) {
-            //  (XC(func_type) *p, FLOAT kappa, FLOAT mu);
-            xc_gga_x_pbe_set_params(xc_functional_.get(), values[0], values[1]);
-            failed = false;
-        }
-    } else if (xc_func_name_ == "XC_GGA_C_PBE") {
-        if (vsize == 1) {
-            // (XC(func_type) *p, FLOAT beta);
-            xc_gga_c_pbe_set_params(xc_functional_.get(), values[0]);
-            failed = false;
-        }
-    } else if (xc_func_name_ == "XC_GGA_X_PW91") {
-        if (vsize == 7) {
-            // (XC(func_type) *p, FLOAT a, FLOAT b, FLOAT c, FLOAT d, FLOAT f, FLOAT alpha, FLOAT expo);
-            xc_gga_x_pw91_set_params(xc_functional_.get(), values[0], values[1], values[2], values[3], values[4],
-                                     values[5], values[6]);
-            failed = false;
-        }
-    } else if (xc_func_name_ == "XC_GGA_X_RPBE") {
-        if (vsize == 2) {
-            // (XC(func_type) *p, FLOAT kappa, FLOAT mu);
-            xc_gga_x_rpbe_set_params(xc_functional_.get(), values[0], values[1]);
-            failed = false;
-        }
-    } else if (xc_func_name_ == "XC_GGA_X_OPTX") {
-        if (vsize == 3) {
-            // (XC(func_type) *p, FLOAT a, FLOAT b, FLOAT gamma);
-            xc_gga_x_optx_set_params(xc_functional_.get(), values[0], values[1], values[2]);
-            failed = false;
-        }
-    } else if (xc_func_name_ == "XC_GGA_C_LYP") {
-        if (vsize == 4) {
-            // (XC(func_type) *p, FLOAT A, FLOAT B, FLOAT c, FLOAT d);
-            xc_gga_c_lyp_set_params(xc_functional_.get(), values[0], values[1], values[2], values[3]);
-            failed = false;
-        }
-    } else if ((xc_func_name_ == "XC_HYB_GGA_XC_HSE03") || (xc_func_name_ == "XC_HYB_GGA_XC_HSE06")) {
+    int npars = xc_func_info_get_n_ext_params(xc_functional_.get()->info);
+    if (npars == 0) {
+        throw PSIEXCEPTION(
+            "LibXCfunctional: set_tweak: There are no known tweaks for this functional, please double check "
+            "the functional form and add them if required.");
+    } else if (npars != vsize) {
+        std::ostringstream oss;
+        oss << "got " << vsize << ", expected " << npars;
+        throw PSIEXCEPTION(
+            "LibXCfunctional: set_tweak: Mismatch in size of tweaker vector and expected number of "
+            "input parameters:" +
+            oss.str() + "\n");
+    }
+
+    if (xc_func_name_ == "XC_GGA_C_PBE") {
         if (vsize == 3) {
-            // "Mixing parameter beta", "Screening parameter omega_HF", "Screening parameter omega_PBE"
+            // (XC(func_type) *p, FLOAT beta); FLOAT gamma, FLOAT BB
+            // xc_gga_c_pbe_set_params(xc_functional_.get(), values[0]);
+            values[1] =
+                xc_func_info_get_ext_params_default_value(const_cast<xc_func_info_type*>(xc_functional_->info), 1);
+            values[2] =
+                xc_func_info_get_ext_params_default_value(const_cast<xc_func_info_type*>(xc_functional_->info), 2);
             xc_func_set_ext_params(xc_functional_.get(), values.data());
             failed = false;
         }
     } else if (xc_func_name_ == "XC_MGGA_X_TPSS") {
-        if (vsize == 5) {
+        if (vsize == 7) {
             // (xc_func_type *p, double b, double c, double e, double kappa, double mu, double BLOC_a, double BLOC_bu);
-            xc_mgga_x_tpss_set_params(xc_functional_.get(), values[0], values[1], values[2], values[3], values[4], 2.0,
-                                      0.0);
-            failed = false;
-        }
-    } else if (xc_func_name_ == "XC_MGGA_C_TPSS") {
-        if (vsize == 6) {
-            // (xc_func_type *p, double beta, double d, double C0_0, double C0_1, double C0_2, double C0_3);
-            xc_mgga_c_tpss_set_params(xc_functional_.get(), values[0], values[1], values[2], values[3], values[4],
-                                      values[5]);
-            failed = false;
-        }
-    } else if (xc_func_name_ == "XC_MGGA_C_BC95") {
-        if (vsize == 2) {
-            // (XC(func_type) *p, FLOAT css, FLOAT copp);
-            xc_mgga_c_bc95_set_params(xc_functional_.get(), values[0], values[1]);
+            // xc_mgga_x_tpss_set_params(xc_functional_.get(), values[0], values[1], values[2], values[3],
+            // values[4], 2.0,
+            //                           0.0);
+            values[5] = 2.0;
+            values[6] = 0.0;
+            xc_func_set_ext_params(xc_functional_.get(), values.data());
             failed = false;
         }
-        // } else if (xc_func_name_ == "XC_MGGA_C_PKZB") {
-        //     if (vsize == 6) {
-        //         // ((XC(func_type) *p, FLOAT beta, FLOAT d, FLOAT C0_0, FLOAT C0_1, FLOAT C0_2, FLOAT
-        //         // C0_3);
-        //         xc_mgga_c_pkzb_set_params(xc_functional_.get(), values[0], values[1], values[2], values[3],
-        //                                   values[4], values[5]);
-        //         failed = false;
-        //     }
     } else {
-        throw PSIEXCEPTION(
-            "LibXCfunctional: set_tweak: There are no known tweaks for this functional, please double check "
-            "the functional form and add them if required.");
-    }
-
-    // Did we match fully?
-    if (failed) {
-        throw PSIEXCEPTION(
-            "LibXCfunctional: set_tweak: Mismatch in size of tweaker vector and expected number of "
-            "input parameters.");
+        xc_func_set_ext_params(xc_functional_.get(), values.data());
+        failed = false;
     }
 
     user_tweakers_ = values;