def test_tddft_with_wfnsym(self): pmol = mol.copy() pmol.symmetry = True pmol.build() mf = dft.RKS(pmol).run() td = rks.TDDFTNoHybrid(mf) td.wfnsym = 'A2' td.nroots = 3 es = td.kernel()[0] self.assertAlmostEqual(lib.finger(es), 2.1856920990871753, 6) td.analyze()
def test_tddft_with_wfnsym(self): pmol = mol.copy() pmol.symmetry = True pmol.build() mf = dft.RKS(pmol).run() td = rks.TDDFTNoHybrid(mf) td.wfnsym = 'A2' td.nroots = 3 es = td.kernel()[0] self.assertTrue(len(es) == 2) # At most 2 states due to symmetry subspace size self.assertAlmostEqual(lib.fp(es), 2.1856920990871753, 6) td.analyze()
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_nohbrid_b88p86(self): td = rks.TDDFTNoHybrid(mf_bp86) es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -40.462005239920558, 6)
def test_nohbrid_lda(self): td = rks.TDDFTNoHybrid(mf_lda3) es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -41.059050077236151, 6) ref = [9.74227238, 9.74227238, 14.85153818, 30.35019348, 30.35019348] self.assertAlmostEqual(abs(es - ref).max(), 0, 6)
def test_nohbrid_lda(self): td = rks.TDDFTNoHybrid(mf_lda3) es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -41.059050077236151, 6)