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 mdf_jk.get_jk(self, dm, hermi, kpts, kpts_band, with_j, with_k, exxdiv) vj = vk = None if with_k: vk = mdf_jk.get_k_kpts(self, dm, hermi, kpts, kpts_band, exxdiv) if with_j: vj = mdf_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 = mdf.MDF(cell) mydf.kpts = numpy.random.random((4,3)) mydf.gs = numpy.asarray((5,)*3) mydf.auxbasis = 'weigend' vj = mdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts) self.assertAlmostEqual(finger(vj[0]), (0.48124673545723651-0.11872368821666528j ), 9) self.assertAlmostEqual(finger(vj[1]), (0.53969554495566907-0.046131953496875822j ), 9) self.assertAlmostEqual(finger(vj[2]), (0.52703012199370924-0.083702303894662933j ), 9) self.assertAlmostEqual(finger(vj[3]), (0.54249742665727529+0.0088412437015989095j), 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 = mdf.MDF(cell) mydf.kpts = numpy.random.random((4,3)) mydf.gs = numpy.asarray((5,)*3) mydf.auxbasis = 'weigend' vj = mdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts) self.assertAlmostEqual(finger(vj[0]), (0.48110100011270873-0.1187207516057024j ), 9) self.assertAlmostEqual(finger(vj[1]), (0.53956267439270444-0.046130125909028916j), 9) self.assertAlmostEqual(finger(vj[2]), (0.52689349636674265-0.083698423012819212j), 9) self.assertAlmostEqual(finger(vj[3]), (0.54234901696511795+0.00883535738463977j ), 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 = mdf.MDF(cell) mydf.kpts = numpy.random.random((4,3)) mydf.gs = numpy.asarray((5,)*3) mydf.auxbasis = 'weigend' vj = mdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts) self.assertAlmostEqual(finger(vj[0]), (0.48227656190426815-0.11872564582011846j ), 9) self.assertAlmostEqual(finger(vj[1]), (0.54073739901923457-0.046133364517070521j), 9) self.assertAlmostEqual(finger(vj[2]), (0.52806808175231224-0.083705005021225326j), 9) self.assertAlmostEqual(finger(vj[3]), (0.54351987747190522+0.008843499422802630j), 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 = mdf.MDF(cell).set(auxbasis='weigend') mydf.linear_dep_threshold = 1e-7 mydf.kpts = numpy.random.random((4,3)) mydf.mesh = numpy.asarray((11,)*3) mydf.eta = 0.3 mydf.auxbasis = 'weigend' vj = mdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts) self.assertAlmostEqual(finger(vj[0]), (0.48227579581461733-0.11872579745444795j ), 9) self.assertAlmostEqual(finger(vj[1]), (0.54073632897787327-0.046133464893148166j), 9) self.assertAlmostEqual(finger(vj[2]), (0.52806708811400505-0.083705157508446218j), 9) self.assertAlmostEqual(finger(vj[3]), (0.5435189277058412 +0.008843567739405876j), 9)
def test_j_kpts(self): numpy.random.seed(1) nao = cell0.nao_nr() dm = numpy.random.random((4,nao,nao)) dm = dm + dm.transpose(0,2,1) mydf = mdf.MDF(cell0).set(auxbasis='weigend') mydf.linear_dep_threshold = 1e-7 mydf.kpts = numpy.random.random((4,3)) mydf.mesh = numpy.asarray((11,)*3) mydf.eta = 0.3 mydf.auxbasis = 'weigend' vj = mdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts) self.assertAlmostEqual(lib.fp(vj[0]), (7.240247126035314-0.0010092876216366933j), 9) self.assertAlmostEqual(lib.fp(vj[1]), (7.248775589325954-0.0015611883008615822j), 9) self.assertAlmostEqual(lib.fp(vj[2]), (7.241230472941957-0.002515541792204466j) , 9) self.assertAlmostEqual(lib.fp(vj[3]), (7.240398079284901+0.0014737107502212023j), 9)
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 kpts = numpy.asarray(kpts) if kpts.shape == (3,): return mdf_jk.get_jk(self, dm, hermi, kpts, kpt_band, with_j, with_k, exxdiv) vj = vk = None if with_k: vk = mdf_jk.get_k_kpts(self, dm, hermi, kpts, kpt_band, exxdiv) if with_j: vj = mdf_jk.get_j_kpts(self, dm, hermi, kpts, kpt_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 = mdf.MDF(cell) mydf.kpts = numpy.random.random((4, 3)) mydf.gs = numpy.asarray((5, ) * 3) mydf.auxbasis = 'weigend' vj = mdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts) self.assertAlmostEqual(finger(vj[0]), (0.48110100011270873 - 0.1187207516057024j), 9) self.assertAlmostEqual(finger(vj[1]), (0.53956267439270444 - 0.046130125909028916j), 9) self.assertAlmostEqual(finger(vj[2]), (0.52689349636674265 - 0.083698423012819212j), 9) self.assertAlmostEqual(finger(vj[3]), (0.54234901696511795 + 0.00883535738463977j), 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 = mdf.MDF(cell).set(auxbasis='weigend') mydf.kpts = numpy.random.random((4, 3)) mydf.gs = numpy.asarray((5, ) * 3) mydf.eta = 0.3 mydf.auxbasis = 'weigend' vj = mdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts) self.assertAlmostEqual(finger(vj[0]), (0.48230415575983976 - 0.11872598167125974j), 9) self.assertAlmostEqual(finger(vj[1]), (0.5407644169168595 - 0.046133570735630479j), 9) self.assertAlmostEqual(finger(vj[2]), (0.52809528766575564 - 0.083705362039349793j), 9) self.assertAlmostEqual(finger(vj[3]), (0.54354803346388358 + 0.0088438282782892438j), 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 = mdf.MDF(cell) mydf.kpts = numpy.random.random((4, 3)) mydf.gs = numpy.asarray((5, ) * 3) mydf.auxbasis = 'weigend' vj = mdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts) self.assertAlmostEqual(finger(vj[0]), (0.48230415575990992 - 0.1187259816712561j), 9) self.assertAlmostEqual(finger(vj[1]), (0.54076441691691635 - 0.046133570735633858j), 9) self.assertAlmostEqual(finger(vj[2]), (0.52809528766588443 - 0.083705362039349696j), 9) self.assertAlmostEqual(finger(vj[3]), (0.54354803346397418 + 0.008843828278287412j), 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 = mdf.MDF(cell) mydf.kpts = numpy.random.random((4, 3)) mydf.gs = numpy.asarray((5, ) * 3) mydf.auxbasis = 'weigend' vj = mdf_jk.get_j_kpts(mydf, dm, 1, mydf.kpts) self.assertAlmostEqual(finger(vj[0]), (0.48124673545723651 - 0.11872368821666528j), 9) self.assertAlmostEqual(finger(vj[1]), (0.53969554495566907 - 0.046131953496875822j), 9) self.assertAlmostEqual(finger(vj[2]), (0.52703012199370924 - 0.083702303894662933j), 9) self.assertAlmostEqual(finger(vj[3]), (0.54249742665727529 + 0.0088412437015989095j), 9)