예제 #1
0
    def test_dmd_high_cost(self):
        cell = gto.Cell()
        cell.atom = '''
        C 0.000000000000   0.000000000000   0.000000000000
        C 1.685068664391   1.685068664391   1.685068664391
        '''
        cell.basis = {'C': [[0, (0.8, 1.0)], [1, (1.0, 1.0)]]}
        cell.pseudo = 'gth-pade'
        cell.a = '''
        0.000000000, 3.370137329, 3.370137329
        3.370137329, 0.000000000, 3.370137329
        3.370137329, 3.370137329, 0.000000000'''
        cell.unit = 'B'
        cell.verbose = 5
        cell.build()

        nmp = [1, 1, 2]

        # treating 1*1*2 supercell at gamma point
        supcell = super_cell(cell, nmp)
        gmf = scf.GHF(supcell, exxdiv=None)
        ehf = gmf.kernel()
        gcc = cc.GCCSD(gmf)
        gcc.conv_tol = 1e-12
        gcc.conv_tol_normt = 1e-10
        gcc.max_cycle = 250
        ecc, t1, t2 = gcc.kernel()
        print('GHF energy (supercell) %.7f \n' % (float(ehf) / 2.))
        print('GCCSD correlation energy (supercell) %.7f \n' %
              (float(ecc) / 2.))

        eom = eom_gccsd.EOMIP(gcc)
        e1, v = eom.ipccsd(nroots=2)
        eom = eom_gccsd.EOMEA(gcc)
        e2, v = eom.eaccsd(nroots=2, koopmans=True)

        # Running HF and CCSD with 1x1x2 Monkhorst-Pack k-point mesh
        kmf = scf.KGHF(cell, kpts=cell.make_kpts(nmp), exxdiv=None)
        ehf2 = kmf.kernel()

        mycc = cc.KGCCSD(kmf)
        mycc.conv_tol = 1e-12
        mycc.conv_tol_normt = 1e-10
        mycc.max_cycle = 250
        ecc2, t1, t2 = mycc.kernel()
        print('GHF energy %.7f \n' % (float(ehf2)))
        print('GCCSD correlation energy  %.7f \n' % (float(ecc2)))

        kptlist = cell.make_kpts(nmp)
        eom = EOMIP(mycc)
        e1_obt, v = eom.ipccsd(nroots=2, kptlist=[0])
        eom = EOMEA(mycc)
        e2_obt, v = eom.eaccsd(nroots=2, koopmans=True, kptlist=[0])

        assert (ehf / 2 - ehf2 < 1e-10)
        assert (ecc / 2 - ecc2 < 1e-10)
        assert (e1[0] - (e1_obt[0][0]) < 1e-7)
        assert (e2[0] - (e2_obt[0][0]) < 1e-7)
예제 #2
0
    def test_eaccsd(self):
        e, v = mycc.eaccsd(nroots=1)
        self.assertAlmostEqual(e, 0.19050592141957523, 6)

        myeom = eom_gccsd.EOMEA(mycc)
        e, v = myeom.eaccsd(nroots=3)
        self.assertAlmostEqual(e[0], 0.19050592141957523, 6)
        self.assertAlmostEqual(e[1], 0.19050592141957523, 6)
        self.assertAlmostEqual(e[2], 0.28345228596676159, 6)
예제 #3
0
 def eaccsd(self,
            nroots=1,
            left=False,
            koopmans=False,
            guess=None,
            partition=None,
            eris=None):
     from pyscf.cc import eom_gccsd
     return eom_gccsd.EOMEA(self).kernel(nroots, left, koopmans, guess,
                                         partition, eris)
예제 #4
0
파일: test.py 프로젝트: zzy2014/pyscf
    def setUpClass(cls):
        """
        Oxygen atom test vs ORCA-MRCC data.

        ORCA version 3.0.3

        Input example:

        ! cc-pvdz UHF TightSCF

        %mrcc
          method "CCSDT"
          ETol 10
        end

        %pal nprocs 4
        end

        * xyzfile 0 1 initial.xyz

        ORCA reference energies:

        HF    -74.6652538779
        CCS   -74.841686696943
        CCSD  -74.819248718982
        CCSDT -74.829163218204
        """
        cls.mol = gto.Mole()
        cls.mol.verbose = 0
        cls.mol.atom = "O 0 0 0"
        cls.mol.basis = 'cc-pvdz'
        cls.mol.build()

        cls.mf = scf.RHF(cls.mol)
        cls.mf.conv_tol = 1e-11
        cls.mf.kernel()
        testing.assert_allclose(cls.mf.e_tot, -74.6652538779, atol=1e-4)
        cls.mf = scf.addons.convert_to_ghf(cls.mf)

        cls.ccsd = gccsd.GCCSD(cls.mf, frozen=2)
        cls.ccsd.kernel()
        cls.ccsd.conv_tol_normt = 1e-8
        cls.ccsd.solve_lambda()

        cls.nroots = 2

        cls.eomip = eom_gccsd.EOMIP(cls.ccsd)
        cls.eomip.conv_tol = 1e-12
        cls.eomip.kernel(nroots=cls.nroots, koopmans=True)
        cls.eomea = eom_gccsd.EOMEA(cls.ccsd)
        cls.eomea.conv_tol = 1e-12
        cls.eomea.kernel(nroots=cls.nroots, koopmans=True)
예제 #5
0
    def test_eaccsd(self):
        e, v = mycc.eaccsd(nroots=1)
        self.assertAlmostEqual(e, 0.19050592141957523, 6)

        myeom = eom_gccsd.EOMEA(mycc)
        e, v = myeom.eaccsd(nroots=3)
        self.assertAlmostEqual(e[0], 0.19050592141957523, 6)
        self.assertAlmostEqual(e[1], 0.19050592141957523, 6)
        self.assertAlmostEqual(e[2], 0.28345228596676159, 6)

        e, lv = myeom.eaccsd(nroots=3, left=True)
        self.assertAlmostEqual(e[0], 0.1905059282334537, 6)
        self.assertAlmostEqual(e[1], 0.1905059282334538, 6)
        self.assertAlmostEqual(e[2], 0.2834522921515028, 6)

        e = myeom.eaccsd_star_contract(e, v, lv)
        self.assertAlmostEqual(e[0], 0.1894169322207168, 6)
        self.assertAlmostEqual(e[1], 0.1894169322207168, 6)
        self.assertAlmostEqual(e[2], 0.2820757599337823, 6)
예제 #6
0
 def test_ea_matvec(self):
     numpy.random.seed(12)
     r1 = numpy.random.random((nvir)) - .9 + numpy.random.random(
         (nvir)) * .2j
     r2 = (numpy.random.random(
         (nocc, nvir, nvir)) - .9 + numpy.random.random(
             (nocc, nvir, nvir)) * .2j)
     myeom = eom_gccsd.EOMEA(mycc1)
     vec = myeom.amplitudes_to_vector(r1, r2)
     r1, r2 = myeom.vector_to_amplitudes(vec)
     self.assertAlmostEqual(lib.finger(r1),
                            0.92358852093801858 + 0.12450821337841513j, 12)
     self.assertAlmostEqual(lib.finger(r2),
                            12.871866219332823 + 2.72978281362834j, 12)
     imds = myeom.make_imds(eris1)
     vec1 = myeom.matvec(vec, imds)
     self.assertAlmostEqual(lib.finger(vec1),
                            9955.7506642715725 + 1625.6301340218238j, 9)
     self.assertAlmostEqual(lib.finger(myeom.get_diag()),
                            -23.784806916968591 - 975.86985392855195j, 9)
예제 #7
0
    def test_h2o_star(self):
        mol_h2o = gto.Mole()
        mol_h2o.atom = [
            [8, [0.000000000000000, -0.000000000000000, -0.124143731294022]],
            [1, [0.000000000000000, -1.430522735894536, 0.985125550040314]],
            [1, [0.000000000000000, 1.430522735894536, 0.985125550040314]]
        ]
        mol_h2o.unit = 'B'
        mol_h2o.basis = {
            'H': [[0, [5.4471780, 0.156285], [0.8245472, 0.904691]],
                  [0, [0.1831916, 1.0]]],
            'O':
            '3-21G'
        }
        mol_h2o.verbose = 9
        mol_h2o.output = '/dev/null'
        mol_h2o.build()
        mf_h2o = scf.RHF(mol_h2o)
        mf_h2o.conv_tol_grad = 1e-12
        mf_h2o.conv_tol = 1e-12
        mf_h2o.kernel()
        mycc_h2o = cc.GCCSD(mf_h2o).run()
        mycc_h2o.conv_tol_normt = 1e-12
        mycc_h2o.conv_tol = 1e-12
        mycc_h2o.kernel()

        myeom = eom_gccsd.EOMIP(mycc_h2o)
        e = myeom.ipccsd_star(nroots=3)
        self.assertAlmostEqual(e[0], 0.410661965883, 6)

        myeom = eom_gccsd.EOMIP_Ta(mycc_h2o)
        e = myeom.ipccsd_star(nroots=3)
        self.assertAlmostEqual(e[0], 0.411695647736, 6)

        myeom = eom_gccsd.EOMEA(mycc_h2o)
        e = myeom.eaccsd_star(nroots=3)
        self.assertAlmostEqual(e[0], 0.250589854185, 6)

        myeom = eom_gccsd.EOMEA_Ta(mycc_h2o)
        e = myeom.eaccsd_star(nroots=3)
        self.assertAlmostEqual(e[0], 0.250720295150, 6)
예제 #8
0
파일: test.py 프로젝트: zzy2014/pyscf
    def setUpClass(cls):
        cls.mol = gto.Mole()
        cls.mol.verbose = 0
        cls.mol.atom = "H 0 0 0; H 0.74 0 0"
        cls.mol.basis = 'ccpvdz'
        cls.mol.build()

        cls.mf = scf.GHF(cls.mol)
        cls.mf.kernel()

        cls.ccsd = gccsd.GCCSD(cls.mf)
        cls.ccsd.kernel()
        cls.ccsd.conv_tol_normt = 1e-8
        cls.ccsd.solve_lambda()

        cls.nroots = 2

        cls.eomip = eom_gccsd.EOMIP(cls.ccsd)
        cls.eomip.conv_tol = 1e-12
        cls.eomip.kernel(nroots=cls.nroots)
        cls.eomea = eom_gccsd.EOMEA(cls.ccsd)
        cls.eomea.conv_tol = 1e-12
        cls.eomea.kernel(nroots=cls.nroots)
예제 #9
0
파일: test.py 프로젝트: zzy2014/pyscf
    def setUpClass(cls):
        """
        H20 molecule test vs ORCA-MRCC data.

        ORCA reference energies:

        HF    -75.97354725
        CCS   --
        CCSD  -76.185805898396
        CCSDT -76.189327633478
        """
        cls.mol = gto.Mole()
        cls.mol.verbose = 0
        cls.mol.atom = "O 0 0 0; H  0.758602  0.000000  0.504284; H  0.758602  0.000000  -0.504284"
        cls.mol.unit = "angstrom"

        cls.mol.basis = 'cc-pvdz'
        cls.mol.build()

        cls.mf = scf.GHF(cls.mol)
        cls.mf.conv_tol = 1e-11
        cls.mf.kernel()
        testing.assert_allclose(cls.mf.e_tot, -75.97354725, atol=1e-4)

        cls.ccsd = gccsd.GCCSD(cls.mf, frozen=2)
        cls.ccsd.kernel()
        cls.ccsd.conv_tol_normt = 1e-8
        cls.ccsd.solve_lambda()

        cls.nroots = 4

        cls.eomip = eom_gccsd.EOMIP(cls.ccsd)
        cls.eomip.conv_tol = 1e-12
        cls.eomip.kernel(nroots=cls.nroots)
        cls.eomea = eom_gccsd.EOMEA(cls.ccsd)
        cls.eomea.conv_tol = 1e-12
        cls.eomea.kernel(nroots=cls.nroots)
예제 #10
0
 def eomea_method(self):
     from pyscf.cc import eom_gccsd
     return eom_gccsd.EOMEA(self)