def test_get_jk(self): df = fft.FFTDF(cell) dm = mf0.get_init_guess() vj0, vk0 = get_jk(mf0, cell, dm, kpt=kpts[0]) vj1, vk1 = df.get_jk(dm, kpts=kpts[0], exxdiv=None) self.assertTrue(vj1.dtype == numpy.complex128) self.assertTrue(vk1.dtype == numpy.complex128) self.assertTrue(np.allclose(vj0, vj1, atol=1e-9, rtol=1e-9)) self.assertTrue(np.allclose(vk0, vk1, atol=1e-9, rtol=1e-9)) ej1 = numpy.einsum('ij,ji->', vj1, dm) ek1 = numpy.einsum('ij,ji->', vk1, dm) self.assertAlmostEqual(ej1, 2.3002596914518700, 9) self.assertAlmostEqual(ek1, 3.3165691757797346, 9) dm = mf0.get_init_guess() vj0, vk0 = get_jk(mf0, cell, dm) vj1, vk1 = df.get_jk(dm, exxdiv=None) self.assertTrue(vj1.dtype == numpy.float64) self.assertTrue(vk1.dtype == numpy.float64) self.assertTrue(np.allclose(vj0, vj1, atol=1e-9, rtol=1e-9)) self.assertTrue(np.allclose(vk0, vk1, atol=1e-9, rtol=1e-9)) ej1 = numpy.einsum('ij,ji->', vj1, dm) ek1 = numpy.einsum('ij,ji->', vk1, dm) self.assertAlmostEqual(ej1, 2.4673139106639925, 9) self.assertAlmostEqual(ek1, 3.6886674521354221, 9)
def test_get_jk(self): df = fft.FFTDF(cell) dm = mf0.get_init_guess() vj0, vk0 = get_jk(mf0, cell, dm, kpt=kpts[0]) vj1, vk1 = df.get_jk(dm, kpts=kpts[0], exxdiv=None) self.assertTrue(vj1.dtype == numpy.complex128) self.assertTrue(vk1.dtype == numpy.complex128) self.assertTrue(np.allclose(vj0, vj1, atol=1e-9, rtol=1e-9)) self.assertTrue(np.allclose(vk0, vk1, atol=1e-9, rtol=1e-9)) ej1 = numpy.einsum('ij,ji->', vj1, dm) ek1 = numpy.einsum('ij,ji->', vk1, dm) self.assertAlmostEqual(ej1, 2.3002596914518700*(6/6.82991739766009)**2, 9) self.assertAlmostEqual(ek1, 3.3165691757797346*(6/6.82991739766009)**2, 9) dm = mf0.get_init_guess() vj0, vk0 = get_jk(mf0, cell, dm) vj1, vk1 = df.get_jk(dm, exxdiv=None) self.assertTrue(vj1.dtype == numpy.float64) self.assertTrue(vk1.dtype == numpy.float64) self.assertTrue(np.allclose(vj0, vj1, atol=1e-9, rtol=1e-9)) self.assertTrue(np.allclose(vk0, vk1, atol=1e-9, rtol=1e-9)) ej1 = numpy.einsum('ij,ji->', vj1, dm) ek1 = numpy.einsum('ij,ji->', vk1, dm) self.assertAlmostEqual(ej1, 2.4673139106639925*(6/6.82991739766009)**2, 9) self.assertAlmostEqual(ek1, 3.6886674521354221*(6/6.82991739766009)**2, 9) # issue #1114 dm = numpy.eye(cell.nao, dtype=int) vj, vk = df.get_jk(dm, exxdiv=None) self.assertAlmostEqual(lib.fp(vj), 3.7955873127283377, 9) self.assertAlmostEqual(lib.fp(vk), 4.290076429522121, 9)
def test_get_jk_kpts(self): df = fft.FFTDF(cell) dm = mf0.get_init_guess() nkpts = len(kpts) dms = [dm] * nkpts vj0, vk0 = get_jk_kpts(mf0, cell, dms, kpts=kpts) vj1, vk1 = df.get_jk(dms, kpts=kpts, exxdiv=None) self.assertTrue(vj1.dtype == numpy.complex128) self.assertTrue(vk1.dtype == numpy.complex128) self.assertTrue(np.allclose(vj0, vj1, atol=1e-9, rtol=1e-9)) self.assertTrue(np.allclose(vk0, vk1, atol=1e-9, rtol=1e-9)) ej1 = numpy.einsum('xij,xji->', vj1, dms) / len(kpts) ek1 = numpy.einsum('xij,xji->', vk1, dms) / len(kpts) self.assertAlmostEqual(ej1, 2.3163352969873445, 9) self.assertAlmostEqual(ek1, 7.7311228144548600, 9) numpy.random.seed(1) kpts_band = numpy.random.random((2, 3)) vj1, vk1 = df.get_jk(dms, kpts=kpts, kpts_band=kpts_band, exxdiv=None) self.assertAlmostEqual(lib.finger(vj1), 3.437188138446714 + 0.1360466492092307j, 9) self.assertAlmostEqual(lib.finger(vk1), 7.479986541097368 + 1.1980593415201204j, 9) nao = dm.shape[0] mo_coeff = numpy.random.random((nkpts, nao, nao)) mo_occ = numpy.array(numpy.random.random((nkpts, nao)) > .6, dtype=numpy.double) dms = numpy.einsum('kpi,ki,kqi->kpq', mo_coeff, mo_occ, mo_coeff) dms = lib.tag_array(lib.asarray(dms), mo_coeff=mo_coeff, mo_occ=mo_occ) vk1 = df.get_jk(dms, kpts=kpts, kpts_band=kpts_band, exxdiv=None)[1] self.assertAlmostEqual(lib.finger(vk1), 10.239828255099447 + 2.1190549216896182j, 9)
def test_get_jk(self): df = fft.FFTDF(cell) dm = mf0.get_init_guess() vj0, vk0 = get_jk(mf0, cell, dm, kpt=kpts[0]) vj1, vk1 = df.get_jk(dm, kpts=kpts[0], exxdiv=None) self.assertTrue(vj1.dtype == numpy.complex128) self.assertTrue(vk1.dtype == numpy.complex128) self.assertTrue(np.allclose(vj0, vj1, atol=1e-9, rtol=1e-9)) self.assertTrue(np.allclose(vk0, vk1, atol=1e-9, rtol=1e-9)) ej1 = numpy.einsum('ij,ji->', vj1, dm) ek1 = numpy.einsum('ij,ji->', vk1, dm) self.assertAlmostEqual(ej1, 2.2642719646779832, 9) self.assertAlmostEqual(ek1, 3.2581479552187513, 9) dm = mf0.get_init_guess() vj0, vk0 = get_jk(mf0, cell, dm) vj1, vk1 = df.get_jk(dm, exxdiv=None) self.assertTrue(vj1.dtype == numpy.float64) self.assertTrue(vk1.dtype == numpy.float64) self.assertTrue(np.allclose(vj0, vj1, atol=1e-9, rtol=1e-9)) self.assertTrue(np.allclose(vk0, vk1, atol=1e-9, rtol=1e-9)) ej1 = numpy.einsum('ij,ji->', vj1, dm) ek1 = numpy.einsum('ij,ji->', vk1, dm) self.assertAlmostEqual(ej1, 2.4216815457582102, 9) self.assertAlmostEqual(ek1, 3.6061858403253977, 9)
def test_ao2mo_7d(self): L = 3. n = 6 cell = pgto.Cell() cell.a = numpy.diag([L,L,L]) cell.mesh = [n,n,n] cell.atom = '''He 2. 2.2 2. He 1.2 1. 1.''' cell.basis = {'He': [[0, (1.2, 1)], [1, (0.6, 1)]]} cell.verbose = 0 cell.build(0,0) kpts = cell.make_kpts([1,3,1]) nkpts = len(kpts) nao = cell.nao_nr() numpy.random.seed(1) mo =(numpy.random.random((nkpts,nao,nao)) + numpy.random.random((nkpts,nao,nao))*1j) with_df = fft.FFTDF(cell, kpts) out = with_df.ao2mo_7d(mo, kpts) ref = numpy.empty_like(out) kconserv = kpts_helper.get_kconserv(cell, kpts) for ki, kj, kk in kpts_helper.loop_kkk(nkpts): kl = kconserv[ki, kj, kk] tmp = with_df.ao2mo((mo[ki], mo[kj], mo[kk], mo[kl]), kpts[[ki,kj,kk,kl]]) ref[ki,kj,kk] = tmp.reshape([nao]*4) self.assertAlmostEqual(abs(out-ref).max(), 0, 12)
def test_get_eri_0123(self): odf = aft.AFTDF(cell1) ref = kdf0.get_eri(kpts) eri1111 = odf.get_eri(kpts) self.assertTrue(np.allclose(eri1111, ref, atol=1e-8, rtol=1e-8)) self.assertAlmostEqual(finger(eri1111), (1.2917759427391706-0.013340252488069412j), 9) ref = fft.FFTDF(cell1).get_mo_eri([numpy.eye(cell1.nao_nr())]*4, kpts) self.assertTrue(np.allclose(eri1111, ref, atol=1e-8, rtol=1e-8))
def test_get_mo_eri1(self): df = fft.FFTDF(cell2) nao = cell2.nao_nr() numpy.random.seed(5) mos = (numpy.random.random((4, nao, nao)) + numpy.random.random( (4, nao, nao)) * 1j) eri_mo0 = get_mo_eri(cell2, mos, kpts1) eri_mo1 = df.get_mo_eri(mos, kpts1) self.assertTrue(np.allclose(eri_mo1, eri_mo0, atol=1e-9, rtol=1e-9))
def test_get_eri_0123(self): odf = aft.AFTDF(cell1) ref = kdf0.get_eri(kpts) eri1111 = odf.get_eri(kpts) self.assertAlmostEqual(abs(eri1111-ref).max(), 0, 9) self.assertAlmostEqual(finger(eri1111), (1.2917759427391706-0.013340252488069412j), 9) ref = fft.FFTDF(cell1).get_mo_eri([numpy.eye(cell1.nao_nr())]*4, kpts) self.assertAlmostEqual(abs(eri1111-ref).max(), 0, 9)
def test_get_eri_0011(self): odf = aft.AFTDF(cell1) ref = kdf0.get_eri((kpts[0],kpts[0],kpts[1],kpts[1])) eri0011 = odf.get_eri((kpts[0],kpts[0],kpts[1],kpts[1])) self.assertTrue(np.allclose(eri0011, ref, atol=1e-3, rtol=1e-3)) self.assertAlmostEqual(finger(eri0011), (1.2410162858084512+0.00074485383749912936j), 9) ref = fft.FFTDF(cell1).get_mo_eri([numpy.eye(cell1.nao_nr())]*4, (kpts[0],kpts[0],kpts[1],kpts[1])) eri0011 = odf.get_eri((kpts[0],kpts[0],kpts[1],kpts[1])) self.assertTrue(np.allclose(eri0011, ref, atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(eri0011), (1.2410162860852818+0.00074485383748954838j), 9)
def test_get_j_non_hermitian(self): kpt = kpts[0] numpy.random.seed(2) nao = cell2.nao dm = numpy.random.random((nao,nao)) mydf = fft.FFTDF(cell2) v1 = mydf.get_jk(dm, hermi=0, kpts=kpts[1], with_k=False)[0] eri = mydf.get_eri([kpts[1]]*4).reshape(nao,nao,nao,nao) ref = numpy.einsum('ijkl,ji->kl', eri, dm) self.assertAlmostEqual(abs(ref - v1).max(), 0, 12) self.assertTrue(abs(ref-ref.T.conj()).max() > 1e-5)
def test_get_pp(self): v0 = pgto.pseudo.get_pp(cell, kpts[0]) v1 = fft.FFTDF(cell).get_pp(kpts) self.assertTrue(np.allclose(v0, v1[0], atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(v1[0]), (-5.6240249083785869+0.22094834302524968j), 8) v0 = pgto.pseudo.get_pp(cell, kpts[1]) self.assertTrue(np.allclose(v0, v1[1], atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(v1[1]), (-5.5387702576467603+1.0439333717227581j) , 8) self.assertAlmostEqual(finger(v1[2]), (-6.0530899866313366+0.2817289667029651j), 8) self.assertAlmostEqual(finger(v1[3]), (-5.6011543542444446+0.27597306418805201j), 8)
def test_get_nuc(self): v0 = get_nuc(cell, kpts[0]) v1 = fft.FFTDF(cell).get_nuc(kpts) self.assertTrue(np.allclose(v0, v1[0], atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(v1[0]), (-5.7646608099493841+0.19126294430138713j), 8) v0 = get_nuc(cell, kpts[1]) self.assertTrue(np.allclose(v0, v1[1], atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(v1[1]), (-5.6567258309199193+0.86813371243952175j), 8) self.assertAlmostEqual(finger(v1[2]), (-6.1528952645454895+0.09517054428060109j), 8) self.assertAlmostEqual(finger(v1[3]), (-5.7445962879770942+0.24611951427601772j), 8)
def test_aft_get_ao_eri(self): df0 = fft.FFTDF(cell1) df = aft.AFTDF(cell1) eri0 = df0.get_ao_eri(compact=True) eri1 = df.get_ao_eri(compact=True) self.assertAlmostEqual(abs(eri0 - eri1).max(), 0, 9) eri0 = df0.get_ao_eri(kpts[0]) eri1 = df.get_ao_eri(kpts[0]) self.assertAlmostEqual(abs(eri0 - eri1).max(), 0, 9) eri0 = df0.get_ao_eri(kpts) eri1 = df.get_ao_eri(kpts) self.assertAlmostEqual(abs(eri0 - eri1).max(), 0, 9)
def test_get_ao_eri(self): df = fft.FFTDF(cell) eri0 = get_ao_eri(cell) eri1 = df.get_ao_eri(compact=True) self.assertTrue(np.allclose(eri0, eri1, atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(eri1), 0.80425358275734926, 8) eri0 = get_ao_eri(cell, kpts[0]) eri1 = df.get_ao_eri(kpts[0]) self.assertTrue(np.allclose(eri0, eri1, atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(eri1), (2.9346374584901898-0.20479054936744959j), 8) eri4 = df.get_ao_eri(kpts) self.assertAlmostEqual(finger(eri4), (0.33709288394542991-0.94185725001175313j), 8)
def test_get_jk_kpts(self): df = fft.FFTDF(cell) dm = mf0.get_init_guess() dms = [dm] * len(kpts) vj0, vk0 = get_jk_kpts(mf0, cell, dms, kpts=kpts) vj1, vk1 = df.get_jk(dms, kpts=kpts, exxdiv=None) self.assertTrue(vj1.dtype == numpy.complex128) self.assertTrue(vk1.dtype == numpy.complex128) self.assertTrue(np.allclose(vj0, vj1, atol=1e-9, rtol=1e-9)) self.assertTrue(np.allclose(vk0, vk1, atol=1e-9, rtol=1e-9)) ej1 = numpy.einsum('xij,xji->', vj1, dms) / len(kpts) ek1 = numpy.einsum('xij,xji->', vk1, dms) / len(kpts) self.assertAlmostEqual(ej1, 2.2785994326264971, 9) self.assertAlmostEqual(ek1, 7.5122832961825941, 9)
def test_get_eri_0110(self): odf = aft.AFTDF(cell1) ref = kdf0.get_eri((kpts[0],kpts[1],kpts[1],kpts[0])) eri0110 = odf.get_eri((kpts[0],kpts[1],kpts[1],kpts[0])) self.assertTrue(np.allclose(eri0110, ref, atol=1e-6, rtol=1e-6)) eri0110 = odf.get_eri((kpts[0]+1e-8,kpts[1]+1e-8,kpts[1],kpts[0])) self.assertTrue(np.allclose(eri0110, ref, atol=1e-6, rtol=1e-6)) self.assertAlmostEqual(finger(eri0110), (1.2928399254827956-0.011820590601969154j), 9) ref = fft.FFTDF(cell1).get_mo_eri([numpy.eye(cell1.nao_nr())]*4, (kpts[0],kpts[1],kpts[1],kpts[0])) eri0110 = odf.get_eri((kpts[0],kpts[1],kpts[1],kpts[0])) self.assertTrue(np.allclose(eri0110, ref, atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(eri0110), (1.2928399254827956-0.011820590601969154j), 9) eri0110 = odf.get_eri((kpts[0]+1e-8,kpts[1]+1e-8,kpts[1],kpts[0])) self.assertTrue(np.allclose(eri0110, ref, atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(eri0110), (1.2928399254827956-0.011820590601969154j), 9)
def test_get_eri_gamma(self): odf = aft.AFTDF(cell1) ref = odf.get_eri(compact=True) df = fft.FFTDF(cell1) eri0000 = df.get_eri(compact=True) self.assertTrue(eri0000.dtype == numpy.double) self.assertTrue(np.allclose(eri0000, ref, atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(eri0000), 0.23714016293926865, 9) ref = odf.get_eri((kpts[0],kpts[0],kpts[0],kpts[0])) eri1111 = df.get_eri((kpts[0],kpts[0],kpts[0],kpts[0])) self.assertTrue(np.allclose(eri1111, ref, atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(eri1111), (1.2410388899583582-5.2370501878355006e-06j), 9) eri1111 = df.get_eri((kpts[0]+1e-8,kpts[0]+1e-8,kpts[0],kpts[0])) self.assertTrue(np.allclose(eri1111, ref, atol=1e-9, rtol=1e-9)) self.assertAlmostEqual(finger(eri1111), (1.2410388899583582-5.2370501878355006e-06j), 9)
def test_aft_get_ao_eri(self): df0 = fft.FFTDF(cell) df = aft.AFTDF(cell) eri0 = df0.get_ao_eri(compact=True) eri1 = df.get_ao_eri(compact=True) self.assertTrue(np.allclose(eri0, eri1, atol=1e-5, rtol=1e-5)) self.assertAlmostEqual(finger(eri1), 0.80425361966560172, 8) eri0 = df0.get_ao_eri(kpts[0]) eri1 = df.get_ao_eri(kpts[0]) self.assertTrue(np.allclose(eri0, eri1, atol=1e-5, rtol=1e-5)) self.assertAlmostEqual(finger(eri1), (2.9346374476387949-0.20479054936779137j), 8) eri0 = df0.get_ao_eri(kpts) eri1 = df.get_ao_eri(kpts) self.assertTrue(np.allclose(eri0, eri1, atol=1e-5, rtol=1e-5)) self.assertAlmostEqual(finger(eri1), (0.33709287302019619-0.94185725020966538j), 8)
def test_get_mo_eri(self): df0 = fft.FFTDF(cell) odf = aft.AFTDF(cell) nao = cell.nao_nr() numpy.random.seed(5) mo =(numpy.random.random((nao,nao)) + numpy.random.random((nao,nao))*1j) eri_mo0 = df0.get_mo_eri((mo,)*4, kpts) eri_mo1 = odf.get_mo_eri((mo,)*4, kpts) self.assertTrue(np.allclose(eri_mo1, eri_mo0, atol=1e-7, rtol=1e-7)) kpts_t = (kpts[2],kpts[3],kpts[0],kpts[1]) eri_mo2 = df0.get_mo_eri((mo,)*4, kpts_t) eri_mo2 = eri_mo2.reshape((nao,)*4).transpose(2,3,0,1).reshape(nao**2,-1) self.assertTrue(np.allclose(eri_mo2, eri_mo0, atol=1e-7, rtol=1e-7)) eri_mo0 = df0.get_mo_eri((mo,)*4, (kpts[0],)*4) eri_mo1 = odf.get_mo_eri((mo,)*4, (kpts[0],)*4) self.assertTrue(np.allclose(eri_mo1, eri_mo0, atol=1e-7, rtol=1e-7)) eri_mo0 = df0.get_mo_eri((mo,)*4, (kpts[0],kpts[1],kpts[1],kpts[0],)) eri_mo1 = odf.get_mo_eri((mo,)*4, (kpts[0],kpts[1],kpts[1],kpts[0],)) self.assertTrue(np.allclose(eri_mo1, eri_mo0, atol=1e-7, rtol=1e-7)) eri_mo0 = df0.get_mo_eri((mo,)*4, (kpt0,kpt0,kpts[0],kpts[0],)) eri_mo1 = odf.get_mo_eri((mo,)*4, (kpt0,kpt0,kpts[0],kpts[0],)) self.assertTrue(np.allclose(eri_mo1, eri_mo0, atol=1e-7, rtol=1e-7)) eri_mo0 = df0.get_mo_eri((mo,)*4, (kpts[0],kpts[0],kpt0,kpt0,)) eri_mo1 = odf.get_mo_eri((mo,)*4, (kpts[0],kpts[0],kpt0,kpt0,)) self.assertTrue(np.allclose(eri_mo1, eri_mo0, atol=1e-7, rtol=1e-7)) mo1 = mo[:,:nao//2+1] eri_mo0 = df0.get_mo_eri((mo1,mo,mo,mo1), (kpts[0],)*4) eri_mo1 = odf.get_mo_eri((mo1,mo,mo,mo1), (kpts[0],)*4) self.assertTrue(np.allclose(eri_mo1, eri_mo0, atol=1e-7, rtol=1e-7)) eri_mo0 = df0.get_mo_eri((mo1,mo,mo1,mo), (kpts[0],kpts[1],kpts[1],kpts[0],)) eri_mo1 = odf.get_mo_eri((mo1,mo,mo1,mo), (kpts[0],kpts[1],kpts[1],kpts[0],)) self.assertTrue(np.allclose(eri_mo1, eri_mo0, atol=1e-7, rtol=1e-7))