def get_jk(self, dm, hermi=1, kpts=None, kpts_band=None, with_j=True, with_k=True, exxdiv='ewald'): from pyscf.pbc.df import fft_jk if kpts is None: if numpy.all(self.kpts == 0): # Gamma-point calculation by default kpts = numpy.zeros(3) else: kpts = self.kpts else: kpts = numpy.asarray(kpts) vj = vk = None if kpts.shape == (3, ): vj, vk = fft_jk.get_jk(self, dm, hermi, kpts, kpts_band, with_j, with_k, exxdiv) else: if with_k: vk = fft_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv) if with_j: vj = fft_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band) return vj, vk
def get_jk(self, dm, hermi=1, kpts=None, kpts_band=None, with_j=True, with_k=True, omega=None, exxdiv=None): from pyscf.pbc.df import fft_jk if omega is not None: # J/K for RSH functionals return _sub_df_jk_(self, dm, hermi, kpts, kpts_band, with_j, with_k, omega, exxdiv) if kpts is None: if numpy.all(self.kpts == 0): # Gamma-point J/K by default kpts = numpy.zeros(3) else: kpts = self.kpts else: kpts = numpy.asarray(kpts) vj = vk = None if kpts.shape == (3, ): vj, vk = fft_jk.get_jk(self, dm, hermi, kpts, kpts_band, with_j, with_k, exxdiv) else: if with_k: vk = fft_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv) if with_j: vj = fft_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band) return vj, vk
def test_get_j(self): mydf = df.FFTDF(cell) ref = fft_jk.get_j_kpts(mydf, dm, kpts=kpts) mydf = fft_multi_grids.MultiGridFFTDF(cell) v = mydf.get_j_kpts(dm, kpts=kpts) self.assertAlmostEqual(abs(ref-v).max(), 0, 8) self.assertAlmostEqual(lib.finger(v), 0.21963596743261393, 8)
def get_jk(self, dm, hermi=1, kpts=None, kpts_band=None, with_j=True, with_k=True, exxdiv=None): from pyscf.pbc.df import fft_jk, fft_occk if kpts is None: if numpy.all(self.kpts == 0): # Gamma-point J/K by default kpts = numpy.zeros(3) else: kpts = self.kpts else: kpts = numpy.asarray(kpts) vj = vk = None if kpts.shape == (3,): vj, vk = fft_jk.get_jk(self, dm, hermi, kpts, kpts_band, with_j, with_k, exxdiv) else: if with_j: vj = fft_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band) if with_k: if self.occ == False: vk = fft_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv) else: vk = fft_occk.get_k_kpts_occ(self, dm, hermi, kpts, kpts_band, exxdiv) return vj, vk
def test_rks_lda(self): mydf = df.FFTDF(cell) mydf.grids.build() ref_j = fft_jk.get_j_kpts(mydf, dm, kpts=kpts) n, exc, ref = mydf._numint.nr_rks(cell, mydf.grids, 'lda,', dm, 0, kpts) mydf = fft_multi_grids.MultiGridFFTDF(cell) n, exc, vxc, vj = mydf.rks_j_xc(dm, 'lda,', kpts=kpts, with_j=True, j_in_xc=False) self.assertAlmostEqual(abs(ref_j-vj).max(), 0, 8) self.assertAlmostEqual(abs(ref-vxc).max(), 0, 6) self.assertAlmostEqual(lib.finger(vxc), -0.10369726976205595, 6) self.assertAlmostEqual(exc, -3.0494590778748032, 8) self.assertAlmostEqual(n, 8.0749444279646347, 8)
def test_uks_gga_plus_j(self): mydf = df.FFTDF(cell) mydf.grids.build() ref_j = fft_jk.get_j_kpts(mydf, dmab, kpts=kpts) n, exc, ref = mydf._numint.nr_uks(cell, mydf.grids, 'b88,', dmab, 0, kpts) mydf = fft_multi_grids.MultiGridFFTDF(cell) n, exc, vxc, vj = mydf.uks_j_xc(dmab, 'b88,', kpts=kpts, with_j=False, j_in_xc=True) self.assertAlmostEqual(abs(ref_j+ref-vxc).max(), 0, 4) self.assertAlmostEqual(lib.finger(vxc), -0.18113908287908242+0j, 8) self.assertAlmostEqual(exc, 2.7336576611968653, 8) self.assertAlmostEqual(sum(n), 16.77639832814981, 8)
def test_uks_lda_plus_j(self): mydf = df.FFTDF(cell) mydf.grids.build() ref_j = fft_jk.get_j_kpts(mydf, dmab, kpts=kpts) n, exc, ref = mydf._numint.nr_uks(cell, mydf.grids, 'lda,', dmab, 0, kpts) mydf = fft_multi_grids.MultiGridFFTDF(cell) n, exc, vxc, vj = mydf.uks_j_xc(dmab, 'lda,', kpts=kpts, with_j=False, j_in_xc=True) self.assertAlmostEqual(abs(ref_j+ref-vxc).max(), 0, 6) self.assertAlmostEqual(lib.finger(vxc), -0.24822187080855951+0j, 4) self.assertAlmostEqual(exc, 3.3968809873729704, 6) self.assertAlmostEqual(sum(n), 16.77639832814981, 8)
def test_uks_lda(self): mydf = df.FFTDF(cell) mydf.grids.build() ref_j = fft_jk.get_j_kpts(mydf, dmab, kpts=kpts) n, exc, ref = mydf._numint.nr_uks(cell, mydf.grids, 'lda,', dmab, 0, kpts) mydf = fft_multi_grids.MultiGridFFTDF(cell) n, exc, vxc, vj = mydf.uks_j_xc(dmab, 'lda,', kpts=kpts, with_j=True, j_in_xc=False) self.assertAlmostEqual(abs(ref_j-vj).max(), 0, 8) self.assertAlmostEqual(abs(ref-vxc).max(), 0, 6) self.assertAlmostEqual(lib.finger(vxc), 0.56051003830739932, 6) self.assertAlmostEqual(exc, -8.1508688099749218, 8) self.assertAlmostEqual(sum(n), 16.77639832814981, 8)
def test_rks_gga_plus_j(self): mydf = df.FFTDF(cell) mydf.grids.build() ref_j = fft_jk.get_j_kpts(mydf, dm, kpts=kpts) n, exc, ref = mydf._numint.nr_rks(cell, mydf.grids, 'b88,', dm, 0, kpts) mydf = fft_multi_grids.MultiGridFFTDF(cell) n, exc, vxc, vj = mydf.rks_j_xc(dm, 'b88,', kpts=kpts, with_j=False, j_in_xc=True) self.assertAlmostEqual(abs(ref_j+ref-vxc).max(), 0, 4) self.assertAlmostEqual(lib.finger(vxc), 0.056907756241836749+0j, 4) self.assertAlmostEqual(exc, 2.036577374818183, 6) self.assertAlmostEqual(n, 8.0749444279646347, 8)
def test_rks_lda_plus_j(self): mydf = df.FFTDF(cell) mydf.grids.build() ref_j = fft_jk.get_j_kpts(mydf, dm, kpts=kpts) n, exc, ref = mydf._numint.nr_rks(cell, mydf.grids, 'lda,', dm, 0, kpts) mydf = fft_multi_grids.MultiGridFFTDF(cell) n, exc, vxc, vj = mydf.rks_j_xc(dm, 'lda,', kpts=kpts, with_j=False, j_in_xc=True) self.assertAlmostEqual(abs(ref_j+ref-vxc).max(), 0, 6) self.assertAlmostEqual(lib.finger(vxc), 0.11593869767055653+0j, 8) self.assertAlmostEqual(exc, 2.3601737480485134, 8) self.assertAlmostEqual(n, 8.0749444279646347, 8)
def get_jk(self, dm, hermi=1, kpts=None, kpt_band=None, with_j=True, with_k=True, exxdiv="ewald"): if kpts is None: if numpy.all(self.kpts == 0): # Gamma-point calculation by default kpts = numpy.zeros(3) else: kpts = self.kpts else: kpts = numpy.asarray(kpts) vj = vk = None if kpts.shape == (3,): if with_k: vk = fft_jk.get_k(self, dm, hermi, kpts, kpt_band, exxdiv) if with_j: vj = fft_jk.get_j(self, dm, hermi, kpts, kpt_band) else: if with_k: vk = fft_jk.get_k_kpts(self, dm, hermi, kpts, kpt_band, exxdiv) if with_j: vj = fft_jk.get_j_kpts(self, dm, hermi, kpts, kpt_band) return vj, vk
#verbose = 5, #mesh = [15]*3, #precision=1e-6 ) mydf = df.FFTDF(cell) nao = cell.nao_nr() numpy.random.seed(1) kpts = cell.make_kpts([3, 1, 1]) dm = numpy.random.random((len(kpts), nao, nao)) * .2 dm += numpy.eye(nao) dm = dm + dm.transpose(0, 2, 1) t0 = time.time() print(time.clock()) ref = 0 ref = fft_jk.get_j_kpts(mydf, dm, kpts=kpts) print(time.clock(), time.time() - t0) mydf = MultiGridFFTDF(cell) v = get_j_kpts(mydf, dm, kpts=kpts) print(time.clock(), time.time() - t0) print('diff', abs(ref - v).max(), lib.finger(v) - lib.finger(ref)) print(time.clock()) mydf = df.FFTDF(cell) mydf.grids.build() n, exc, ref = mydf._numint.nr_rks(cell, mydf.grids, 'tpss', dm, 0, kpts) print(time.clock()) RMAX_FACTOR = .5 RHOG_HIGH_DERIV = False mydf = MultiGridFFTDF(cell) n, exc, vxc, vj = rks_j_xc(mydf, dm, 'tpss', kpts=kpts, with_j=False)