def test_sgx_jk(self): mol = gto.Mole() mol.build( verbose=0, atom=[["O", (0., 0., 0.)], [1, (0., -0.757, 0.587)], [1, (0., 0.757, 0.587)]], basis='ccpvdz', ) nao = mol.nao #numpy.random.seed(1) #dm = numpy.random.random((nao,nao)) #dm = dm + dm.T mf = scf.UHF(mol) dm = mf.get_init_guess() sgxobj = sgx.SGX(mol) sgxobj.grids = sgx_jk.get_gridss(mol, 0, 1e-10) with lib.temporary_env(sgxobj, debug=False): vj, vk = sgx_jk.get_jk_favork(sgxobj, dm) #self.assertAlmostEqual(lib.finger(vj), -19.25235595827077, 9) #self.assertAlmostEqual(lib.finger(vk), -16.711443399467267, 9) with lib.temporary_env(sgxobj, debug=True): vj1, vk1 = sgx_jk.get_jk_favork(sgxobj, dm) self.assertAlmostEqual(abs(vj1 - vj).max(), 0, 9) self.assertAlmostEqual(abs(vk1 - vk).max(), 0, 9) with lib.temporary_env(sgxobj, debug=False): vj, vk = sgx_jk.get_jk_favorj(sgxobj, dm) #self.assertAlmostEqual(lib.finger(vj), -19.176378579757973, 9) #self.assertAlmostEqual(lib.finger(vk), -16.750915356787406, 9) with lib.temporary_env(sgxobj, debug=True): vj1, vk1 = sgx_jk.get_jk_favorj(sgxobj, dm) self.assertAlmostEqual(abs(vj1 - vj).max(), 0, 9) self.assertAlmostEqual(abs(vk1 - vk).max(), 0, 9)
def test_rsh_get_jk(self): mol = gto.M(verbose = 0, atom = 'H 0 0 0; H 0 0 1', basis = 'ccpvdz', ) nao = mol.nao_nr() numpy.random.seed(1) dm = numpy.random.random((2,nao,nao)) sgxobj = sgx.SGX(mol) sgxobj.grids = sgx_jk.get_gridss(mol, 0, 1e-7) vj, vk = sgxobj.get_jk(dm, hermi=0, omega=1.1) self.assertAlmostEqual(lib.finger(vj), 4.78603728911563 , 9) self.assertAlmostEqual(lib.finger(vk), 8.614628576953983, 9) vj1, vk1 = scf.hf.get_jk(mol, dm, hermi=0, omega=1.1) self.assertAlmostEqual(abs(vj-vj1).max(), 0, 2) self.assertAlmostEqual(abs(vk-vk1).max(), 0, 2)
from pyscf import scf from pyscf.sgx import sgx mol = gto.Mole() mol.build( verbose = 0, atom = [["O" , (0. , 0. , 0.)], [1 , (0. , -0.757 , 0.587)], [1 , (0. , 0.757 , 0.587)] ], basis = 'ccpvdz', ) dm = scf.RHF(mol).run().make_rdm1() vjref, vkref = scf.hf.get_jk(mol, dm) print(numpy.einsum('ij,ji->', vjref, dm)) print(numpy.einsum('ij,ji->', vkref, dm)) sgxobj = sgx.SGX(mol) sgxobj.grids = get_gridss(mol, 0, 1e-10) with lib.temporary_env(sgxobj, debug=True): vj, vk = get_jk_favork(sgxobj, dm) print(numpy.einsum('ij,ji->', vj, dm)) print(numpy.einsum('ij,ji->', vk, dm)) print(abs(vjref-vj).max().max()) print(abs(vkref-vk).max().max()) with lib.temporary_env(sgxobj, debug=False): vj1, vk1 = get_jk_favork(sgxobj, dm) print(abs(vj - vj1).max()) print(abs(vk - vk1).max()) with lib.temporary_env(sgxobj, debug=True): vj, vk = get_jk_favorj(sgxobj, dm) print(numpy.einsum('ij,ji->', vj, dm))