Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
    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()
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
 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()
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
0
 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)
Ejemplo n.º 14
0
 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)
Ejemplo n.º 15
0
 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)