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