Exemple #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 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
Exemple #2
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 = 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)
Exemple #3
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 = 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)
Exemple #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 = 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)
Exemple #5
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 = 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)
Exemple #6
0
 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)
Exemple #7
0
    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
Exemple #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 = 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)
Exemple #9
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 = 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)
Exemple #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 = 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)
Exemple #11
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 = 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)