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)
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)
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)
def to_ghf(self, mf): '''Convert the input mean-field object to a GHF/GKS object''' return addons.convert_to_ghf(mf)
def convert_from_(self, mf): '''Convert given mean-field object to RHF/ROHF''' addons.convert_to_ghf(mf, self) return self