Пример #1
0
 def test_tddft_b3lyp_xcfun(self):
     td = rks.TDDFT(mf_b3lyp1)
     es = td.kernel(nstates=5)[0] * 27.2114
     dft.numint.NumInt.libxc = dft.libxc
     self.assertAlmostEqual(
         abs(es - [
             9.88975514, 9.88975514, 15.16643994, 30.55289462, 30.55289462
         ]).max(), 0, 6)
Пример #2
0
    def test_ab_b3lyp(self):
        mf = mf_b3lyp
        a, b = rks.TDDFT(mf).get_ab()
        ftda = rhf.gen_tda_operation(mf, singlet=None)[0]
        ftdhf = rhf.gen_tdhf_operation(mf, singlet=True)[0]
        nocc = numpy.count_nonzero(mf.mo_occ == 2)
        nvir = numpy.count_nonzero(mf.mo_occ == 0)
        numpy.random.seed(2)
        x, y = xy = numpy.random.random((2,nocc,nvir))
        ax = numpy.einsum('iajb,jb->ia', a, x)
        self.assertAlmostEqual(abs(ax - ftda([x]).reshape(nocc,nvir)).max(), 0, 9)

        ab1 = ax + numpy.einsum('iajb,jb->ia', b, y)
        ab2 =-numpy.einsum('iajb,jb->ia', b, x)
        ab2-= numpy.einsum('iajb,jb->ia', a, y)
        abxy_ref = ftdhf([xy]).reshape(2,nocc,nvir)
        self.assertAlmostEqual(abs(ab1 - abxy_ref[0]).max(), 0, 9)
        self.assertAlmostEqual(abs(ab2 - abxy_ref[1]).max(), 0, 9)
Пример #3
0
def TDDFT(mf):
    if isinstance(mf, scf.uhf.UHF):
        mf = scf.addons.convert_to_uhf(mf)
        if getattr(mf, 'xc', None):
            if mf._numint.libxc.is_hybrid_xc(mf.xc):
                return uks.TDDFT(mf)
            else:
                return uks.TDDFTNoHybrid(mf)
        else:
            return uhf.TDHF(mf)
    else:
        mf = scf.addons.convert_to_rhf(mf)
        if getattr(mf, 'xc', None):
            if mf._numint.libxc.is_hybrid_xc(mf.xc):
                return rks.TDDFT(mf)
            else:
                return rks.TDDFTNoHybrid(mf)
        else:
            return rhf.TDHF(mf)
Пример #4
0
 def test_tddft_b88p86(self):
     td = rks.TDDFT(mf_bp86)
     es = td.kernel(nstates=5)[0] * 27.2114
     self.assertAlmostEqual(lib.fp(es), -40.462005239920558, 6)
Пример #5
0
 def test_tddft_lda(self):
     td = rks.TDDFT(mf_lda3)
     es = td.kernel(nstates=5)[0] * 27.2114
     self.assertAlmostEqual(lib.fp(es), -41.059050077236151, 6)
Пример #6
0
 def test_tddft_b88p86_triplet(self):
     td = rks.TDDFT(mf_bp86)
     td.singlet = False
     es = td.kernel(nstates=5)[0] * 27.2114
     ref = [9.09322358,  9.09322358, 12.29843139, 29.26731075, 29.26731075]
     self.assertAlmostEqual(abs(es - ref).max(), 0, 5)
Пример #7
0
 def test_tddft_b3lyp_xcfun(self):
     with lib.temporary_env(dft.numint.NumInt, libxc=dft.xcfun):
         td = rks.TDDFT(mf_b3lyp1)
         es = td.kernel(nstates=5)[0] * 27.2114
     ref = [9.88975514, 9.88975514, 15.16643994, 30.55289462, 30.55289462]
     self.assertAlmostEqual(abs(es - ref).max(), 0, 6)
Пример #8
0
 def test_tddft_b3lyp(self):
     td = rks.TDDFT(mf_b3lyp)
     es = td.kernel(nstates=5)[0] * 27.2114
     self.assertAlmostEqual(lib.fp(es), -41.29609453661341, 6)
Пример #9
0
 def test_tddft_lda(self):
     td = rks.TDDFT(mf_lda)
     es = td.kernel(nstates=5)[0] * 27.2114
     self.assertAlmostEqual(lib.fp(es), -41.100806721759945, 6)