def test_nto(self): mf = scf.RHF(mol).run() td = rks.TDA(mf).run() w, nto = td.get_nto(state=1) self.assertAlmostEqual(w[0], 0.99997335352278072, 9) self.assertAlmostEqual(lib.finger(w), 0.99998775067586554, 9) pmol = copy.copy(mol) pmol.symmetry = True pmol.build(0, 0) mf = scf.RHF(mol).run() td = rks.TDA(mf).run() w, nto = td.get_nto(state=0) self.assertAlmostEqual(w[0], 0.99997335352278072, 9) self.assertAlmostEqual(lib.finger(w), 0.99998775067586554, 9)
def test_tda_with_wfnsym(self): pmol = mol.copy() pmol.symmetry = True pmol.build(0, 0) mf = dft.RKS(pmol).run() td = rks.TDA(mf) td.wfnsym = 'A2' es = td.kernel(nstates=3)[0] self.assertTrue(len(es) == 2) # At most 2 states due to symmetry subspace size self.assertAlmostEqual(lib.fp(es), 2.1857694738741071, 6) note_args = [] def temp_logger_note(rec, msg, *args): note_args.append(args) with lib.temporary_env(lib.logger.Logger, note=temp_logger_note): td.analyze() ref = [(), (1, 'A2', 38.42106241429979, 32.26985141807447, 0.0), (2, 'A2', 38.972172173478356, 31.813519911465608, 0.0)] self.assertEqual(note_args[1][1], 'A2') self.assertEqual(note_args[2][1], 'A2') self.assertAlmostEqual(abs(numpy.append(ref[1][2:], ref[2][2:]) - numpy.append(note_args[1][2:], note_args[2][2:])).max(), 0, 7)
def test_tda_lda_triplet(self): td = rks.TDA(mf_lda) td.singlet = False es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -39.988118769202416, 6) ref = [9.0139312, 9.0139312, 12.42444659] self.assertAlmostEqual(abs(es[:3] - ref).max(), 0, 6)
def test_tda_b3lypg(self): mf = dft.RKS(mol) mf.xc = 'b3lypg' mf.grids.prune = None mf.scf() td = rks.TDA(mf) es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -41.385520327568869, 6)
def test_nto(self): mf = scf.RHF(mol).run() td = rks.TDA(mf).run() w, nto = td.get_nto(state=3) self.assertAlmostEqual(w[0], 0.98655300613468389, 9) self.assertAlmostEqual(lib.fp(w), 0.98625701534112464, 9) w, nto = td.get_nto(state=0) self.assertAlmostEqual(w[0], 0.99997335352278072, 9) self.assertAlmostEqual(lib.fp(w), 0.99998775067586554, 9) pmol = copy.copy(mol) pmol.symmetry = True pmol.build(0, 0) mf = scf.RHF(pmol).run() td = rks.TDA(mf).run(nstates=3) w, nto = td.get_nto(state=-1) self.assertAlmostEqual(w[0], 0.98655300613468389, 9) self.assertAlmostEqual(lib.fp(w), 0.98625701534112464, 9)
def test_tda_lda_xcfun(self): mf = dft.RKS(mol) mf.xc = 'lda,vwn' mf.grids.prune = None mf._numint.libxc = dft.xcfun mf.scf() td = rks.TDA(mf) es = td.kernel(nstates=5)[0] * 27.2114 dft.numint.NumInt.libxc = dft.libxc self.assertAlmostEqual(lib.fp(es), -41.201828219760415, 6)
def test_tda_lda_xcfun(self): mf = dft.RKS(mol) mf.xc = 'lda,vwn' mf.grids.prune = None mf._numint.libxc = dft.xcfun mf.scf() td = rks.TDA(mf) es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -41.201828219760415, 6) ref = [9.68872769, 9.68872769, 15.07122478] self.assertAlmostEqual(abs(es[:3] - ref).max(), 0, 6)
def test_tda_with_wfnsym(self): pmol = mol.copy() pmol.symmetry = True pmol.build(0, 0) mf = dft.RKS(pmol).run() td = rks.TDA(mf) td.wfnsym = 'A2' es = td.kernel(nstates=3)[0] self.assertAlmostEqual(lib.finger(es), 2.1857694738741071, 6) td.analyze()
def TDA(mf): if isinstance(mf, scf.uhf.UHF): mf = scf.addons.convert_to_uhf(mf) if getattr(mf, 'xc', None): return uks.TDA(mf) else: return uhf.TDA(mf) else: mf = scf.addons.convert_to_rhf(mf) if getattr(mf, 'xc', None): return rks.TDA(mf) else: return rhf.TDA(mf)
def TDA(mf): if isinstance(mf, scf.uhf.UHF): mf = scf.addons.convert_to_uhf(mf) if isinstance(mf, dft.rks.KohnShamDFT): return uks.TDA(mf) else: return uhf.TDA(mf) else: mf = scf.addons.convert_to_rhf(mf) if isinstance(mf, dft.rks.KohnShamDFT): return rks.TDA(mf) else: return rhf.TDA(mf)
def test_tda_b3lyp_triplet(self): td = rks.TDA(mf_b3lyp) td.singlet = False es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -40.020204585289648, 6) td.analyze()
def test_tda_b3lyp_xcfun(self): with lib.temporary_env(dft.numint.NumInt, libxc=dft.xcfun): td = rks.TDA(mf_b3lyp1) es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -41.393122257109056, 6)
def test_tda_lda(self): td = rks.TDA(mf_lda) es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -41.201828219760415, 6)
def test_tda_lda_triplet(self): td = rks.TDA(mf_lda) td.singlet = False es = td.kernel(nstates=5)[0] * 27.2114 self.assertAlmostEqual(lib.fp(es), -39.988118769202416, 6)
def test_tda_b3lyp_xcfun(self): td = rks.TDA(mf_b3lyp1) es = td.kernel(nstates=5)[0] * 27.2114 dft.numint.NumInt.libxc = dft.libxc self.assertAlmostEqual(lib.finger(es), -41.393122257109056, 6)