def test_B2PLYP_hess(self): from pkg_resources import resource_filename from pyxdh.Utilities.test_molecules import Mol_H2O2 from pyxdh.Utilities import FormchkInterface from pyxdh.DerivOnce import GradMP2 import pickle H2O2 = Mol_H2O2(xc="0.53*HF + 0.47*B88, 0.73*LYP") config = {"scf_eng": H2O2.gga_eng, "cc": 0.27} grad_helper = GradMP2(config) config = { "deriv_A": grad_helper, "deriv_B": grad_helper, } helper = HessMP2(config) E_2 = helper.E_2 formchk = FormchkInterface( resource_filename("pyxdh", "Validation/gaussian/H2O2-B2PLYP-freq.fchk")) assert (np.allclose(E_2, formchk.hessian(), atol=1e-5, rtol=1e-4)) with open( resource_filename( "pyxdh", "Validation/numerical_deriv/mp2_hessian_b2plyp.dat"), "rb") as f: ref_hess = pickle.load(f)["hess"] assert (np.allclose(E_2, ref_hess, atol=1e-6, rtol=1e-4))
def test_MP2_hess(self): from pkg_resources import resource_filename from pyxdh.Utilities.test_molecules import Mol_H2O2 from pyxdh.Utilities import FormchkInterface from pyxdh.DerivOnce import GradMP2 H2O2 = Mol_H2O2() config = { "scf_eng": H2O2.hf_eng, "rotation": True, } grad_helper = GradMP2(config) config = { "deriv_A": grad_helper, "deriv_B": grad_helper, } helper = HessMP2(config) E_2 = helper.E_2 formchk = FormchkInterface( resource_filename("pyxdh", "Validation/gaussian/H2O2-MP2-freq.fchk")) assert (np.allclose(E_2, formchk.hessian(), atol=1e-6, rtol=1e-4))
def test_r_b2plyp_grad(self): scf_eng = dft.RKS(self.mol, xc="0.53*HF + 0.47*B88, 0.73*LYP"); scf_eng.grids = self.grids; scf_eng.run() gradh = GradMP2({"scf_eng": scf_eng, "cc": 0.27, "cphf_grids": self.grids_cphf}) formchk = FormchkInterface(resource_filename("pyxdh", "Validation/gaussian/NH3-B2PLYP-freq.fchk")) # ASSERT: energy - Gaussian assert np.allclose(gradh.eng, formchk.total_energy()) # ASSERT: grad - Gaussian assert np.allclose(gradh.E_1, formchk.grad(), atol=1e-6, rtol=1e-4)
def mol_to_grad_helper(mol): print("Processing...") H2O2 = Mol_H2O2(mol=mol, xc="0.53*HF + 0.47*B88, 0.73*LYP") config = { "scf_eng": H2O2.gga_eng, "cc": 0.27 } helper = GradMP2(config) return helper
def test_r_mp2_hess(self): scf_eng = scf.RHF(self.mol).run() gradh = GradMP2({"scf_eng": scf_eng}) hessh = HessMP2({"deriv_A": gradh}) formchk = FormchkInterface( resource_filename("pyxdh", "Validation/gaussian/NH3-MP2-freq.fchk")) # ASSERT: hessian - Gaussian assert np.allclose(hessh.E_2, formchk.hessian(), atol=1e-6, rtol=1e-4)
def test_r_mp2_dipderiv(self): scf_eng = scf.RHF(self.mol).run() gradh = GradMP2({"scf_eng": scf_eng}) diph = DipoleMP2({"scf_eng": scf_eng}) ddh = DipDerivMP2({"deriv_A": diph, "deriv_B": gradh}) formchk = FormchkInterface( resource_filename("pyxdh", "Validation/gaussian/NH3-MP2-freq.fchk")) # ASSERT: hessian - Gaussian assert np.allclose(ddh.E_2.T, formchk.dipolederiv(), atol=5e-6, rtol=2e-4)
def test_r_mp2_grad(self): scf_eng = scf.RHF(self.mol).run() mp2_eng = mp.MP2(scf_eng).run() mp2_grad = mp2_eng.Gradients().run() gradh = GradMP2({"scf_eng": scf_eng}) formchk = FormchkInterface(resource_filename("pyxdh", "Validation/gaussian/NH3-MP2-freq.fchk")) # ASSERT: energy - Gaussian assert np.allclose(gradh.eng, formchk.total_energy()) # ASSERT: energy - PySCF assert np.allclose(gradh.eng, mp2_eng.e_tot) # ASSERT: grad - Gaussian assert np.allclose(gradh.E_1, formchk.grad(), atol=1e-6, rtol=1e-4) # ASSERT: grad - PySCF assert np.allclose(gradh.E_1, mp2_grad.de, atol=1e-6, rtol=1e-4)
def test_MP2_dipderiv(self): from pkg_resources import resource_filename from pyxdh.Utilities.test_molecules import Mol_H2O2 from pyxdh.Utilities import FormchkInterface from pyxdh.DerivOnce import DipoleMP2, GradMP2 H2O2 = Mol_H2O2() config = {"scf_eng": H2O2.hf_eng, "cphf_tol": 1e-10} dip_helper = DipoleMP2(config) grad_helper = GradMP2(config) config = {"deriv_A": dip_helper, "deriv_B": grad_helper} helper = DipDerivMP2(config) E_2 = helper.E_2 formchk = FormchkInterface(resource_filename("pyxdh", "Validation/gaussian/H2O2-MP2-freq.fchk")) assert(np.allclose(E_2.T, formchk.dipolederiv(), atol=1e-6, rtol=1e-4))
def test_B2PLYP_dipderiv(self): from pkg_resources import resource_filename from pyxdh.Utilities.test_molecules import Mol_H2O2 from pyxdh.Utilities import FormchkInterface from pyxdh.DerivOnce import DipoleMP2, GradMP2 H2O2 = Mol_H2O2(xc="0.53*HF + 0.47*B88, 0.73*LYP") grids_cphf = H2O2.gen_grids(50, 194) config = {"scf_eng": H2O2.gga_eng, "cc": 0.27, "cphf_grids": grids_cphf} dip_helper = DipoleMP2(config) grad_helper = GradMP2(config) config = {"deriv_A": dip_helper, "deriv_B": grad_helper} helper = DipDerivMP2(config) E_2 = helper.E_2 formchk = FormchkInterface(resource_filename("pyxdh", "Validation/gaussian/H2O2-B2PLYP-freq.fchk")) assert(np.allclose(E_2.T, formchk.dipolederiv(), atol=1e-6, rtol=1e-4))