예제 #1
0
 def test_aft_k1_high_cost(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 = aft.AFTDF(cell)
     mydf.kpts = kpts
     numpy.random.seed(1)
     dm = numpy.random.random((8, nao, nao))
     dm = dm + dm.transpose(0, 2, 1)
     vk = aft_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)
예제 #2
0
 def test_aft_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 = aft.AFTDF(cell)
     mydf.kpts = kpts
     vk = aft_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)
예제 #3
0
def get_k_kpts(mydf, dm_kpts, hermi=1, kpts=numpy.zeros((1,3)), kpts_band=None,
               exxdiv=None):
    if mydf._cderi is None or mydf.auxcell is None or not mydf.has_kpts(kpts_band):
        mydf.build(kpts_band=kpts_band)
    vk_kpts = aft_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, exxdiv)
    vk_kpts += df_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, None)
    return vk_kpts
예제 #4
0
파일: aft.py 프로젝트: yoshida-lab/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

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

        vj = vk = None
        if with_k:
            vk = aft_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv)
        if with_j:
            vj = aft_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band)
        return vj, vk
예제 #5
0
파일: aft_jk.py 프로젝트: sunqm/mpi4pyscf
def get_k_kpts(mydf, dm_kpts, hermi=1, kpts=numpy.zeros((1,3)), kpts_band=None,
               exxdiv=None):
    if rank != 0:  # to apply df_jk._ewald_exxdiv_for_G0 function once
        exxdiv = None
    vk = aft_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, exxdiv)
    vk = mpi.reduce(vk)
    return vk
예제 #6
0
파일: aft.py 프로젝트: wmizukami/pyscf
    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 aft_jk.get_jk(self, dm, hermi, kpts, kpts_band, with_j,
                                 with_k, exxdiv)

        vj = vk = None
        if with_k:
            vk = aft_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv)
        if with_j:
            vj = aft_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band)
        return vj, vk
예제 #7
0
 def test_aft_k1_high_cost(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 = aft.AFTDF(cell)
     mydf.kpts = kpts
     numpy.random.seed(1)
     dm = numpy.random.random((8,nao,nao))
     dm = dm + dm.transpose(0,2,1)
     vk = aft_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)
예제 #8
0
def get_k_kpts(mydf,
               dm_kpts,
               hermi=1,
               kpts=numpy.zeros((1, 3)),
               kpts_band=None,
               exxdiv=None):
    vk_kpts = aft_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, exxdiv)
    vk_kpts += df_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, None)
    return vk_kpts
예제 #9
0
def get_k_kpts(mydf,
               dm_kpts,
               hermi=1,
               kpts=numpy.zeros((1, 3)),
               kpts_band=None,
               exxdiv=None):
    if rank != 0:  # to apply df_jk._ewald_exxdiv_for_G0 function once
        exxdiv = None
    vk = aft_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, exxdiv)
    vk = mpi.reduce(vk)
    return vk
예제 #10
0
파일: mdf_jk.py 프로젝트: wmizukami/pyscf
def get_k_kpts(mydf,
               dm_kpts,
               hermi=1,
               kpts=numpy.zeros((1, 3)),
               kpts_band=None,
               exxdiv=None):
    if exxdiv is not None and exxdiv != 'ewald':
        logger.warn(
            mydf, 'MDF does not support exxdiv %s. '
            'exxdiv needs to be "ewald" or None', exxdiv)
        raise RuntimeError('GDF does not support exxdiv %s' % exxdiv)
    vk_kpts = aft_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, exxdiv)
    vk_kpts += df_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, None)
    return vk_kpts
예제 #11
0
파일: aft.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

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

        vj = vk = None
        if with_k:
            vk = aft_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv)
        if with_j:
            vj = aft_jk.get_j_kpts(self, dm, hermi, kpts, kpts_band)
        return vj, vk
예제 #12
0
 def test_aft_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 = aft.AFTDF(cell)
     mydf.kpts = kpts
     vk = aft_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)
예제 #13
0
파일: mdf_jk.py 프로젝트: chrinide/pyscf
def get_k_kpts(mydf, dm_kpts, hermi=1, kpts=numpy.zeros((1,3)), kpts_band=None,
               exxdiv=None):
    vk_kpts = aft_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, exxdiv)
    vk_kpts += df_jk.get_k_kpts(mydf, dm_kpts, hermi, kpts, kpts_band, None)
    return vk_kpts