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)
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)
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)
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))
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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')
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))
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()