Esempio n. 1
0
    def test_rccsd_t_vs_gccsd_t(self):
        '''Test rccsd(t) vs gccsd(t) with k-points.'''
        from pyscf.pbc.scf.addons import convert_to_ghf
        kmf = copy.copy(rand_kmf)
        mat_veff = kmf.get_veff().round(4)
        mat_hcore = kmf.get_hcore().round(4)
        kmf.get_veff = lambda *x: mat_veff
        kmf.get_hcore = lambda *x: mat_hcore

        rand_cc = pbcc.KRCCSD(kmf)
        eris = rand_cc.ao2mo(kmf.mo_coeff)
        eris.mo_energy = [eris.fock[k].diagonal() for k in range(rand_cc.nkpts)]
        t1, t2 = rand_t1_t2(kmf, rand_cc)
        rand_cc.t1, rand_cc.t2, rand_cc.eris = t1, t2, eris
        energy_t = kccsd_t_rhf.kernel(rand_cc, eris=eris)

        gkmf = convert_to_ghf(rand_kmf)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = gkmf.get_veff().round(4)
        mat_hcore = gkmf.get_hcore().round(4)
        gkmf.get_veff = lambda *x: mat_veff
        gkmf.get_hcore = lambda *x: mat_hcore

        from pyscf.pbc.cc import kccsd_t
        rand_gcc = pbcc.KGCCSD(gkmf)
        eris = rand_gcc.ao2mo(rand_gcc.mo_coeff)
        eris.mo_energy = [eris.fock[k].diagonal() for k in range(rand_cc.nkpts)]
        gt1 = rand_gcc.spatial2spin(t1)
        gt2 = rand_gcc.spatial2spin(t2)
        rand_gcc.t1, rand_gcc.t2, rand_gcc.eris = gt1, gt2, eris
        genergy_t = kccsd_t.kernel(rand_gcc, eris=eris)

        self.assertAlmostEqual(energy_t, -65.5365125645066, 6)
        self.assertAlmostEqual(energy_t, genergy_t, 8)
Esempio n. 2
0
    def test_t3p2_imds_complex_against_so_frozen(self):
        '''Test t3[2] implementation against spin-orbital implmentation with frozen orbitals.'''
        from pyscf.pbc.scf.addons import convert_to_ghf
        kmf = copy.copy(rand_kmf2)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = kmf.get_veff().round(4)
        mat_hcore = kmf.get_hcore().round(4)
        kmf.get_veff = lambda *x: mat_veff
        kmf.get_hcore = lambda *x: mat_hcore

        rand_cc = pbcc.kccsd_rhf.RCCSD(kmf, frozen=1)
        eris = rand_cc.ao2mo(kmf.mo_coeff)
        eris.mo_energy = [
            eris.fock[k].diagonal() for k in range(rand_cc.nkpts)
        ]
        t1, t2 = rand_t1_t2(kmf, rand_cc)
        rand_cc.t1, rand_cc.t2, rand_cc.eris = t1, t2, eris

        e, pt1, pt2, Wmcik, Wacek = kintermediates_rhf.get_t3p2_imds(
            rand_cc, t1, t2)
        self.assertAlmostEqual(lib.finger(e), -328.44609187669454, 6)
        self.assertAlmostEqual(lib.finger(pt1),
                               (-64.29455737653288 + 94.36604246905883j), 6)
        self.assertAlmostEqual(lib.finger(pt2),
                               (-24.663592135920723 + 36.00181963359046j), 6)
        self.assertAlmostEqual(lib.finger(Wmcik),
                               (6.692675632408793 + 6.926864923969868j), 6)
        self.assertAlmostEqual(lib.finger(Wacek),
                               (24.78958393361647 - 15.627512899715132j), 6)

        gkmf = convert_to_ghf(rand_kmf2)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = gkmf.get_veff().round(4)
        mat_hcore = gkmf.get_hcore().round(4)
        gkmf.get_veff = lambda *x: mat_veff
        gkmf.get_hcore = lambda *x: mat_hcore

        rand_gcc = pbcc.KGCCSD(gkmf, frozen=2)
        eris = rand_gcc.ao2mo(rand_gcc.mo_coeff)
        eris.mo_energy = [
            eris.fock[k].diagonal() for k in range(rand_gcc.nkpts)
        ]
        gt1 = rand_gcc.spatial2spin(t1)
        gt2 = rand_gcc.spatial2spin(t2)
        rand_gcc.t1, rand_gcc.t2, rand_gcc.eris = gt1, gt2, eris

        ge, gpt1, gpt2, gWmcik, gWacek = kintermediates.get_t3p2_imds_slow(
            rand_gcc, gt1, gt2)
        self.assertAlmostEqual(lib.finger(ge), lib.finger(e), 8)
        self.assertAlmostEqual(lib.finger(gpt1[:, ::2, ::2]), lib.finger(pt1),
                               8)
        self.assertAlmostEqual(lib.finger(gpt2[:, :, :, ::2, 1::2, ::2, 1::2]),
                               lib.finger(pt2), 8)
        self.assertAlmostEqual(
            lib.finger(gWmcik[:, :, :, ::2, 1::2, ::2, 1::2]),
            lib.finger(Wmcik), 8)
        self.assertAlmostEqual(
            lib.finger(gWacek[:, :, :, ::2, 1::2, ::2, 1::2]),
            lib.finger(Wacek), 8)
Esempio n. 3
0
    def test_t3p2_imds_complex_against_so(self):
        '''Test t3[2] implementation against spin-orbital implmentation.'''
        from pyscf.pbc.scf.addons import convert_to_ghf
        kmf = copy.copy(rand_kmf2)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = kmf.get_veff().round(4)
        mat_hcore = kmf.get_hcore().round(4)
        kmf.get_veff = lambda *x: mat_veff
        kmf.get_hcore = lambda *x: mat_hcore

        rand_cc = pbcc.kccsd_rhf.RCCSD(kmf)
        eris = rand_cc.ao2mo(kmf.mo_coeff)
        eris.mo_energy = [
            eris.fock[k].diagonal() for k in range(rand_cc.nkpts)
        ]
        t1, t2 = rand_t1_t2(kmf, rand_cc)
        rand_cc.t1, rand_cc.t2, rand_cc.eris = t1, t2, eris

        e, pt1, pt2, Wmcik, Wacek = kintermediates_rhf.get_t3p2_imds(
            rand_cc, t1, t2)
        self.assertAlmostEqual(lib.finger(e), 3867.812511518491, 6)
        self.assertAlmostEqual(lib.finger(pt1),
                               (179.0050003787795 + 521.7529255474592j), 6)
        self.assertAlmostEqual(lib.finger(pt2),
                               (361.4902731606503 + 1079.5387279755082j), 6)
        self.assertAlmostEqual(lib.finger(Wmcik),
                               (34.9811459194098 - 86.93467379996585j), 6)
        self.assertAlmostEqual(lib.finger(Wacek),
                               (183.86684834783233 + 179.66583663669644j), 6)

        gkmf = convert_to_ghf(rand_kmf2)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = gkmf.get_veff().round(4)
        mat_hcore = gkmf.get_hcore().round(4)
        gkmf.get_veff = lambda *x: mat_veff
        gkmf.get_hcore = lambda *x: mat_hcore

        rand_gcc = pbcc.KGCCSD(gkmf)
        eris = rand_gcc.ao2mo(rand_gcc.mo_coeff)
        eris.mo_energy = [
            eris.fock[k].diagonal() for k in range(rand_gcc.nkpts)
        ]
        gt1 = rand_gcc.spatial2spin(t1)
        gt2 = rand_gcc.spatial2spin(t2)
        rand_gcc.t1, rand_gcc.t2, rand_gcc.eris = gt1, gt2, eris

        ge, gpt1, gpt2, gWmcik, gWacek = kintermediates.get_t3p2_imds_slow(
            rand_gcc, gt1, gt2)
        self.assertAlmostEqual(lib.finger(ge), lib.finger(e), 8)
        self.assertAlmostEqual(lib.finger(gpt1[:, ::2, ::2]), lib.finger(pt1),
                               8)
        self.assertAlmostEqual(lib.finger(gpt2[:, :, :, ::2, 1::2, ::2, 1::2]),
                               lib.finger(pt2), 8)
        self.assertAlmostEqual(
            lib.finger(gWmcik[:, :, :, ::2, 1::2, ::2, 1::2]),
            lib.finger(Wmcik), 8)
        self.assertAlmostEqual(
            lib.finger(gWacek[:, :, :, ::2, 1::2, ::2, 1::2]),
            lib.finger(Wacek), 8)
Esempio n. 4
0
File: hf.py Progetto: pedersor/pyscf
 def to_ghf(self, mf):
     '''Convert the input mean-field object to a GHF/GKS object'''
     return addons.convert_to_ghf(mf)
Esempio n. 5
0
 def convert_from_(self, mf):
     '''Convert given mean-field object to RHF/ROHF'''
     addons.convert_to_ghf(mf, self)
     return self
Esempio n. 6
0
File: hf.py Progetto: sunqm/pyscf
 def to_ghf(self, mf):
     '''Convert the input mean-field object to a GHF/GKS object'''
     return addons.convert_to_ghf(mf)
Esempio n. 7
0
 def convert_from_(self, mf):
     '''Convert given mean-field object to RHF/ROHF'''
     addons.convert_to_ghf(mf, self)
     return self