Example #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)
Example #2
0
    def test_n3_diffuse_frozen(self):
        ehf2 = kmf.e_tot
        self.assertAlmostEqual(ehf2, -6.1870676561725695, 6)

        mycc_frozen = cc.KGCCSD(kmf, frozen=[[0, 1], [0, 1, 2, 3]])
        mycc_frozen.conv_tol = 1e-7
        mycc_frozen.conv_tol_normt = 1e-7
        eris = mycc_frozen.ao2mo()
        eris.mo_energy = [
            eris.fock[ikpt].diagonal().real
            for ikpt in range(mycc_frozen.nkpts)
        ]
        ecc2, t1, t2 = mycc_frozen.kernel(eris=eris)
        self.assertAlmostEqual(ecc2, -0.0442506265840587, 6)

        eom = EOMIP(mycc_frozen)
        imds = eom.make_imds(eris=eris)
        e1_obt, v = eom.ipccsd(nroots=3,
                               koopmans=False,
                               kptlist=[0],
                               imds=imds)
        self.assertAlmostEqual(e1_obt[0][0], -1.1316152294295743, 6)
        self.assertAlmostEqual(e1_obt[0][1], -1.1316152294295743, 6)
        self.assertAlmostEqual(e1_obt[0][2], -1.104163717600433, 6)

        e1_obt, v = eom.ipccsd(nroots=3, koopmans=True, kptlist=[1], imds=imds)
        self.assertAlmostEqual(e1_obt[0][0], -0.8983145129187627, 6)
        self.assertAlmostEqual(e1_obt[0][1], -0.8983145129187627, 6)
        self.assertAlmostEqual(e1_obt[0][2], -0.8983139520017552, 6)

        eom = EOMEA(mycc_frozen)
        imds = eom.make_imds(eris=eris)
        e2_obt, v = eom.eaccsd(nroots=3, kptlist=[0], imds=imds)
        self.assertAlmostEqual(e2_obt[0][0], 1.2572812499753756, 6)
        self.assertAlmostEqual(e2_obt[0][1], 1.2572812532456588, 6)
        self.assertAlmostEqual(e2_obt[0][2], 1.280747357928012, 6)

        eom = EOMEA(mycc_frozen)
        e2_obt, v = eom.eaccsd(nroots=3, koopmans=True, kptlist=[1], imds=imds)
        self.assertAlmostEqual(e2_obt[0][0], 1.229802629928757, 6)
        self.assertAlmostEqual(e2_obt[0][1], 1.229802629928764, 6)
        self.assertAlmostEqual(e2_obt[0][2], 1.384394578043613, 6)
Example #3
0
    def test_n3_diffuse_star(self):
        '''Tests EOM-CCSD* method.'''
        cell = make_test_cell.test_cell_n3_diffuse()

        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_star(nroots=6, koopmans=True)
        eom = eom_gccsd.EOMEA(gcc)
        e2, v = eom.eaccsd_star(nroots=9, koopmans=True)
        '''
        ehf2 = kmf.e_tot
        self.assertAlmostEqual(ehf2, -6.1870676561725695, 6)

        ecc2 = mycc.e_corr
        self.assertAlmostEqual(ecc2, -0.0676483716898783, 6)

        eom = EOMIP(mycc)
        e1_obt = eom.ipccsd_star(nroots=3,
                                 koopmans=True,
                                 kptlist=[0],
                                 eris=eris)
        self.assertAlmostEqual(e1_obt[0][0], -1.1452481194582802, 6)
        self.assertAlmostEqual(e1_obt[0][1], -1.1452481194456137, 6)
        self.assertAlmostEqual(e1_obt[0][2], -1.1174912094746994, 6)

        eom = EOMEA(mycc)
        e1_obt = eom.eaccsd_star(nroots=2,
                                 koopmans=True,
                                 kptlist=[0, 1],
                                 eris=eris)
        self.assertAlmostEqual(e1_obt[0][0], 1.260627794895514, 6)
        self.assertAlmostEqual(e1_obt[0][1], 1.260627794895514, 6)
        self.assertAlmostEqual(e1_obt[1][0], 1.2222607619733454, 6)
        self.assertAlmostEqual(e1_obt[1][1], 1.2222607619733026, 6)
Example #4
0
    def test_n3_diffuse(self):
        cell = make_test_cell.test_cell_n3_diffuse()

        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=6)
        eom = eom_gccsd.EOMEA(gcc)
        e2, v = eom.eaccsd(nroots=6, left=True, koopmans=True)
        '''
        # Running HF and CCSD with 1x1x2 Monkhorst-Pack k-point mesh
        ehf2 = kmf.e_tot
        self.assertAlmostEqual(ehf2, -6.1870676561725695, 6)

        ecc2 = mycc.e_corr
        self.assertAlmostEqual(ecc2, -0.0676483716898783, 6)

        eom = EOMIP(mycc)
        imds = eom.make_imds(eris=eris)
        # Basic ipccsd
        e1_obt, v = eom.ipccsd(nroots=3, left=True, kptlist=[0], imds=imds)
        self.assertAlmostEqual(e1_obt[0][0], -1.14894700482871, 6)
        self.assertAlmostEqual(e1_obt[0][1], -1.148947004822481, 6)
        self.assertAlmostEqual(e1_obt[0][2], -1.108819439453179, 6)

        # Ensure left is working
        e1_obt, v = eom.ipccsd(nroots=3, kptlist=[0], imds=imds)
        self.assertAlmostEqual(e1_obt[0][0], -1.1489469962099519, 6)
        self.assertAlmostEqual(e1_obt[0][1], -1.1489469961858796, 6)
        self.assertAlmostEqual(e1_obt[0][2], -1.1088194518036925, 6)

        # Ensure kptlist behaves correctly
        e1_obt, v = eom.ipccsd(nroots=3, koopmans=True, kptlist=[1], imds=imds)
        self.assertAlmostEqual(e1_obt[0][0], -0.9074337292436309, 6)
        self.assertAlmostEqual(e1_obt[0][1], -0.9074337292161299, 6)
        self.assertAlmostEqual(e1_obt[0][2], -0.9074331788469051, 6)

        eom = EOMEA(mycc)
        imds = eom.make_imds(eris=eris)
        # Basic eaccsd
        e2_obt, v = eom.eaccsd(nroots=3, kptlist=[0], imds=imds)
        self.assertAlmostEqual(e2_obt[0][0], 1.2669788613362731, 6)
        self.assertAlmostEqual(e2_obt[0][1], 1.2669788614703625, 6)
        self.assertAlmostEqual(e2_obt[0][2], 1.278883205515518, 6)

        # Ensure left is working
        e2_obt, v = eom.eaccsd(nroots=3, left=True, kptlist=[0], imds=imds)
        self.assertAlmostEqual(e2_obt[0][0], 1.266978976813125, 6)
        self.assertAlmostEqual(e2_obt[0][1], 1.266978976822988, 6)
        self.assertAlmostEqual(e2_obt[0][2], 1.278883205348326, 6)

        # Ensure kptlist behaves correctly
        e2_obt, v = eom.eaccsd(nroots=3, koopmans=True, kptlist=[1], imds=imds)
        self.assertAlmostEqual(e2_obt[0][0], 1.227583017804503, 6)
        self.assertAlmostEqual(e2_obt[0][1], 1.2275830178298166, 6)
        self.assertAlmostEqual(e2_obt[0][2], 1.3830379190440196, 6)

        # Basis eeccsd
        eom = EOMEE(mycc)
        imds = eom.make_imds(eris=eris)
        ee, v = eom.eeccsd(nroots=3, kptlist=[0], imds=imds)
        self.assertAlmostEqual(ee[0][0], 0.118301677904104, 6)
        self.assertAlmostEqual(ee[0][1], 0.118301914631351, 6)
        self.assertAlmostEqual(ee[0][2], 0.128285117266903, 6)
        ee, v = eom.eeccsd(nroots=3, kptlist=[1], imds=imds)
        self.assertAlmostEqual(ee[0][0], 0.07928010716890202, 6)
        self.assertAlmostEqual(ee[0][1], 0.07928011416043479, 6)
        self.assertAlmostEqual(ee[0][2], 0.07928011417159982, 6)