示例#1
0
    def get_jk(self,
               dm,
               hermi=1,
               kpts=None,
               kpts_band=None,
               with_j=True,
               with_k=True,
               omega=None,
               exxdiv=None):
        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 calculation by default
                kpts = numpy.zeros(3)
            else:
                kpts = self.kpts
        kpts = numpy.asarray(kpts)

        if kpts.shape == (3, ):
            return df_jk.get_jk(self, dm, hermi, kpts, kpts_band, with_j,
                                with_k, exxdiv)

        vj = vk = None
        if with_k:
            vk = df_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv)
        if with_j:
            vj = df_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band)
        return vj, vk
示例#2
0
    def get_jk(self,
               dm,
               hermi=1,
               kpts=None,
               kpts_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
        kpts = numpy.asarray(kpts)

        if kpts.shape == (3, ):
            return df_jk.get_jk(self, dm, hermi, kpts, kpts_band, with_j,
                                with_k, exxdiv)

        vj = vk = None
        if with_k:
            vk = df_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv)
        if with_j:
            vj = df_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band)
        return vj, vk
示例#3
0
文件: mdf_jk.py 项目: wmizukami/pyscf
def get_j_kpts(mydf,
               dm_kpts,
               hermi=1,
               kpts=numpy.zeros((1, 3)),
               kpts_band=None):
    vj_kpts = aft_jk.get_j_kpts(mydf, dm_kpts, hermi, kpts, kpts_band)
    vj_kpts += df_jk.get_j_kpts(mydf, dm_kpts, hermi, kpts, kpts_band)
    return vj_kpts
示例#4
0
 def test_j_kpts(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4,nao,nao))
     dm = dm + dm.transpose(0,2,1)
     mydf = df.DF(cell)
     mydf.kpts = numpy.random.random((4,3))
     mydf.gs = numpy.asarray((5,)*3)
     mydf.auxbasis = 'weigend'
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(finger(vj[0]), (0.49071716424863876-0.11866593764325209j ), 9)
     self.assertAlmostEqual(finger(vj[1]), (0.54805564025672737-0.045780766515833224j), 9)
     self.assertAlmostEqual(finger(vj[2]), (0.53548588134342712-0.083269294794914239j), 9)
     self.assertAlmostEqual(finger(vj[3]), (0.54778931331075764+0.007709304083260985j), 9)
示例#5
0
    def get_jk(self,
               dm,
               hermi=1,
               kpts=None,
               kpts_band=None,
               with_j=True,
               with_k=True,
               omega=None,
               exxdiv=None):
        if omega is not None:  # J/K for RSH functionals
            cell = self.cell
            # * AFT is computationally more efficient than GDF if the Coulomb
            #   attenuation tends to the long-range role (i.e. small omega).
            # * Note: changing to AFT integrator may cause small difference to
            #   the GDF integrator. If a very strict GDF result is desired,
            #   we can disable this trick by setting
            #   LONGRANGE_AFT_TURNOVER_THRESHOLD to 0.
            # * The sparse mesh is not appropriate for low dimensional systems
            #   with infinity vacuum since the ERI may require large mesh to
            #   sample density in vacuum.
            if (omega < LONGRANGE_AFT_TURNOVER_THRESHOLD
                    and cell.dimension >= 2
                    and cell.low_dim_ft_type != 'inf_vacuum'):
                mydf = aft.AFTDF(cell, self.kpts)
                mydf.ke_cutoff = aft.estimate_ke_cutoff_for_omega(cell, omega)
                mydf.mesh = tools.cutoff_to_mesh(cell.lattice_vectors(),
                                                 mydf.ke_cutoff)
            else:
                mydf = self
            return _sub_df_jk_(mydf, dm, hermi, kpts, kpts_band, with_j,
                               with_k, omega, exxdiv)

        if kpts is None:
            if numpy.all(self.kpts == 0):
                # Gamma-point calculation by default
                kpts = numpy.zeros(3)
            else:
                kpts = self.kpts
        kpts = numpy.asarray(kpts)

        if kpts.shape == (3, ):
            return df_jk.get_jk(self, dm, hermi, kpts, kpts_band, with_j,
                                with_k, exxdiv)

        vj = vk = None
        if with_k:
            vk = df_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv)
        if with_j:
            vj = df_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band)
        return vj, vk
示例#6
0
 def test_j_kpts(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4,nao,nao))
     dm = dm + dm.transpose(0,2,1)
     mydf = df.DF(cell)
     mydf.kpts = numpy.random.random((4,3))
     mydf.gs = numpy.asarray((5,)*3)
     mydf.auxbasis = 'weigend'
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(finger(vj[0]), (0.49176565003742523-0.11891097171204273j ), 9)
     self.assertAlmostEqual(finger(vj[1]), (0.54901219181783034-0.046003618294160657j), 9)
     self.assertAlmostEqual(finger(vj[2]), (0.53648483057543039-0.083507647862465353j), 9)
     self.assertAlmostEqual(finger(vj[3]), (0.54896892736198399+0.007695802002441080j), 9)
示例#7
0
 def test_j_kpts_high_cost(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4,nao,nao))
     dm = dm + dm.transpose(0,2,1)
     mydf = rsdf.RSDF(cell).set(auxbasis='weigend')
     mydf.linear_dep_threshold = 1e-7
     mydf.kpts = numpy.random.random((4,3))
     mydf.auxbasis = 'weigend'
     mydf.omega = 0.3
     mydf.exp_to_discard = 0.3
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(lib.fp(vj[0]), (0.4917612920404451 + -0.1189108415838486j), 7)
     self.assertAlmostEqual(lib.fp(vj[1]), (0.5490079977477804 + -0.0460035459549861j), 7)
     self.assertAlmostEqual(lib.fp(vj[2]), (0.5364805888399165 + -0.0835075280950256j), 7)
     self.assertAlmostEqual(lib.fp(vj[3]), (0.5489645342271054 + 0.0076957400601779j), 7)
示例#8
0
 def test_j_kpts(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4,nao,nao))
     dm = dm + dm.transpose(0,2,1)
     mydf = df.DF(cell).set(auxbasis='weigend')
     mydf.kpts = numpy.random.random((4,3))
     mydf.mesh = numpy.asarray((11,)*3)
     mydf.auxbasis = 'weigend'
     mydf.mesh = cell.mesh
     mydf.eta = 0.3
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(finger(vj[0]), (0.49176180692009197-0.11891083594538684j ), 9)
     self.assertAlmostEqual(finger(vj[1]), (0.54900852073326378-0.04600354345316908j ), 9)
     self.assertAlmostEqual(finger(vj[2]), (0.53648110926681891-0.083507522327029265j), 9)
     self.assertAlmostEqual(finger(vj[3]), (0.5489650266265671 +0.007695733246577244j), 9)
示例#9
0
文件: test_df_jk.py 项目: pyscf/pyscf
 def test_j_kpts_high_cost(self):
     numpy.random.seed(1)
     nao = cell0.nao_nr()
     dm = numpy.random.random((4,nao,nao))
     dm = dm + dm.transpose(0,2,1)
     mydf = df.DF(cell0).set(auxbasis='weigend')
     mydf.linear_dep_threshold = 1e-7
     mydf.kpts = numpy.random.random((4,3))
     mydf.auxbasis = 'weigend'
     mydf.eta = 0.3
     mydf.exp_to_discard = mydf.eta
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(lib.fp(vj[0]), (7.240207870630442-0.001010622364950332j) , 9)
     self.assertAlmostEqual(lib.fp(vj[1]), (7.248745538469966-0.001562604522803734j) , 9)
     self.assertAlmostEqual(lib.fp(vj[2]), (7.241193241602369-0.002518439407055759j) , 9)
     self.assertAlmostEqual(lib.fp(vj[3]), (7.2403591406956185+0.001475803952777666j), 9)
示例#10
0
 def test_j_kpts(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4,nao,nao))
     dm = dm + dm.transpose(0,2,1)
     mydf = df.DF(cell).set(auxbasis='weigend')
     mydf.linear_dep_threshold = 1e-7
     mydf.kpts = numpy.random.random((4,3))
     mydf.mesh = numpy.asarray((11,)*3)
     mydf.auxbasis = 'weigend'
     mydf.mesh = cell.mesh
     mydf.eta = 0.3
     mydf.exp_to_discard = mydf.eta
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(finger(vj[0]), (0.49176180692009197-0.11891083594538684j ), 9)
     self.assertAlmostEqual(finger(vj[1]), (0.54900852073326378-0.04600354345316908j ), 9)
     self.assertAlmostEqual(finger(vj[2]), (0.53648110926681891-0.083507522327029265j), 9)
     self.assertAlmostEqual(finger(vj[3]), (0.5489650266265671 +0.007695733246577244j), 9)
示例#11
0
文件: df.py 项目: chrinide/pyscf
    def get_jk(self, dm, hermi=1, kpts=None, kpts_band=None,
               with_j=True, with_k=True, exxdiv=None):
        if kpts is None:
            if numpy.all(self.kpts == 0):
                # Gamma-point calculation by default
                kpts = numpy.zeros(3)
            else:
                kpts = self.kpts
        kpts = numpy.asarray(kpts)

        if kpts.shape == (3,):
            return df_jk.get_jk(self, dm, hermi, kpts, kpts_band, with_j,
                                with_k, exxdiv)

        vj = vk = None
        if with_k:
            vk = df_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv)
        if with_j:
            vj = df_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band)
        return vj, vk
示例#12
0
 def test_j_kpts(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4, nao, nao))
     dm = dm + dm.transpose(0, 2, 1)
     mydf = df.DF(cell)
     mydf.kpts = numpy.random.random((4, 3))
     mydf.gs = numpy.asarray((5, ) * 3)
     mydf.auxbasis = 'weigend'
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(finger(vj[0]),
                            (0.49176639512164577 - 0.11891092353150769j), 9)
     self.assertAlmostEqual(finger(vj[1]),
                            (0.54901304965192832 - 0.046003580779851005j),
                            9)
     self.assertAlmostEqual(finger(vj[2]),
                            (0.53648566446940738 - 0.083507597783243834j),
                            9)
     self.assertAlmostEqual(finger(vj[3]),
                            (0.54896968903421772 + 0.007695795208980421j),
                            9)
示例#13
0
 def test_j_kpts(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4, nao, nao))
     dm = dm + dm.transpose(0, 2, 1)
     mydf = df.DF(cell)
     mydf.kpts = numpy.random.random((4, 3))
     mydf.gs = numpy.asarray((5, ) * 3)
     mydf.auxbasis = 'weigend'
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(finger(vj[0]),
                            (0.49071716424863876 - 0.11866593764325209j), 9)
     self.assertAlmostEqual(finger(vj[1]),
                            (0.54805564025672737 - 0.045780766515833224j),
                            9)
     self.assertAlmostEqual(finger(vj[2]),
                            (0.53548588134342712 - 0.083269294794914239j),
                            9)
     self.assertAlmostEqual(finger(vj[3]),
                            (0.54778931331075764 + 0.007709304083260985j),
                            9)
示例#14
0
 def test_j_kpts_high_cost(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4, nao, nao))
     dm = dm + dm.transpose(0, 2, 1)
     mydf = df.DF(cell).set(auxbasis='weigend')
     mydf.linear_dep_threshold = 1e-7
     mydf.kpts = numpy.random.random((4, 3))
     mydf.mesh = [n, n, n]
     mydf.auxbasis = 'weigend'
     mydf.eta = 0.3
     mydf.exp_to_discard = mydf.eta
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(lib.fp(vj[0]),
                            (0.49176180692009197 - 0.11891083594538684j), 9)
     self.assertAlmostEqual(lib.fp(vj[1]),
                            (0.54900852073326378 - 0.04600354345316908j), 9)
     self.assertAlmostEqual(lib.fp(vj[2]),
                            (0.53648110926681891 - 0.083507522327029265j),
                            9)
     self.assertAlmostEqual(lib.fp(vj[3]),
                            (0.5489650266265671 + 0.007695733246577244j), 9)
示例#15
0
 def test_j_kpts(self):
     numpy.random.seed(1)
     nao = cell.nao_nr()
     dm = numpy.random.random((4, nao, nao))
     dm = dm + dm.transpose(0, 2, 1)
     mydf = df.DF(cell).set(auxbasis='weigend')
     mydf.kpts = numpy.random.random((4, 3))
     mydf.gs = numpy.asarray((5, ) * 3)
     mydf.auxbasis = 'weigend'
     mydf.gs = cell.gs
     mydf.eta = 0.3
     vj = df_jk.get_j_kpts(mydf, dm, 1, mydf.kpts)
     self.assertAlmostEqual(finger(vj[0]),
                            (0.49176565003906081 - 0.11891097171192379j), 9)
     self.assertAlmostEqual(finger(vj[1]),
                            (0.54901219181920746 - 0.046003618294119357j),
                            9)
     self.assertAlmostEqual(finger(vj[2]),
                            (0.53648483057579632 - 0.083507647862342937j),
                            9)
     self.assertAlmostEqual(finger(vj[3]),
                            (0.54896892736259639 + 0.0076958020023144037j),
                            9)
示例#16
0
文件: mdf_jk.py 项目: chrinide/pyscf
def get_j_kpts(mydf, dm_kpts, hermi=1, kpts=numpy.zeros((1,3)), kpts_band=None):
    vj_kpts = aft_jk.get_j_kpts(mydf, dm_kpts, hermi, kpts, kpts_band)
    vj_kpts += df_jk.get_j_kpts(mydf, dm_kpts, hermi, kpts, kpts_band)
    return vj_kpts
示例#17
0
def get_j_kpts(mydf, dm_kpts, hermi=1, kpts=numpy.zeros((1,3)), kpts_band=None):
    if mydf._cderi is None or mydf.auxcell is None or not mydf.has_kpts(kpts_band):
        mydf.build(kpts_band=kpts_band)
    vj_kpts = aft_jk.get_j_kpts(mydf, dm_kpts, hermi, kpts, kpts_band)
    vj_kpts += df_jk.get_j_kpts(mydf, dm_kpts, hermi, kpts, kpts_band)
    return vj_kpts