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