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