Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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)
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
        #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)