def test_grad(self): coords = [(0.0, 0.1, 0.0)] charges = [1.00] mf = itrf.mm_charge(scf.RHF(mol), coords, charges).run() hfg = itrf.mm_charge_grad(grad.RHF(mf), coords, charges).run() self.assertAlmostEqual(numpy.linalg.norm(hfg.de), 26.978089280783195, 9) mfs = mf.as_scanner() e1 = mfs(''' H -0.00000000 -0.000 0.001 H -0.00000000 -0.000 1. H -0.00000000 -0.82 0. H -0.91000000 -0.020 0. ''') e2 = mfs(''' H -0.00000000 -0.000 -0.001 H -0.00000000 -0.000 1. H -0.00000000 -0.82 0. H -0.91000000 -0.020 0. ''') self.assertAlmostEqual((e1 - e2) / 0.002 * lib.param.BOHR, hfg.de[0, 2], 5) bak = pyscf.DEBUG pyscf.DEBUG = 1 ref = hfg.get_hcore() pyscf.DEBUG = 0 v = hfg.get_hcore() self.assertAlmostEqual(abs(ref - v).max(), 0, 12) pyscf.DEBUG = bak
def test_grad(self): coords = [(0.0,0.1,0.0)] charges = [1.00] mf = itrf.mm_charge(scf.RHF(mol), coords, charges).run() hfg = itrf.mm_charge_grad(grad.RHF(mf), coords, charges).run() self.assertAlmostEqual(numpy.linalg.norm(hfg.de), 26.978089280783195, 9) mfs = mf.as_scanner() e1 = mfs(''' H -0.00000000 -0.000 0.001 H -0.00000000 -0.000 1. H -0.00000000 -0.82 0. H -0.91000000 -0.020 0. ''') e2 = mfs(''' H -0.00000000 -0.000 -0.001 H -0.00000000 -0.000 1. H -0.00000000 -0.82 0. H -0.91000000 -0.020 0. ''') self.assertAlmostEqual((e1 - e2)/0.002*lib.param.BOHR, hfg.de[0,2], 5) bak = pyscf.DEBUG pyscf.DEBUG = 1 ref = hfg.get_hcore() pyscf.DEBUG = 0 v = hfg.get_hcore() self.assertAlmostEqual(abs(ref-v).max(), 0, 12) pyscf.DEBUG = bak
def test_hcore_cart(self): coords = [(0.0, 0.1, 0.0)] charges = [1.00] mol = gto.M(verbose=0, atom='''C 0.000 -0.300 0.2 Ne 0.310 0.820 0.1''', basis='cc-pvdz', cart=True) mf = itrf.mm_charge(scf.RHF(mol), coords, charges) h = mf.get_hcore() self.assertAlmostEqual(lib.finger(h), -147.92831183612765, 9) h = mf.nuc_grad_method().get_hcore() self.assertEqual(h.shape, (3, 30, 30)) self.assertAlmostEqual(lib.finger(h), -178.29768724184771, 9)
def test_hcore_cart(self): coords = [(0.0,0.1,0.0)] charges = [1.00] mol = gto.M( verbose = 0, atom = '''C 0.000 -0.300 0.2 Ne 0.310 0.820 0.1''', basis = 'cc-pvdz', cart = True) mf = itrf.mm_charge(scf.RHF(mol), coords, charges) h = mf.get_hcore() self.assertAlmostEqual(lib.finger(h), -147.92831183612765, 9) h = mf.nuc_grad_method().get_hcore() self.assertEqual(h.shape, (3,30,30)) self.assertAlmostEqual(lib.finger(h), -178.29768724184771, 9)
def test_energy(self): coords = [(0.0,0.1,0.0)] charges = [1.00] mf = itrf.mm_charge(scf.RHF(mol), coords, charges) self.assertAlmostEqual(mf.kernel(), 2.0042702433049024, 9)
def test_energy(self): coords = [(0.0, 0.1, 0.0)] charges = [1.00] mf = itrf.mm_charge(scf.RHF(mol), coords, charges) self.assertAlmostEqual(mf.kernel(), 2.0042702433049024, 9)
def test_grad(self): coords = [(0.0,0.1,0.0)] charges = [1.00] mf = itrf.mm_charge(scf.RHF(mol), coords, charges).run() hfg = itrf.mm_charge_grad(grad.RHF(mf), coords, charges).run() self.assertAlmostEqual(numpy.linalg.norm(hfg.de), 30.316453059873059, 9)
#!/usr/bin/python from pyscf import gto, scf from pyscf.qmmm import itrf mol = gto.Mole() mol.atom = ''' O 0.00000000 0.00000000 -0.11081188 H -0.00000000 -0.84695236 0.59109389 H -0.00000000 0.89830571 0.52404783 ''' mol.basis = 'cc-pvdz' mol.verbose = 4 mol.build() coords = [(0.5, 0.6, 0.8)] charges = [-0.5] mf = itrf.mm_charge(scf.RHF(mol), coords, charges) mf = scf.RHF(mol) ehf = mf.kernel()