Ejemplo n.º 1
0
    def test_jk(self):
        mf0 = scf.RHF(cell)
        dm = mf0.get_init_guess()

        mydf = pwdf.PWDF(cell)
        mydf.gs = [5] * 3
        vj, vk = mydf.get_jk(dm)
        ej1 = numpy.einsum('ij,ji->', vj, dm)
        ek1 = numpy.einsum('ij,ji->', vk, dm)
        self.assertAlmostEqual(ej1, 3.0455881073561235, 9)
        self.assertAlmostEqual(ek1, 7.7905480251964629, 9)

        numpy.random.seed(12)
        nao = cell.nao_nr()
        dm = numpy.random.random((nao, nao))
        dm = dm + dm.T
        vj1, vk1 = mydf.get_jk(dm, hermi=0)
        ej1 = numpy.einsum('ij,ji->', vj1, dm)
        ek1 = numpy.einsum('ij,ji->', vk1, dm)
        self.assertAlmostEqual(ej1, 12.234106555081793, 9)
        self.assertAlmostEqual(ek1, 43.988705494650802, 9)

        numpy.random.seed(1)
        kpt = numpy.random.random(3)
        vj, vk = mydf.get_jk(dm, 1, kpt)
        ej1 = numpy.einsum('ij,ji->', vj, dm)
        ek1 = numpy.einsum('ij,ji->', vk, dm)
        self.assertAlmostEqual(ej1, 12.233546641482697, 9)
        self.assertAlmostEqual(ek1, 43.946958026023722, 9)
Ejemplo n.º 2
0
 def test_pwdf_k(self):
     kpts = cell.get_abs_kpts([[-.25, -.25, -.25], [-.25, -.25, .25],
                               [-.25, .25, -.25], [-.25, .25, .25],
                               [.25, -.25, -.25], [.25, -.25, .25],
                               [.25, .25, -.25], [.25, .25, .25]])
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((8, nao, nao))
     mydf = pwdf.PWDF(cell)
     mydf.kpts = kpts
     mydf.auxbasis = 'weigend'
     vk = pwdf_jk.get_k_kpts(mydf, dm, 0, mydf.kpts)
     self.assertAlmostEqual(finger(
         vk[0]), (4.3373802352168278 - 0.062977052131451577j) / 8, 9)
     self.assertAlmostEqual(finger(vk[1]),
                            (2.878809181709983 + 0.028843869853690692j) / 8,
                            9)
     self.assertAlmostEqual(finger(
         vk[2]), (3.7027622609953061 - 0.052034330663180237j) / 8, 9)
     self.assertAlmostEqual(finger(
         vk[3]), (5.0939994842559422 + 0.060094478876149444j) / 8, 9)
     self.assertAlmostEqual(finger(
         vk[4]), (4.2942087551592651 - 0.061138484763336887j) / 8, 9)
     self.assertAlmostEqual(finger(
         vk[5]), (3.9689429688683679 + 0.048471952758750547j) / 8, 9)
     self.assertAlmostEqual(finger(
         vk[6]), (3.6342630872923456 - 0.054892635365850449j) / 8, 9)
     self.assertAlmostEqual(finger(
         vk[7]), (3.3483735224533548 + 0.040877095049528467j) / 8, 9)
Ejemplo n.º 3
0
 def test_pwdf_get_nuc(self):
     v0 = fft.DF(cell).get_nuc(kpts[0])
     df = pwdf.PWDF(cell)
     v1 = df.get_nuc(kpts[0])
     self.assertTrue(np.allclose(v0, v1, atol=1e-4, rtol=1e-4))
     self.assertAlmostEqual(finger(v1),
                            (-5.7646030917912663 + 0.19126291999423831j), 8)
Ejemplo n.º 4
0
    def test_get_eri_0123(self):
        odf = pwdf.PWDF(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.DF(cell1).get_mo_eri([numpy.eye(cell1.nao_nr())] * 4, kpts)
        self.assertTrue(np.allclose(eri1111, ref, atol=1e-8, rtol=1e-8))
Ejemplo n.º 5
0
    def get_hcore(self, cell=None, kpts=None):
        if cell is None: cell = self.cell
        if kpts is None:
            kpts_lst = numpy.zeros((1,3))
        else:
            kpts_lst = numpy.reshape(kpts, (-1,3))

        xcell, contr_coeff = self.get_xmol(cell)
        with_df = pwdf.PWDF(xcell)
        c = lib.param.LIGHT_SPEED
        assert('1E' in self.approx.upper())
        if 'ATOM' in self.approx.upper():
            atom_slices = xcell.offset_nr_by_atom()
            nao = xcell.nao_nr()
            x = numpy.zeros((nao,nao))
            vloc = numpy.zeros((nao,nao))
            wloc = numpy.zeros((nao,nao))
            for ia in range(xcell.natm):
                ish0, ish1, p0, p1 = atom_slices[ia]
                shls_slice = (ish0, ish1, ish0, ish1)
                t1 = xcell.intor('cint1e_kin_sph', shls_slice=shls_slice)
                v1 = xcell.intor('cint1e_nuc_sph', shls_slice=shls_slice)
                s1 = xcell.intor('cint1e_ovlp_sph', shls_slice=shls_slice)
                w1 = xcell.intor('cint1e_pnucp_sph', shls_slice=shls_slice)
                vloc[p0:p1,p0:p1] = v1
                wloc[p0:p1,p0:p1] = w1
                x[p0:p1,p0:p1] = x2c._x2c1e_xmatrix(t1, v1, w1, s1, c)
        else:
            raise NotImplementedError

        t = xcell.pbc_intor('cint1e_kin_sph', 1, lib.HERMITIAN, kpts_lst)
        s = xcell.pbc_intor('cint1e_ovlp_sph', 1, lib.HERMITIAN, kpts_lst)
        v = with_df.get_nuc(kpts_lst)
        #w = get_pnucp(with_df, kpts_lst)
        if self.basis is not None:
            s22 = s
            s21 = pbcgto.intor_cross('cint1e_ovlp_sph', xcell, cell, kpts=kpts_lst)

        h1_kpts = []
        for k in range(len(kpts_lst)):
            #h1 = x2c._get_hcore_fw(t[k], vloc, wloc, s[k], x, c) - vloc + v[k]
            #h1 = x2c._get_hcore_fw(t[k], v[k], w[k], s[k], x, c)
            h1 = x2c._get_hcore_fw(t[k], v[k], wloc, s[k], x, c)
            if self.basis is not None:
                c = lib.cho_solve(s22[k], s21[k])
                h1 = reduce(numpy.dot, (c.T, h1, c))
            if self.xuncontract and contr_coeff is not None:
                h1 = reduce(numpy.dot, (contr_coeff.T, h1, contr_coeff))
            h1_kpts.append(h1)

        if kpts is None or numpy.shape(kpts) == (3,):
            h1_kpts = h1_kpts[0]
        return lib.asarray(h1_kpts)
Ejemplo n.º 6
0
    def test_pwdf_k(self):
        kpts = cell.make_kpts((2, 2, 2))

        numpy.random.seed(1)
        nao = cell.nao_nr()
        dm = numpy.random.random((8, nao, nao))
        mydf = pwdf.PWDF(cell)
        mydf.kpts = kpts
        mydf.auxbasis = 'weigend'
        vk = pwdf_jk.get_k_kpts(mydf, dm, 0, mydf.kpts)
        self.assertAlmostEqual(finger(
            vk[0]), (4.3373802352168278 - 0.062977052131451577j) / 8, 9)
        self.assertAlmostEqual(finger(vk[1]),
                               (2.878809181709983 + 0.028843869853690692j) / 8,
                               9)
        self.assertAlmostEqual(finger(
            vk[2]), (3.7027622609953061 - 0.052034330663180237j) / 8, 9)
        self.assertAlmostEqual(finger(
            vk[3]), (5.0939994842559422 + 0.060094478876149444j) / 8, 9)
        self.assertAlmostEqual(finger(
            vk[4]), (4.2942087551592651 - 0.061138484763336887j) / 8, 9)
        self.assertAlmostEqual(finger(
            vk[5]), (3.9689429688683679 + 0.048471952758750547j) / 8, 9)
        self.assertAlmostEqual(finger(
            vk[6]), (3.6342630872923456 - 0.054892635365850449j) / 8, 9)
        self.assertAlmostEqual(finger(
            vk[7]), (3.3483735224533548 + 0.040877095049528467j) / 8, 9)

        numpy.random.seed(1)
        dm = numpy.random.random((8, nao, nao))
        dm = dm + dm.transpose(0, 2, 1)
        vk = pwdf_jk.get_k_kpts(mydf, dm, 1, mydf.kpts)
        self.assertAlmostEqual(finger(vk[0]),
                               (8.7518173818250702 - 0.11793770445839372j) / 8,
                               9)
        self.assertAlmostEqual(finger(
            vk[1]), (5.7682393685317894 + 0.069482280306391239j) / 8, 9)
        self.assertAlmostEqual(finger(
            vk[2]), (7.1890462727492324 - 0.088727079644645671j) / 8, 9)
        self.assertAlmostEqual(finger(vk[3]),
                               (10.08358152800003 + 0.1278144339422369j) / 8,
                               9)
        self.assertAlmostEqual(finger(vk[4]),
                               (8.393281242945573 - 0.099410704957774876j) / 8,
                               9)
        self.assertAlmostEqual(finger(vk[5]),
                               (7.9413682328898769 + 0.1015563120870652j) / 8,
                               9)
        self.assertAlmostEqual(finger(
            vk[6]), (7.3743790120272408 - 0.096290683129384574j) / 8, 9)
        self.assertAlmostEqual(finger(vk[7]),
                               (6.8144379626901443 + 0.08071261392857812j) / 8,
                               9)
Ejemplo n.º 7
0
 def test_eri1111(self):
     kpts = numpy.random.random((4, 3)) * .25
     kpts[3] = -numpy.einsum('ij->j', kpts[:3])
     with_df = pwdf.PWDF(cell)
     with_df.kpts = kpts
     mo = (numpy.random.random((nao, nao)) + numpy.random.random(
         (nao, nao)) * 1j)
     eri = with_df.get_eri(kpts).reshape((nao, ) * 4)
     eri0 = numpy.einsum('pjkl,pi->ijkl', eri, mo.conj())
     eri0 = numpy.einsum('ipkl,pj->ijkl', eri0, mo)
     eri0 = numpy.einsum('ijpl,pk->ijkl', eri0, mo.conj())
     eri0 = numpy.einsum('ijkp,pl->ijkl', eri0, mo)
     eri1 = with_df.ao2mo(mo, kpts)
     self.assertAlmostEqual(
         abs(eri1.reshape(eri0.shape) - eri0).sum(), 0, 9)
Ejemplo n.º 8
0
    def test_pwdf_get_pp(self):
        v0 = pgto.pseudo.get_pp(cell, kpts[0])
        v1 = pwdf.PWDF(cell).get_pp(kpts)
        self.assertTrue(np.allclose(v0, v1[0], atol=1e-5, rtol=1e-5))
        self.assertAlmostEqual(finger(v1[0]),
                               (-5.6240305085898807 + 0.22094834207603817j), 8)

        v0 = pgto.pseudo.get_pp(cell, kpts[1])
        self.assertTrue(np.allclose(v0, v1[1], atol=1e-5, rtol=1e-5))
        self.assertAlmostEqual(finger(v1[1]),
                               (-5.53877585793 + 1.043933371359j), 8)
        self.assertAlmostEqual(finger(v1[2]),
                               (-6.05309558678 + 0.281728966073j), 8)
        self.assertAlmostEqual(finger(v1[3]),
                               (-5.60115995450 + 0.275973062529j), 8)
Ejemplo n.º 9
0
    def test_pwdf_get_pp(self):
        v0 = pgto.pseudo.get_pp(cell, kpts[0])
        v1 = pwdf.PWDF(cell).get_pp(kpts)
        self.assertTrue(np.allclose(v0, v1[0], atol=1e-6, rtol=1e-6))
        self.assertAlmostEqual(finger(v1[0]),
                               (-5.6240249381230019 + 0.22094834207065794j), 8)

        v0 = pgto.pseudo.get_pp(cell, kpts[1])
        self.assertTrue(np.allclose(v0, v1[1], atol=1e-6, rtol=1e-6))
        self.assertAlmostEqual(finger(v1[1]),
                               (-5.53877028746 + 1.04393337137j), 8)
        self.assertAlmostEqual(finger(v1[2]),
                               (-6.05309001635 + 0.281728966125j), 8)
        self.assertAlmostEqual(finger(v1[3]),
                               (-5.60115438406 + 0.275973062578j), 8)
Ejemplo n.º 10
0
    def test_get_eri_0011(self):
        odf = pwdf.PWDF(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)
Ejemplo n.º 11
0
 def test_pwdf_j(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4, nao, nao))
     dm = dm + dm.transpose(0, 2, 1)
     mydf = pwdf.PWDF(cell)
     mydf.kpts = numpy.random.random((4, 3))
     mydf.gs = numpy.asarray((5, ) * 3)
     mydf.auxbasis = 'weigend'
     vj = pwdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(finger(
         vj[0]), (0.93946193432413905 + 0.00010862804196223034j) / 4, 9)
     self.assertAlmostEqual(finger(
         vj[1]), (0.94866073525335626 + 0.005571199307452865j) / 4, 9)
     self.assertAlmostEqual(finger(
         vj[2]), (1.1492194255929766 + 0.0093705761598793739j) / 4, 9)
     self.assertAlmostEqual(finger(
         vj[3]), (1.1397493412770023 + 0.010731970529096637j) / 4, 9)
Ejemplo n.º 12
0
    def test_pwdf_get_ao_eri(self):
        df0 = fft.FFTDF(cell)
        df = pwdf.PWDF(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)
Ejemplo n.º 13
0
    def test_eri0000(self):
        with_df = pwdf.PWDF(cell)
        with_df.kpts = numpy.zeros((4, 3))
        mo = (numpy.random.random((nao, nao)) + numpy.random.random(
            (nao, nao)) * 1j)
        eri = ao2mo.restore(1, with_df.get_eri(with_df.kpts), nao)
        eri0 = numpy.einsum('pjkl,pi->ijkl', eri, mo.conj())
        eri0 = numpy.einsum('ipkl,pj->ijkl', eri0, mo)
        eri0 = numpy.einsum('ijpl,pk->ijkl', eri0, mo.conj())
        eri0 = numpy.einsum('ijkp,pl->ijkl', eri0, mo)
        eri1 = with_df.ao2mo(mo, with_df.kpts)
        self.assertAlmostEqual(
            abs(eri1.reshape(eri0.shape) - eri0).sum(), 0, 9)

        mo = mo.real
        eri0 = numpy.einsum('pjkl,pi->ijkl', eri, mo.conj())
        eri0 = numpy.einsum('ipkl,pj->ijkl', eri0, mo)
        eri0 = numpy.einsum('ijpl,pk->ijkl', eri0, mo.conj())
        eri0 = numpy.einsum('ijkp,pl->ijkl', eri0, mo)
        eri1 = with_df.ao2mo(mo, with_df.kpts, compact=False)
        self.assertAlmostEqual(
            abs(eri1.reshape(eri0.shape) - eri0).sum(), 0, 9)
Ejemplo n.º 14
0
    def test_get_eri_0110(self):
        odf = pwdf.PWDF(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)
Ejemplo n.º 15
0
    def test_get_eri_gamma(self):
        odf = pwdf.PWDF(cell1)
        ref = odf.get_eri(compact=True)
        df = fft.DF(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)
Ejemplo n.º 16
0
 def test_pwdf_k1(self):
     kpts = cell.get_abs_kpts([[-.25, -.25, -.25], [-.25, -.25, .25],
                               [-.25, .25, -.25], [-.25, .25, .25],
                               [.25, -.25, -.25], [.25, -.25, .25],
                               [.25, .25, -.25], [.25, .25, .25]])
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((8, nao, nao))
     mydf = pwdf.PWDF(cell)
     mydf.kpts = kpts
     mydf.auxbasis = 'weigend'
     numpy.random.seed(1)
     dm = numpy.random.random((8, nao, nao))
     dm = dm + dm.transpose(0, 2, 1)
     vk = pwdf_jk.get_k_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(finger(vk[0]),
                            (8.7518173818250702 - 0.11793770445839372j) / 8,
                            9)
     self.assertAlmostEqual(finger(
         vk[1]), (5.7682393685317894 + 0.069482280306391239j) / 8, 9)
     self.assertAlmostEqual(finger(
         vk[2]), (7.1890462727492324 - 0.088727079644645671j) / 8, 9)
     self.assertAlmostEqual(finger(vk[3]),
                            (10.08358152800003 + 0.1278144339422369j) / 8,
                            9)
     self.assertAlmostEqual(finger(vk[4]),
                            (8.393281242945573 - 0.099410704957774876j) / 8,
                            9)
     self.assertAlmostEqual(finger(vk[5]),
                            (7.9413682328898769 + 0.1015563120870652j) / 8,
                            9)
     self.assertAlmostEqual(finger(
         vk[6]), (7.3743790120272408 - 0.096290683129384574j) / 8, 9)
     self.assertAlmostEqual(finger(vk[7]),
                            (6.8144379626901443 + 0.08071261392857812j) / 8,
                            9)
Ejemplo n.º 17
0
 def test_pwdf_get_nuc(self):
     df = pwdf.PWDF(cell)
     v1 = df.get_nuc(kpts[0])
     self.assertAlmostEqual(finger(v1),
                            (-6.0893491060887159 + 0.19823828749533859j), 8)
Ejemplo n.º 18
0
    from pyscf.pbc import scf as pscf
    from pyscf.pbc.df import pwdf

    L = 5.
    n = 5
    cell = pgto.Cell()
    cell.a = numpy.diag([L, L, L])
    cell.gs = numpy.array([n, n, n])

    cell.atom = '''He    3.    2.       3.
                   He    1.    1.       1.'''
    #cell.basis = {'He': [[0, (1.0, 1.0)]]}
    #cell.basis = '631g'
    #cell.basis = {'He': [[0, (2.4, 1)], [1, (1.1, 1)]]}
    cell.basis = 'ccpvdz'
    cell.verbose = 0
    cell.build(0, 0)
    cell.verbose = 5

    df = pwdf.PWDF(cell)
    df.gs = (15, ) * 3
    dm = pscf.RHF(cell).get_init_guess()
    vj, vk = df.get_jk(cell, dm)
    print(numpy.einsum('ij,ji->', df.get_nuc(cell), dm),
          'ref=-10.384051732669329')
    df.analytic_ft = True
    #print(numpy.einsum('ij,ji->', vj, dm), 'ref=5.3766911667862516')
    #print(numpy.einsum('ij,ji->', vk, dm), 'ref=8.2255177602309022')
    print(numpy.einsum('ij,ji->', df.get_nuc(cell), dm),
          'ref=-10.447018516011319')
Ejemplo n.º 19
0
    def test_get_mo_eri(self):
        df0 = fft.FFTDF(cell)
        odf = pwdf.PWDF(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))
Ejemplo n.º 20
0
        wj = wj[0]
    return wj


if __name__ == '__main__':
    from pyscf.pbc import scf
    cell = pbcgto.Cell()
    cell.build(unit = 'B',
               a = numpy.eye(3)*4,
               gs = [5]*3,
               atom = 'H 0 0 0; H 0 0 1.8',
               verbose = 4,
               basis='sto3g')
    lib.param.LIGHT_SPEED = 2
    mf = scf.RHF(cell)
    mf.with_df = pwdf.PWDF(cell)
    enr = mf.kernel()
    print('E(NR) = %.12g' % enr)

    mf = sfx2c1e(mf)
    esfx2c = mf.kernel()
    print('E(SFX2C1E) = %.12g' % esfx2c)

    mf = scf.KRHF(cell)
    mf.with_df = pwdf.PWDF(cell)
    mf.kpts = cell.make_kpts([2,2,1])
    enr = mf.kernel()
    print('E(k-NR) = %.12g' % enr)

    mf = sfx2c1e(mf)
    esfx2c = mf.kernel()