Source code for functional

"""
Module to provide lightweight definitions of functionals and
SuperFunctionals
"""
import PsiMod
import re
import os
import sys
import math
from psiexceptions import *


## ==> Functionals <== ##


[docs]def build_s_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('S_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('S_X') # Tab in, trailing newlines fun.set_description(' Slater LSDA Exchange\n') # Tab in, trailing newlines fun.set_citation(' J.C. Slater, Phys. Rev., 81(3):385-390, 1951\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(False) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters # => End User-Customization <= # return fun
[docs]def build_b88_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('B88_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('B88_X') # Tab in, trailing newlines fun.set_description(' Becke88 GGA Exchange\n') # Tab in, trailing newlines fun.set_citation(' A.D. Becke, Phys. Rev. A, 38(6):3098-3100, 1988\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(True) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters fun.set_parameter('B88_d', 0.0042) fun.set_parameter('B88_a', 1.0000) # => End User-Customization <= # return fun
[docs]def build_b3_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('B88_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('B3_X') # Tab in, trailing newlines fun.set_description(' Becke88 GGA Exchange (B3LYP weighting)\n') # Tab in, trailing newlines fun.set_citation(' P.J. Stephens et. al., J. Phys. Chem., 98, 11623-11627, 1994\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(True) fun.set_meta(False) fun.set_alpha(0.8) fun.set_omega(0.0) # Custom parameters fun.set_parameter('B88_d', 0.0042) fun.set_parameter('B88_a', 0.9000) # => End User-Customization <= # return fun
[docs]def build_pbe_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('PBE_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('PBE_X') # Tab in, trailing newlines fun.set_description(' PBE GGA Exchange Hole (Parameter Free)\n') # Tab in, trailing newlines fun.set_citation(' J.P. Perdew et. al., Phys. Rev. Lett., 77(18), 3865-3868, 1996\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(True) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters fun.set_parameter('PBE_kp', 0.804) fun.set_parameter('PBE_mu', 0.2195149727645171) # => End User-Customization <= # return fun
[docs]def build_pbesol_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('PBE_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('PBEsol_X') # Tab in, trailing newlines fun.set_description(' PBEsol GGA Exchange Hole (Parameter Free)\n') # Tab in, trailing newlines fun.set_citation(' J.P. Perdew et. al., Phys. Rev. Lett., 77(18), 3865-3868, 1996\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(True) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters fun.set_parameter('PBE_kp', 0.804) fun.set_parameter('PBE_mu', 10.0 / 81.0) # => End User-Customization <= # return fun
[docs]def build_pw91_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('PW91_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('PW91_X') # Tab in, trailing newlines fun.set_description(' PW91 Parameterized GGA Exchange\n') # Tab in, trailing newlines fun.set_citation(' J.P. Perdew et. al., Phys. Rev. B., 46(11), 6671-6687, 1992\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(True) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters k01 = math.pow(6.0 * math.pi * math.pi, 1.0 / 3.0) k02 = k01 * k01 k04 = k02 * k02 fun.set_parameter('PW91_a1', 0.19645 / (2.0 * k01)) fun.set_parameter('PW91_a2', 7.79560 / (2.0 * k01)) fun.set_parameter('PW91_a3', 0.27430 / (4.0 * k02)) fun.set_parameter('PW91_a4', 0.15080 / (4.0 * k02)) fun.set_parameter('PW91_a5', 100.000 / (4.0 * k02)) fun.set_parameter('PW91_a6', 0.00400 / (16.0 * k04)) # => End User-Customization <= # return fun
[docs]def build_b97_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('B97_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('B97_X') # Tab in, trailing newlines fun.set_description(' B97 Parameterized GGA Exchange\n') # Tab in, trailing newlines fun.set_citation(' A.D. Becke, J. Chem. Phys., 107(20), 8554-8560, 1997\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(True) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters fun.set_parameter('B97_gamma', 0.004) # => End User-Customization <= # return fun
[docs]def build_vwn5_c_functional(name): # Call this first fun = PsiMod.Functional.build_base('VWN5_C') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('VWN5_C') # Tab in, trailing newlines fun.set_description(' VWN5 LSDA Correlation\n') # Tab in, trailing newlines fun.set_citation(' S.H. Vosko, L. Wilk, and M. Nusair, Can. J. Phys., 58, 1200-1211, 1980\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(False) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters fun.set_parameter('EcP_2', -0.10498) fun.set_parameter('EcP_3', 3.72744) fun.set_parameter('EcP_4', 12.9352) fun.set_parameter('EcF_2', -0.32500) fun.set_parameter('EcF_3', 7.06042) fun.set_parameter('EcF_4', 18.0578) fun.set_parameter('Ac_2', -0.00475840) fun.set_parameter('Ac_3', 1.13107) fun.set_parameter('Ac_4', 13.0045) # => End User-Customization <= # return fun
[docs]def build_vwn5rpa_c_functional(name): # Call this first fun = PsiMod.Functional.build_base('VWN5_C') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('VWN5RPA_C') # Tab in, trailing newlines fun.set_description(' VWN5 (RPA) LSDA Correlation\n') # Tab in, trailing newlines fun.set_citation(' S.H. Vosko, L. Wilk, and M. Nusair, Can. J. Phys., 58, 1200-1211, 1980\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(False) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters fun.set_parameter('EcP_2', -0.409286) fun.set_parameter('EcP_3', 13.0720) fun.set_parameter('EcP_4', 42.7198) fun.set_parameter('EcF_2', -0.743294) fun.set_parameter('EcF_3', 20.1231) fun.set_parameter('EcF_4', 101.578) fun.set_parameter('Ac_2', -0.228344) fun.set_parameter('Ac_3', 1.06835) fun.set_parameter('Ac_4', 11.4813) # => End User-Customization <= # return fun
[docs]def build_vwn3_c_functional(name): # Call this first fun = PsiMod.Functional.build_base('VWN3_C') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('VWN3_C') # Tab in, trailing newlines fun.set_description(' VWN3 LSDA Correlation\n') # Tab in, trailing newlines fun.set_citation(' S.H. Vosko, L. Wilk, and M. Nusair, Can. J. Phys., 58, 1200-1211, 1980\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(False) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters fun.set_parameter('EcP_2', -0.10498) fun.set_parameter('EcP_3', 3.72744) fun.set_parameter('EcP_4', 12.9352) fun.set_parameter('EcF_2', -0.32500) fun.set_parameter('EcF_3', 7.06042) fun.set_parameter('EcF_4', 18.0578) # => End User-Customization <= # return fun
[docs]def build_vwn3rpa_c_functional(name): # Call this first fun = PsiMod.Functional.build_base('VWN3_C') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('VWN3RPA_C') # Tab in, trailing newlines fun.set_description(' VWN3 (RPA) LSDA Correlation\n') # Tab in, trailing newlines fun.set_citation(' S.H. Vosko, L. Wilk, and M. Nusair, Can. J. Phys., 58, 1200-1211, 1980\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(False) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.0) # Custom parameters fun.set_parameter('EcP_2', -0.409286) fun.set_parameter('EcP_3', 13.0720) fun.set_parameter('EcP_4', 42.7198) fun.set_parameter('EcF_2', -0.743294) fun.set_parameter('EcF_3', 20.1231) fun.set_parameter('EcF_4', 101.578) # => End User-Customization <= # return fun
[docs]def build_ws_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('wS_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('wS_X') # Tab in, trailing newlines fun.set_description(' Slater Short-Range LSDA Exchange\n') # Tab in, trailing newlines fun.set_citation(' Adamson et. al., J. Comput. Chem., 20(9), 921-927, 1999\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(False) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.3) # Custom parameters # => End User-Customization <= # return fun
[docs]def build_wpbe_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('wPBE_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('wPBE_X') # Tab in, trailing newlines fun.set_description(' PBE Short-Range GGA Exchange (HJS Formalism)\n') # Tab in, trailing newlines fun.set_citation(' Henderson et. al., J. Chem. Phys., 128, 194105, 2008\n Weintraub, Henderson, and Scuseria, J. Chem. Theory. Comput., 5, 754 (2009)\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(True) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.3) # Custom parameters fun.set_parameter('A', 0.7572110) fun.set_parameter('B', -0.1063640) fun.set_parameter('C', -0.1186490) fun.set_parameter('D', 0.6096500) fun.set_parameter('E', -0.0477963) fun.set_parameter('Ha0', 0.0000000) fun.set_parameter('Ha1', 0.0000000) fun.set_parameter('Ha2', 0.0159941) fun.set_parameter('Ha3', 0.0852995) fun.set_parameter('Ha4', -0.1603680) fun.set_parameter('Ha5', 0.1526450) fun.set_parameter('Ha6', -0.0971263) fun.set_parameter('Ha7', 0.0422061) fun.set_parameter('Hb0', 1.0000000) fun.set_parameter('Hb1', 5.3331900) fun.set_parameter('Hb2', -12.478000) fun.set_parameter('Hb3', 11.098800) fun.set_parameter('Hb4', -5.1101300) fun.set_parameter('Hb5', 1.7146800) fun.set_parameter('Hb6', -0.6103800) fun.set_parameter('Hb7', 0.3075550) fun.set_parameter('Hb8', -0.0770547) fun.set_parameter('Hb9', 0.0334840) # => End User-Customization <= # return fun
[docs]def build_wpbesol_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('wPBE_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('wPBEsol_X') # Tab in, trailing newlines fun.set_description(' PBEsol Short-Range GGA Exchange (HJS Formalism)\n') # Tab in, trailing newlines fun.set_citation(' Henderson et. al., J. Chem. Phys., 128, 194105, 2008\n Weintraub, Henderson, and Scuseria, J. Chem. Theory. Comput., 5, 754 (2009)\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(True) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.3) # Custom parameters fun.set_parameter('A', 0.7572110) fun.set_parameter('B', -0.1063640) fun.set_parameter('C', -0.1186490) fun.set_parameter('D', 0.6096500) fun.set_parameter('E', -0.0477963) fun.set_parameter('Ha0', 0.0000000) fun.set_parameter('Ha1', 0.0000000) fun.set_parameter('Ha2', 0.0047333) fun.set_parameter('Ha3', 0.0403304) fun.set_parameter('Ha4', -0.0574615) fun.set_parameter('Ha5', 0.0435395) fun.set_parameter('Ha6', -0.0216251) fun.set_parameter('Ha7', 0.0063721) fun.set_parameter('Hb0', 1.00000) fun.set_parameter('Hb1', 8.52056) fun.set_parameter('Hb2', -13.9885) fun.set_parameter('Hb3', 9.28583) fun.set_parameter('Hb4', -3.27287) fun.set_parameter('Hb5', 0.843499) fun.set_parameter('Hb6', -0.235543) fun.set_parameter('Hb7', 0.0847074) fun.set_parameter('Hb8', -0.0171561) fun.set_parameter('Hb9', 0.0050552) # => End User-Customization <= # return fun
[docs]def build_wb88_x_functional(name): # Call this first fun = PsiMod.Functional.build_base('wB88_X') # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name('wB88_X') # Tab in, trailing newlines fun.set_description(' B88 Short-Range GGA Exchange (HJS Formalism)\n') # Tab in, trailing newlines fun.set_citation(' Henderson et. al., J. Chem. Phys., 128, 194105, 2008\n Weintraub, Henderson, and Scuseria, J. Chem. Theory. Comput., 5, 754 (2009)\n') # These should be set by build_base, but prove that you know what's up fun.set_gga(True) fun.set_meta(False) fun.set_alpha(1.0) fun.set_omega(0.3) # Custom parameters fun.set_parameter('A', 0.7572110) fun.set_parameter('B', -0.1063640) fun.set_parameter('C', -0.1186490) fun.set_parameter('D', 0.6096500) fun.set_parameter('E', -0.0477963) fun.set_parameter('Ha0', 0.0000000) fun.set_parameter('Ha1', 0.0000000) fun.set_parameter('Ha2', 0.0253933) fun.set_parameter('Ha3', -0.0673075) fun.set_parameter('Ha4', 0.0891476) fun.set_parameter('Ha5', -0.0454168) fun.set_parameter('Ha6', -0.0076581) fun.set_parameter('Ha7', 0.0142506) fun.set_parameter('Hb0', 1.00000) fun.set_parameter('Hb1', -2.65060) fun.set_parameter('Hb2', 3.91108) fun.set_parameter('Hb3', -3.31509) fun.set_parameter('Hb4', 1.54485) fun.set_parameter('Hb5', -0.198386) fun.set_parameter('Hb6', -0.136112) fun.set_parameter('Hb7', 0.0647862) fun.set_parameter('Hb8', 0.0159586) fun.set_parameter('Hb9', -2.45066E-4) # => End User-Customization <= # return fun
[docs]def build_primitive_functional(name): # Call this first key = name.upper() if (key[0] == 'W'): key = 'w' + key[1:] fun = PsiMod.Functional.build_base(key) # => User-Customization <= # # No spaces, keep it short and according to convention fun.set_name(key) # Tab in, trailing newlines fun.set_description(fun.description()) # Tab in, trailing newlines fun.set_citation(fun.citation()) # These should be set by build_base, but prove that you know what's up fun.set_gga(fun.is_gga()) fun.set_meta(fun.is_meta()) fun.set_alpha(fun.alpha()) fun.set_omega(fun.omega()) # Custom parameters # Always built-in for this functional # => End User-Customization <= # return fun # Functional lookup table
functionals = { 's_x' : build_s_x_functional, 'b88_x' : build_b88_x_functional, 'b3_x' : build_b3_x_functional, 'pbe_x' : build_pbe_x_functional, 'pbesol_x' : build_pbesol_x_functional, 'pw91_x' : build_pw91_x_functional, 'b97_x' : build_b97_x_functional, 'ws_x' : build_ws_x_functional, 'wb97_x' : build_primitive_functional, 'wpbe_x' : build_wpbe_x_functional, 'wpbesol_x' : build_wpbesol_x_functional, 'wb88_x' : build_wb88_x_functional, 'ft97b_x' : build_primitive_functional, 'm_x' : build_primitive_functional, 'lyp_c' : build_primitive_functional, 'pz81_c' : build_primitive_functional, 'p86_c' : build_primitive_functional, 'vwn5rpa_c' : build_vwn5rpa_c_functional, 'vwn5_c' : build_vwn5_c_functional, 'vwn3rpa_c' : build_vwn3rpa_c_functional, 'vwn3_c' : build_vwn3_c_functional, 'pw91_c' : build_primitive_functional, 'pw92_c' : build_primitive_functional, 'pbe_c' : build_primitive_functional, 'ft97_c' : build_primitive_functional, 'b_c' : build_primitive_functional, 'm_c' : build_primitive_functional, }
[docs]def build_functional(alias): name = alias.lower() return functionals[name](name)
[docs]def functional_list(): val = [] for key in functionals.keys(): val.append(functionals[key](key)) return val ## ==> SuperFunctionals <== ##
[docs]def build_ws_x_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wS_X') # Tab in, trailing newlines sup.set_description(' Slater Short-Range LSDA Exchange\n') # Tab in, trailing newlines sup.set_citation(' Adamson et. al., J. Comput. Chem., 20(9), 921-927, 1999\n') # Add member functionals sup.add_x_functional(build_functional('wS_X')) # Set GKS up after adding functionals sup.set_x_omega(0.3) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_wpbe_x_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wPBE_X') # Tab in, trailing newlines sup.set_description(' PBE Short-Range GGA Exchange (HJS Model)\n') # Tab in, trailing newlines sup.set_citation(' Henderson et. al., J. Chem. Phys., 128, 194105, 2008\n Weintraub, Henderson, and Scuseria, J. Chem. Theory. Comput., 5, 754 (2009)\n') # Add member functionals sup.add_x_functional(build_functional('wPBE_X')) # Set GKS up after adding functionals sup.set_x_omega(0.3) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_wpbesol_x_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wPBEsol_X') # Tab in, trailing newlines sup.set_description(' PBEsol Short-Range GGA Exchange (HJS Model)\n') # Tab in, trailing newlines sup.set_citation(' Henderson et. al., J. Chem. Phys., 128, 194105, 2008\n Weintraub, Henderson, and Scuseria, J. Chem. Theory. Comput., 5, 754 (2009)\n') # Add member functionals sup.add_x_functional(build_functional('wPBEsol_X')) # Set GKS up after adding functionals sup.set_x_omega(0.3) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_wb88_x_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wB88_X') # Tab in, trailing newlines sup.set_description(' B88 Short-Range GGA Exchange (HJS Model)\n') # Tab in, trailing newlines sup.set_citation(' Henderson et. al., J. Chem. Phys., 128, 194105, 2008\n Weintraub, Henderson, and Scuseria, J. Chem. Theory. Comput., 5, 754 (2009)\n') # Add member functionals sup.add_x_functional(build_functional('wB88_X')) # Set GKS up after adding functionals sup.set_x_omega(0.3) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_svwn_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('SVWN') # Tab in, trailing newlines sup.set_description(' SVWN3 (RPA) LSDA Functional\n') # Tab in, trailing newlines sup.set_citation(' Adamson et. al., J. Comput. Chem., 20(9), 921-927, 1999\n') # Add member functionals sup.add_x_functional(build_functional('S_X')) sup.add_c_functional(build_functional('VWN3RPA_C')) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_blyp_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('BLYP') # Tab in, trailing newlines sup.set_description(' BLYP GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' P.J. Stephens et. al., J. Phys. Chem., 98, 11623-11627, 1994\n B. Miehlich et. al., Chem. Phys. Lett., 157(3), 200-206 1989\n') # Add member functionals sup.add_x_functional(build_functional('B88_X')) sup.add_c_functional(build_functional('LYP_C')) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_pw91_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('PW91') # Tab in, trailing newlines sup.set_description(' PW91 GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' J.P. Perdew et. al., Phys. Rev. B., 46(11), 6671-6687, 1992\n') # Add member functionals sup.add_x_functional(build_functional('PW91_X')) sup.add_c_functional(build_functional('PW91_C')) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_bp86_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('BP86') # Tab in, trailing newlines sup.set_description(' BP86 GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' Null\n') # Add member functionals sup.add_x_functional(build_functional('B88_X')) sup.add_c_functional(build_functional('P86_C')) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_ft97_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('FT97') # Tab in, trailing newlines sup.set_description(' FT97 GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' M. Filatov and W. Theil, Int. J. Quant. Chem., 62, 603-616, 1997\n') # Add member functionals sup.add_x_functional(build_functional('FT97B_X')) sup.add_c_functional(build_functional('FT97_C')) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_pbe_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('PBE') # Tab in, trailing newlines sup.set_description(' PBE GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' J.P. Perdew et. al., Phys. Rev. Lett., 77(18), 3865-3868, 1996\n') # Add member functionals sup.add_x_functional(build_functional('PBE_X')) sup.add_c_functional(build_functional('PBE_C')) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_pbe0_superfunctional(name, npoints, deriv): sup = build_pbe_superfunctional(name, npoints, deriv) sup.set_name('PBE0') sup.set_description(' PBE0 Hybrid GGA Exchange-Correlation Functional\n') sup.set_x_alpha(0.25) return sup
[docs]def build_b3lyp_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('B3LYP') # Tab in, trailing newlines sup.set_description(' B3LYP Hybrid-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' P.J. Stephens et. al., J. Phys. Chem., 98, 11623-11627, 1994\n') # Add member functionals b3 = build_functional('B3_X') b3.set_alpha(1.0) sup.add_x_functional(b3) lyp = build_functional('LYP_C') lyp.set_alpha(0.81) vwn = build_functional('VWN3RPA_C') vwn.set_alpha(0.19) sup.add_c_functional(vwn) sup.add_c_functional(lyp) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.2) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_b3lyp5_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('B3LYP5') # Tab in, trailing newlines sup.set_description(' B3LYP5 Hybrid-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' P.J. Stephens et. al., J. Phys. Chem., 98, 11623-11627, 1994\n') # Add member functionals b3 = build_functional('B3_X') b3.set_alpha(1.0) sup.add_x_functional(b3) lyp = build_functional('LYP_C') lyp.set_alpha(0.81) vwn = build_functional('VWN5RPA_C') vwn.set_alpha(0.19) sup.add_c_functional(lyp) sup.add_c_functional(vwn) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.2) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_b970_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('B97-0') # Tab in, trailing newlines sup.set_description(' B97-0 Hybrid-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' A.D. Becke, J. Chem. Phys., 107(20), 8554-8560, 1997\n') # Add member functionals X = build_functional('B97_X') X.set_name('B97-0_X') X.set_alpha(1.0 / 0.8057) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 0.8094) X.set_parameter('B97_a1', 0.5073) X.set_parameter('B97_a2', 0.7481) C = build_functional('B_C') C.set_name('B97-0_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 0.9454) C.set_parameter('B97_os_a1', 0.7471) C.set_parameter('B97_os_a2', -4.5961) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 0.1737) C.set_parameter('B97_ss_a1', 2.3487) C.set_parameter('B97_ss_a2', -2.4868) sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.1943) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_b971_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('B97-1') # Tab in, trailing newlines sup.set_description(' B97-1 Hybrid-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' F.A. Hamprecht et. al., J. Chem. Phys., 109(15), 6264-6271, 1998\n') # Add member functionals X = build_functional('B97_X') X.set_name('B97-1_X') X.set_alpha(1.0 / 0.79) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 0.789518) X.set_parameter('B97_a1', 0.573805) X.set_parameter('B97_a2', 0.660975) C = build_functional('B_C') C.set_name('B97-1_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 0.955689) C.set_parameter('B97_os_a1', 0.788552) C.set_parameter('B97_os_a2', -5.47869) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 0.0820011) C.set_parameter('B97_ss_a1', 2.71681) C.set_parameter('B97_ss_a2', -2.87103) sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.21) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_b972_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('B97-2') # Tab in, trailing newlines sup.set_description(' B97-2 Hybrid-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' P.J. Wilson et. al., J. Chem. Phys., 115(20), 9233-9242, 2001\n') # Add member functionals X = build_functional('B97_X') X.set_name('B97-2_X') X.set_alpha(1.0 / 0.79) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 0.827642) X.set_parameter('B97_a1', 0.047840) X.set_parameter('B97_a2', 1.761250) C = build_functional('B_C') C.set_name('B97-2_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 0.999849) C.set_parameter('B97_os_a1', 1.40626) C.set_parameter('B97_os_a2', -7.44060) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 0.585808) C.set_parameter('B97_ss_a1', -0.691682) C.set_parameter('B97_ss_a2', 0.394796) sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.21) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_b97d_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('B97-D') # Tab in, trailing newlines sup.set_description(' B97-D Pure-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' S. Grimme, J. Comput. Chem., 27, 1787-1799, 2006\n') # Add member functionals X = build_functional('B97_X') X.set_name('B97-D_X') X.set_alpha(1.0) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 1.08662) X.set_parameter('B97_a1', -0.52127) X.set_parameter('B97_a2', 3.25429) C = build_functional('B_C') C.set_name('B97-D_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 0.69041) C.set_parameter('B97_os_a1', 6.30270) C.set_parameter('B97_os_a2', -14.9712) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 0.22340) C.set_parameter('B97_ss_a1', -1.56208) C.set_parameter('B97_ss_a2', 3.25429) sup.add_x_functional(X) sup.add_c_functional(C) # => -D2 (s = 1.25) <= # sup.set_dispersion(PsiMod.Dispersion.build('-D2', 1.25)) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_hcth_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('HCTH') # Tab in, trailing newlines sup.set_description(' HCTH Pure-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' F.A. Hamprecht et. al., J. Chem. Phys., 109(15), 6264-6271\n') # Add member functionals X = build_functional('B97_X') X.set_name('HCTH_X') X.set_alpha(1.0) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 1.09320) X.set_parameter('B97_a1', -0.744056) X.set_parameter('B97_a2', 5.59920) X.set_parameter('B97_a3', -6.78549) X.set_parameter('B97_a4', 4.49357) C = build_functional('B_C') C.set_name('HCTH_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 0.729974) C.set_parameter('B97_os_a1', 3.35287) C.set_parameter('B97_os_a2', -11.5430) C.set_parameter('B97_os_a3', 8.08564) C.set_parameter('B97_os_a4', -4.47857) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 0.222601) C.set_parameter('B97_ss_a1', -0.0338622) C.set_parameter('B97_ss_a2', -0.0125170) C.set_parameter('B97_ss_a3', -0.802496) C.set_parameter('B97_ss_a4', 1.55396) sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_hcth120_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('HCTH120') # Tab in, trailing newlines sup.set_description(' HCTH120 Pure-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' A.D. Boese, et. al., J. Chem. Phys., 112(4), 1670-1678, 2000\n') # Add member functionals X = build_functional('B97_X') X.set_name('HCTH120_X') X.set_alpha(1.0) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 1.09163) X.set_parameter('B97_a1', -0.747215) X.set_parameter('B97_a2', 5.07833) X.set_parameter('B97_a3', -4.10746) X.set_parameter('B97_a4', 1.17173) C = build_functional('B_C') C.set_name('HCTH120_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 0.514730) C.set_parameter('B97_os_a1', 6.92982) C.set_parameter('B97_os_a2', -24.7073) C.set_parameter('B97_os_a3', 23.1098) C.set_parameter('B97_os_a4', -11.3234) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 0.489508) C.set_parameter('B97_ss_a1', -0.260699) C.set_parameter('B97_ss_a2', 0.432917) C.set_parameter('B97_ss_a3', -1.99247) C.set_parameter('B97_ss_a4', 2.48531) sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_hcth147_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('HCTH147') # Tab in, trailing newlines sup.set_description(' HCTH147 Pure-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' A.D. Boese, et. al., J. Chem. Phys., 112(4), 1670-1678, 2000\n') # Add member functionals X = build_functional('B97_X') X.set_name('HCTH147_X') X.set_alpha(1.0) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 1.09025) X.set_parameter('B97_a1', -0.799194) X.set_parameter('B97_a2', 5.57212) X.set_parameter('B97_a3', -5.86760) X.set_parameter('B97_a4', 3.04544) C = build_functional('B_C') C.set_name('HCTH147_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 0.542352) C.set_parameter('B97_os_a1', 7.01464) C.set_parameter('B97_os_a2', -28.3822) C.set_parameter('B97_os_a3', 35.0329) C.set_parameter('B97_os_a4', -20.4284) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 0.562576) C.set_parameter('B97_ss_a1', 0.0171436) C.set_parameter('B97_ss_a2', -1.30636) C.set_parameter('B97_ss_a3', 1.05747) C.set_parameter('B97_ss_a4', 0.885429) sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_hcth407_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('HCTH407') # Tab in, trailing newlines sup.set_description(' HCTH407 Pure-GGA Exchange-Correlation Functional\n') # Tab in, trailing newlines sup.set_citation(' A.D. Boese and N.C. Handy, J. Chem. Phys., 114(13), 5497-5503, 2001\n') # Add member functionals X = build_functional('B97_X') X.set_name('HCTH407_X') X.set_alpha(1.0) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 1.08184) X.set_parameter('B97_a1', -0.518339) X.set_parameter('B97_a2', 3.42562) X.set_parameter('B97_a3', -2.62901) X.set_parameter('B97_a4', 2.28855) C = build_functional('B_C') C.set_name('HCTH407_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 0.589076) C.set_parameter('B97_os_a1', 4.42374) C.set_parameter('B97_os_a2', -19.2218) C.set_parameter('B97_os_a3', 42.5721) C.set_parameter('B97_os_a4', -42.0052) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 1.18777) C.set_parameter('B97_ss_a1', -2.40292) C.set_parameter('B97_ss_a2', 5.61741) C.set_parameter('B97_ss_a3', -9.17923) C.set_parameter('B97_ss_a4', 6.24798) sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_blypd_superfunctional(name, npoints, deriv): sup = build_blyp_superfunctional(name, npoints, deriv) sup.set_name('BLYP-D') # => -D2 <= # sup.set_dispersion(PsiMod.Dispersion.build('-D2', 1.20)) return sup
[docs]def build_b3lypd_superfunctional(name, npoints, deriv): sup = build_b3lyp_superfunctional(name, npoints, deriv) sup.set_name('B3LYP-D') # => -D2 <= # sup.set_dispersion(PsiMod.Dispersion.build('-D2', 1.05)) return sup
[docs]def build_b3lyp5d_superfunctional(name, npoints, deriv): sup = build_b3lyp5_superfunctional(name, npoints, deriv) sup.set_name('B3LYP5-D') # => -D2 <= # sup.set_dispersion(PsiMod.Dispersion.build('-D2', 1.05)) return sup
[docs]def build_bp86d_superfunctional(name, npoints, deriv): sup = build_bp86_superfunctional(name, npoints, deriv) sup.set_name('BP86-D') # => -D2 <= # sup.set_dispersion(PsiMod.Dispersion.build('-D2', 1.05)) return sup
[docs]def build_pbed_superfunctional(name, npoints, deriv): sup = build_pbe_superfunctional(name, npoints, deriv) sup.set_name('PBE-D') # => -D2 <= # sup.set_dispersion(PsiMod.Dispersion.build('-D2', 0.75)) return sup
[docs]def build_wsvwn_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wSVWN') # Tab in, trailing newlines sup.set_description(' LSDA SR-XC Functional\n') # Tab in, trailing newlines sup.set_citation(' Adamson et. al., J. Comput. Chem., 20(9), 921-927, 1999\n') # Add member functionals sup.add_x_functional(build_functional('wS_X')) sup.add_c_functional(build_functional('VWN3RPA_C')) # Set GKS up after adding functionals sup.set_x_omega(0.3) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_wpbe_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wPBE') # Tab in, trailing newlines sup.set_description(' PBE SR-XC Functional (HJS Model)\n') # Tab in, trailing newlines sup.set_citation(' Henderson et. al., J. Chem. Phys., 128, 194105, 2008\n Weintraub, Henderson, and Scuseria, J. Chem. Theory. Comput., 5, 754 (2009)\n') # Add member functionals sup.add_x_functional(build_functional('wPBE_X')) sup.add_c_functional(build_functional('PBE_C')) # Set GKS up after adding functionals sup.set_x_omega(0.4) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_wpbe0_superfunctional(name, npoints, deriv): sup = build_wpbe_superfunctional(name, npoints, deriv) sup.set_name('wPBE0') sup.set_description(' PBE0 SR-XC Functional (HJS Model)\n') sup.set_x_omega(0.3) sup.set_x_alpha(0.25) return sup
[docs]def build_wpbesol_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wPBEsol') # Tab in, trailing newlines sup.set_description(' PBEsol SR-XC Functional (HJS Model)\n') # Tab in, trailing newlines sup.set_citation(' Henderson et. al., J. Chem. Phys., 128, 194105, 2008\n Weintraub, Henderson, and Scuseria, J. Chem. Theory. Comput., 5, 754 (2009)\n') # Add member functionals sup.add_x_functional(build_functional('wPBEsol_X')) sup.add_c_functional(build_functional('PBE_C')) # Set GKS up after adding functionals sup.set_x_omega(0.4) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_wpbesol0_superfunctional(name, npoints, deriv): sup = build_wpbesol_superfunctional(name, npoints, deriv) sup.set_name('wPBEsol0') sup.set_description(' PBEsol0 SR-XC Functional (HJS Model)\n') sup.set_x_omega(0.3) sup.set_x_alpha(0.25) return sup
[docs]def build_wblyp_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wBLYP') # Tab in, trailing newlines sup.set_description(' BLYP SR-XC Functional (HJS Model)\n') # Tab in, trailing newlines sup.set_citation(' Henderson et. al., J. Chem. Phys., 128, 194105, 2008\n Weintraub, Henderson, and Scuseria, J. Chem. Theory. Comput., 5, 754 (2009)\n') # Add member functionals sup.add_x_functional(build_functional('wB88_X')) sup.add_c_functional(build_functional('LYP_C')) # Set GKS up after adding functionals sup.set_x_omega(0.3) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_wb97_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wB97') # Tab in, trailing newlines sup.set_description(' Parameterized LRC B97 GGA XC Functional\n') # Tab in, trailing newlines sup.set_citation(' J.-D. Chai and M. Head-Gordon, J. Chem. Phys., 128, 084106, 2008\n') # Add member functionals X = build_functional('wB97_X') X.set_name('wB97_X') X.set_alpha(1.0) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 1.0) X.set_parameter('B97_a1', 1.13116E0) X.set_parameter('B97_a2', -2.74915E0) X.set_parameter('B97_a3', 1.20900E1) X.set_parameter('B97_a4', -5.71642E0) C = build_functional('B_C') C.set_name('wB97_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 1.0) C.set_parameter('B97_os_a1', 3.99051E0) C.set_parameter('B97_os_a2', -1.70066E1) C.set_parameter('B97_os_a3', 1.07292E0) C.set_parameter('B97_os_a4', 8.88211E0) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 1.0) C.set_parameter('B97_ss_a1', -2.55352E0) C.set_parameter('B97_ss_a2', 1.18926E1) C.set_parameter('B97_ss_a3', -2.69452E1) C.set_parameter('B97_ss_a4', 1.70927E1) sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.4) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_wb97x_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wB97X') # Tab in, trailing newlines sup.set_description(' Parameterized Hybrid LRC B97 GGA XC Functional\n') # Tab in, trailing newlines sup.set_citation(' J.-D. Chai and M. Head-Gordon, J. Chem. Phys., 128, 084106, 2008\n') # Add member functionals X = build_functional('wB97_X') X.set_name('wB97X_X') X.set_alpha(1.0 / (1.0 - 0.157706)) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 8.42294E-1) X.set_parameter('B97_a1', 7.26479E-1) X.set_parameter('B97_a2', 1.04760E0) X.set_parameter('B97_a3', -5.70635E0) X.set_parameter('B97_a4', 1.32794E1) C = build_functional('B_C') C.set_name('wB97X_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 1.0) C.set_parameter('B97_os_a1', 2.37031E0) C.set_parameter('B97_os_a2', -1.13995E1) C.set_parameter('B97_os_a3', 6.58405E0) C.set_parameter('B97_os_a4', -3.78132E0) C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 1.0) C.set_parameter('B97_ss_a1', -4.33879E0) C.set_parameter('B97_ss_a2', 1.82308E1) C.set_parameter('B97_ss_a3', -3.17430E1) C.set_parameter('B97_ss_a4', 1.72901E1) sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.4) sup.set_c_omega(0.0) sup.set_x_alpha(0.157706) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_wb97xd_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('wB97X-D') # Tab in, trailing newlines sup.set_description(' Parameterized Hybrid LRC B97 GGA XC Functional with Dispersion\n') # Tab in, trailing newlines sup.set_citation(' J.-D. Chai and M. Head-Gordon, Phys. Chem. Chem. Phys., 10, 6615-6620, 2008\n') # Add member functionals alpha = 2.22036E-1; omega = 0.2; X = build_functional('wB97_X') X.set_name('wB97X_X') X.set_alpha(1.0 / (1.0 - alpha)) X.set_parameter('B97_gamma', 0.004) X.set_parameter('B97_a0', 7.77964E-1) # Table 1: c_{x\sigma,0} X.set_parameter('B97_a1', 6.61160E-1) # Table 1: c_{x\sigma,1} X.set_parameter('B97_a2', 5.74541E-1) # Table 1: c_{x\sigma,2} X.set_parameter('B97_a3', -5.25671E0) # Table 1: c_{x\sigma,3} X.set_parameter('B97_a4', 1.16386E1) # Table 1: c_{x\sigma,4} C = build_functional('B_C') C.set_name('wB97X_C') C.set_parameter('B97_os_gamma', 0.006) C.set_parameter('B97_os_a0', 1.0) # Table 1: c_{c\alpha\beta,0} C.set_parameter('B97_os_a1', 1.79413E0) # Table 1: c_{c\alpha\beta,1} C.set_parameter('B97_os_a2', -1.20477E1) # Table 1: c_{c\alpha\beta,2} C.set_parameter('B97_os_a3', 1.40847E1) # Table 1: c_{c\alpha\beta,3} C.set_parameter('B97_os_a4', -8.50809E0) # Table 1: c_{c\alpha\beta,4} C.set_parameter('B97_ss_gamma', 0.2) C.set_parameter('B97_ss_a0', 1.0) # Table 1: c_{c\sigma\sigma,0} C.set_parameter('B97_ss_a1', -6.90539E0) # Table 1: c_{c\sigma\sigma,1} C.set_parameter('B97_ss_a2', 3.13343E1) # Table 1: c_{c\sigma\sigma,2} C.set_parameter('B97_ss_a3', -5.10533E1) # Table 1: c_{c\sigma\sigma,3} C.set_parameter('B97_ss_a4', 2.64423E1) # Table 1: c_{c\sigma\sigma,4} sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(omega) # Table 1: omega sup.set_c_omega(0.0) sup.set_x_alpha(alpha) # Table 1: c_x sup.set_c_alpha(0.0) # => -D2 (CHG Damping Function) <= # sup.set_dispersion(PsiMod.Dispersion.build('-CHG', 1.0)) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_m05_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('M05') # Tab in, trailing newlines sup.set_description(' Heavily Parameterized Hybrid Meta-GGA XC Functional\n') # Tab in, trailing newlines sup.set_citation(' Zhao et. al., J. Chem. Phys., 123, 161103, 2005\n') # Add member functionals X = build_functional('M_X') X.set_name('M05_X') X.set_alpha(1.0) # LSDA Exchange type is Slater, no parameters # GGA Exchange type is PBE, special parameters because Truhlar is lazy C1 = 3.36116E-3 # Should be reported/implemented to more digits C2 = 4.49267E-3 # Should be reported/implemented to more digits K0 = 3.0 / 2.0 * math.pow(3.0 / (math.pi * 4.0), 1.0 / 3.0) k0 = math.pow(6.0 * math.pi * math.pi, 1.0 / 3.0) kp = C1 / (C2 * K0) mu = 4.0 * k0 * k0 * kp * C2 X.set_parameter('PBE_kp', kp) # Different effective kp X.set_parameter('PBE_mu', mu) # Different effective mu # Meta Exchange type is insane mess of w power series expansion X.set_parameter('Meta_a0', 1.0) X.set_parameter('Meta_a1', 0.08151) X.set_parameter('Meta_a2', -0.43956) X.set_parameter('Meta_a3', -3.22422) X.set_parameter('Meta_a4', 2.01819) X.set_parameter('Meta_a5', 8.79431) X.set_parameter('Meta_a6', -0.00295) X.set_parameter('Meta_a7', 9.82029) X.set_parameter('Meta_a8', -4.82351) X.set_parameter('Meta_a9', -48.17574) X.set_parameter('Meta_a10', 3.64802) X.set_parameter('Meta_a11', 34.02248) C = build_functional('M_C') C.set_name('M05_C') # LSDA Correlation type is PW92, no parameters # GGA Correlation type is B97 C.set_parameter('B97_os_gamma', 0.0031 * 2.0) # This makes me mad. Truhlar is too lazy to report the B97 gradient expansion formula, but then does not use the canonical definition. C.set_parameter('B97_os_a0', 1.0) C.set_parameter('B97_os_a1', 3.78569) C.set_parameter('B97_os_a2', -14.15261) C.set_parameter('B97_os_a3', -7.46589) C.set_parameter('B97_os_a4', 17.94491) C.set_parameter('B97_ss_gamma', 0.06) C.set_parameter('B97_ss_a0', 1.0) C.set_parameter('B97_ss_a1', 3.77344) C.set_parameter('B97_ss_a2', -26.04463) C.set_parameter('B97_ss_a3', 30.69913) C.set_parameter('B97_ss_a4', -9.22695) # Meta Correlation type is Becke metric, no parameters # Add the functionals in sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.28) # Hartree-Fock exact exchange sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_m05_2x_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # # No spaces, keep it short and according to convention sup.set_name('M05-2X') # Tab in, trailing newlines sup.set_description(' Heavily Parameterized Hybrid Meta-GGA XC Functional\n') # Tab in, trailing newlines sup.set_citation(' Zhao et. al., J. Chem. Theory Comput., 2, 364, 2006\n') # Add member functionals X = build_functional('M_X') X.set_name('M05_2X_X') X.set_alpha(1.0) # LSDA Exchange type is Slater, no parameters # GGA Exchange type is PBE, special parameters because Truhlar is lazy C1 = 3.36116E-3; # Should be reported/implemented to more digits C2 = 4.49267E-3; # Should be reported/implemented to more digits K0 = 3.0/2.0 * math.pow(3.0 / (math.pi * 4.0), 1.0/3.0); k0 = math.pow(6.0 * math.pi * math.pi, 1.0/3.0); kp = C1 / (C2 * K0); mu = 4.0 * k0 * k0 * kp * C2; X.set_parameter('PBE_kp', kp); # Different effective kp X.set_parameter('PBE_mu', mu); # Different effective mu # Meta Exchange type is insane mess of w power series expansion X.set_parameter('Meta_a0' , 1.0) X.set_parameter('Meta_a1' ,-0.56833) X.set_parameter('Meta_a2' ,-1.30057) X.set_parameter('Meta_a3' , 5.50070) X.set_parameter('Meta_a4' , 9.06402) X.set_parameter('Meta_a5' ,-32.21075) X.set_parameter('Meta_a6' ,-23.73298) X.set_parameter('Meta_a7' , 70.22996) X.set_parameter('Meta_a8' , 29.88614) X.set_parameter('Meta_a9' ,-60.25778) X.set_parameter('Meta_a10',-13.22205) X.set_parameter('Meta_a11', 15.23694) C = build_functional('M_C') C.set_name('M05_2X_C') # LSDA Correlation type is PW92, no parameters # GGA Correlation type is B97 C.set_parameter('B97_os_gamma', 0.0031 * 2.0) # This makes me mad. Truhlar is too lazy to report the B97 gradient expansion formula, but then does not use the canonical definition. C.set_parameter('B97_os_a0', 1.00000) C.set_parameter('B97_os_a1', 1.09297) C.set_parameter('B97_os_a2',-3.79171) C.set_parameter('B97_os_a3', 2.82810) C.set_parameter('B97_os_a4',-10.58909) C.set_parameter('B97_ss_gamma', 0.06) C.set_parameter('B97_ss_a0', 1.00000) C.set_parameter('B97_ss_a1',-3.05430) C.set_parameter('B97_ss_a2', 7.61854) C.set_parameter('B97_ss_a3', 1.47665) C.set_parameter('B97_ss_a4',-11.92365) # Meta Correlation type is Becke metric, no parameters # Add the functionals in sup.add_x_functional(X) sup.add_c_functional(C) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.56) # Hartree-Fock exact exchange sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup
[docs]def build_primitive_superfunctional(name, npoints, deriv): # Call this first sup = PsiMod.SuperFunctional.blank() sup.set_max_points(npoints) sup.set_deriv(deriv) # => User-Customization <= # key = name.upper() fun = build_functional(key) # No spaces, keep it short and according to convention sup.set_name(key) # Tab in, trailing newlines sup.set_description(fun.description()) # Tab in, trailing newlines sup.set_citation(fun.citation()) # Add member functionals if (key[-1] == 'X'): sup.add_x_functional(fun) else: sup.add_c_functional(fun) # Set GKS up after adding functionals sup.set_x_omega(0.0) sup.set_c_omega(0.0) sup.set_x_alpha(0.0) sup.set_c_alpha(0.0) # => End User-Customization <= # # Call this last sup.allocate() return sup # Superfunctional lookup table
superfunctionals = { 's_x' : build_primitive_superfunctional, 'b88_x' : build_primitive_superfunctional, 'b3_x' : build_primitive_superfunctional, 'pbe_x' : build_primitive_superfunctional, 'pbesol_x' : build_primitive_superfunctional, 'pw91_x' : build_primitive_superfunctional, 'ws_x' : build_ws_x_superfunctional, 'wpbe_x' : build_wpbe_x_superfunctional, 'wpbesol_x' : build_wpbesol_x_superfunctional, 'wb88_x' : build_wb88_x_superfunctional, 'lyp_c' : build_primitive_superfunctional, 'ft97b_x' : build_primitive_superfunctional, 'pz81_c' : build_primitive_superfunctional, 'p86_c' : build_primitive_superfunctional, 'pw91_c' : build_primitive_superfunctional, 'pw92_c' : build_primitive_superfunctional, 'pbe_c' : build_primitive_superfunctional, 'ft97_c' : build_primitive_superfunctional, 'vwn5rpa_c' : build_primitive_superfunctional, 'vwn5_c' : build_primitive_superfunctional, 'vwn3rpa_c' : build_primitive_superfunctional, 'vwn3_c' : build_primitive_superfunctional, 'svwn' : build_svwn_superfunctional, 'blyp' : build_blyp_superfunctional, 'bp86' : build_bp86_superfunctional, 'pw91' : build_pw91_superfunctional, 'pbe' : build_pbe_superfunctional, 'ft97' : build_ft97_superfunctional, 'b3lyp' : build_b3lyp_superfunctional, 'b3lyp5' : build_b3lyp5_superfunctional, 'pbe0' : build_pbe0_superfunctional, 'b97-0' : build_b970_superfunctional, 'b97-1' : build_b971_superfunctional, 'b97-2' : build_b972_superfunctional, 'hcth' : build_hcth_superfunctional, 'hcth120' : build_hcth120_superfunctional, 'hcth147' : build_hcth147_superfunctional, 'hcth407' : build_hcth407_superfunctional, 'blyp-d' : build_blypd_superfunctional, 'pbe-d' : build_pbed_superfunctional, 'bp86-d' : build_bp86_superfunctional, 'b97-d' : build_b97d_superfunctional, 'b3lyp-d' : build_b3lypd_superfunctional, 'b3lyp5-d' : build_b3lyp5d_superfunctional, 'wsvwn' : build_wsvwn_superfunctional, 'wpbe' : build_wpbe_superfunctional, 'wpbe0' : build_wpbe0_superfunctional, 'wpbesol' : build_wpbesol_superfunctional, 'wpbesol0' : build_wpbesol0_superfunctional, 'wblyp' : build_wblyp_superfunctional, 'wb97' : build_wb97_superfunctional, 'wb97x' : build_wb97x_superfunctional, 'wb97x-d' : build_wb97xd_superfunctional, 'm05' : build_m05_superfunctional, 'm05-2x' : build_m05_2x_superfunctional, #'m06-2x' : build_m06_2x_superfunctional, }
[docs]def build_superfunctional(alias, npoints, deriv): name = alias.lower() return superfunctionals[name](name, npoints, deriv)
[docs]def superfunctional_list(): val = [] for key in superfunctionals.keys(): val.append(superfunctionals[key](key, 1, 1)) return val
[docs]def test_ccl_functional(functional, ccl_functional): check = True if (not os.path.exists('data_pt_%s.html' % (ccl_functional))): os.system('wget ftp://ftp.dl.ac.uk/qcg/dft_library/data_pt_%s.html' % ccl_functional) fh = open('data_pt_%s.html' % (ccl_functional)) lines = fh.readlines() fh.close() points = [] point = {} rho_line = re.compile(r'^\s*rhoa=\s*(-?\d+\.\d+E[+-]\d+)\s*rhob=\s*(-?\d+\.\d+E[+-]\d+)\s*sigmaaa=\s*(-?\d+\.\d+E[+-]\d+)\s*sigmaab=\s*(-?\d+\.\d+E[+-]\d+)\s*sigmabb=\s*(-?\d+\.\d+E[+-]\d+)\s*') val_line = re.compile(r'^\s*(\w*)\s*=\s*(-?\d+\.\d+E[+-]\d+)') aliases = { 'zk' : 'v', 'vrhoa' : 'v_rho_a', 'vrhob' : 'v_rho_b', 'vsigmaaa' : 'v_gamma_aa', 'vsigmaab' : 'v_gamma_ab', 'vsigmabb' : 'v_gamma_bb', 'v2rhoa2' : 'v_rho_a_rho_a', 'v2rhoab' : 'v_rho_a_rho_b', 'v2rhob2' : 'v_rho_b_rho_b', 'v2rhoasigmaaa' : 'v_rho_a_gamma_aa', 'v2rhoasigmaab' : 'v_rho_a_gamma_ab', 'v2rhoasigmabb' : 'v_rho_a_gamma_bb', 'v2rhobsigmaaa' : 'v_rho_b_gamma_aa', 'v2rhobsigmaab' : 'v_rho_b_gamma_ab', 'v2rhobsigmabb' : 'v_rho_b_gamma_bb', 'v2sigmaaa2' : 'v_gamma_aa_gamma_aa', 'v2sigmaaaab' : 'v_gamma_aa_gamma_ab', 'v2sigmaaabb' : 'v_gamma_aa_gamma_bb', 'v2sigmaab2' : 'v_gamma_ab_gamma_ab', 'v2sigmaabbb' : 'v_gamma_ab_gamma_bb', 'v2sigmabb2' : 'v_gamma_bb_gamma_bb', } for line in lines: mobj = re.match(rho_line, line) if (mobj): if len(point): points.append(point) point = {} point['rho_a'] = float(mobj.group(1)) point['rho_b'] = float(mobj.group(2)) point['gamma_aa'] = float(mobj.group(3)) point['gamma_ab'] = float(mobj.group(4)) point['gamma_bb'] = float(mobj.group(5)) continue mobj = re.match(val_line, line) if (mobj): point[aliases[mobj.group(1)]] = float(mobj.group(2)) points.append(point) N = len(points) rho_a = PsiMod.Vector(N) rho_b = PsiMod.Vector(N) gamma_aa = PsiMod.Vector(N) gamma_ab = PsiMod.Vector(N) gamma_bb = PsiMod.Vector(N) tau_a = PsiMod.Vector(N) tau_b = PsiMod.Vector(N) index = 0 for point in points: rho_a[index] = point['rho_a'] rho_b[index] = point['rho_b'] gamma_aa[index] = point['gamma_aa'] gamma_ab[index] = point['gamma_ab'] gamma_bb[index] = point['gamma_bb'] index = index + 1 super = build_superfunctional(functional, N, 1) super.test_functional(rho_a, rho_b, gamma_aa, gamma_ab, gamma_bb, tau_a, tau_b) v = super.value('V') v_rho_a = super.value('V_RHO_A') v_rho_b = super.value('V_RHO_B') v_gamma_aa = super.value('V_GAMMA_AA') v_gamma_ab = super.value('V_GAMMA_AB') v_gamma_bb = super.value('V_GAMMA_BB') if not v_gamma_aa: v_gamma_aa = tau_a v_gamma_ab = tau_a v_gamma_bb = tau_a tasks = ['v', 'v_rho_a', 'v_rho_b', 'v_gamma_aa', 'v_gamma_ab', 'v_gamma_bb'] mapping = { 'v': v, 'v_rho_a': v_rho_a, 'v_rho_b': v_rho_b, 'v_gamma_aa': v_gamma_aa, 'v_gamma_ab': v_gamma_ab, 'v_gamma_bb': v_gamma_bb, } super.print_detail(3) index = 0 for point in points: PsiMod.print_out('rho_a= %11.3E, rho_b= %11.3E, gamma_aa= %11.3E, gamma_ab= %11.3E, gamma_bb= %11.3E\n' % (rho_a[index], rho_b[index], gamma_aa[index], gamma_ab[index], gamma_bb[index])) for task in tasks: v_ref = point[task] v_obs = mapping[task][index] delta = v_obs - v_ref if (v_ref == 0.0): epsilon = 0.0 else: epsilon = abs(delta / v_ref) if (epsilon < 1.0E-11): passed = 'PASSED' else: passed = 'FAILED' check = False PsiMod.print_out('\t%-15s %24.16E %24.16E %24.16E %24.16E %6s\n' % (task, v_ref, v_obs, delta, epsilon, passed)) index = index + 1 PsiMod.print_out('\n') return check