Beispiel #1
0
    def test_ucc_eomee_ccsd_matvec(self):
        numpy.random.seed(10)
        r1 = [numpy.random.random((nocca,nvira))-.9,
              numpy.random.random((noccb,nvirb))-.9]
        r2 = [numpy.random.random((nocca,nocca,nvira,nvira))-.9,
              numpy.random.random((nocca,noccb,nvira,nvirb))-.9,
              numpy.random.random((noccb,noccb,nvirb,nvirb))-.9]
        r2[0] = r2[0] - r2[0].transpose(1,0,2,3)
        r2[0] = r2[0] - r2[0].transpose(0,1,3,2)
        r2[2] = r2[2] - r2[2].transpose(1,0,2,3)
        r2[2] = r2[2] - r2[2].transpose(0,1,3,2)

        gcc1 = cc.addons.convert_to_gccsd(ucc1)
        gr1 = gcc1.spatial2spin(r1)
        gr2 = gcc1.spatial2spin(r2)
        gee1 = eom_gccsd.EOMEE(gcc1)
        gvec = eom_gccsd.amplitudes_to_vector_ee(gr1, gr2)
        vecref = eom_gccsd.eeccsd_matvec(gee1, gvec)

        vec = eom_uccsd.amplitudes_to_vector_ee(r1,r2)
        uee1 = eom_uccsd.EOMEESpinKeep(ucc1)
        vec1 = eom_uccsd.eomee_ccsd_matvec(uee1, vec)

        uv = eom_uccsd.amplitudes_to_vector_ee(r1, r2)
        gv = eom_gccsd.amplitudes_to_vector_ee(gr1, gr2)
        r1, r2 = uee1.vector_to_amplitudes(uee1.matvec(uv))
        gr1, gr2 = gee1.vector_to_amplitudes(gee1.matvec(gv))

        r1, r2 = uee1.vector_to_amplitudes(vec1)
        gr1, gr2 = gee1.vector_to_amplitudes(vecref)
        self.assertAlmostEqual(float(abs(gr1-gcc1.spatial2spin(r1)).max()), 0, 9)
        self.assertAlmostEqual(float(abs(gr2-gcc1.spatial2spin(r2)).max()), 0, 9)
        self.assertAlmostEqual(lib.finger(vec1), 49.499911123484523, 9)
Beispiel #2
0
    def test_eeccsd_high_cost(self):
        e, v = mycc.eeccsd(nroots=2)
        self.assertAlmostEqual(e[0], 0.28114507364237717, 6)
        self.assertAlmostEqual(e[1], 0.28114507364237717, 6)

        myeom = eom_gccsd.EOMEE(mycc)
        e, v = myeom.eeccsd(nroots=4)
        self.assertAlmostEqual(e[0], 0.28114507364237717, 6)
        self.assertAlmostEqual(e[1], 0.28114507364237717, 6)
        self.assertAlmostEqual(e[2], 0.28114507364237717, 6)
        self.assertAlmostEqual(e[3], 0.30819729785603989, 6)
Beispiel #3
0
 def test_eomee_matvec(self):
     numpy.random.seed(10)
     r1 = numpy.random.random((nocc, nvir)) - .9
     r2 = numpy.random.random((nocc, nocc, nvir, nvir)) - .9
     r2 = r2 + r2.transpose(1, 0, 3, 2)
     myeom = eom_gccsd.EOMEE(mycc1)
     vec = myeom.amplitudes_to_vector(r1, r2)
     imds = myeom.make_imds(eris1)
     vec1 = myeom.matvec(vec, imds)
     r1, r2 = myeom.vector_to_amplitudes(vec1)
     self.assertAlmostEqual(lib.finger(r1),
                            -6433.8165603568596 - 630.53684527676432j, 9)
     self.assertAlmostEqual(lib.finger(r2),
                            58591.683282553095 + 31543.960209750952j, 8)
Beispiel #4
0
    def test_ucc_eomsf_ccsd_matvec(self):
        numpy.random.seed(10)
        myeom = eom_uccsd.EOMEESpinFlip(ucc1)
        vec = numpy.random.random(myeom.vector_size()) - .9
        vec1 = eom_uccsd.eomsf_ccsd_matvec(myeom, vec)
        self.assertAlmostEqual(lib.finger(vec1), -1655.5564756993756, 8)

        r1, r2 = myeom.vector_to_amplitudes(vec)
        gr1 = eom_uccsd.spatial2spin_eomsf(r1, orbspin)
        gr2 = eom_uccsd.spatial2spin_eomsf(r2, orbspin)
        gvec = eom_gccsd.amplitudes_to_vector_ee(gr1, gr2)

        gcc1 = cc.addons.convert_to_gccsd(ucc1)
        gee1 = eom_gccsd.EOMEE(gcc1)
        vecref = eom_gccsd.eeccsd_matvec(gee1, gvec)
        gr1, gr2 = gee1.vector_to_amplitudes(vecref)
        v1, v2 = myeom.vector_to_amplitudes(vec1)
        self.assertAlmostEqual(float(abs(gr1-eom_uccsd.spatial2spin_eomsf(v1, orbspin)).max()), 0, 9)
        self.assertAlmostEqual(float(abs(gr2-eom_uccsd.spatial2spin_eomsf(v2, orbspin)).max()), 0, 9)
Beispiel #5
0
 def test_eomee_diag(self):
     vec = eom_gccsd.EOMEE(mycc1).get_diag()
     self.assertAlmostEqual(lib.finger(vec),
                            1853.7201843910152 + 4488.8163311564713j, 9)
Beispiel #6
0
 def eomee_method(self):
     from pyscf.cc import eom_gccsd
     return eom_gccsd.EOMEE(self)
Beispiel #7
0
 def eeccsd(self, nroots=1, koopmans=False, guess=None, eris=None):
     from pyscf.cc import eom_gccsd
     return eom_gccsd.EOMEE(self).kernel(nroots, koopmans, guess, eris)
Beispiel #8
0
# KGCCSD
mycc = cc.KGCCSD(kmf)
ekgcc, t1, t2 = mycc.kernel()

# EOM-EE-KGCCSD
myeomee = eom_kgccsd.EOMEE(mycc)
eee, vee = myeomee.kernel(nroots=nroots_test)

# Supercell
scell = super_cell(cell, nmp)

# PBC Gamma-point RHF based on supercell
mf = scf.RHF(scell, exxdiv=None).density_fit()
erhf = mf.kernel()

# Molecular GCCSD
mf = scf.addons.convert_to_ghf(mf)
mycc = GCCSD(mf)
egcc, t1, t2 = mycc.kernel()

# Molecular EOM-GCCSD
myeomee = mol_eom_gccsd.EOMEE(mycc)
eee_mol, vee_mol = myeomee.kernel(nroots=nroots_test*np.product(nmp))

print("PBC KRHF Energy:", ekrhf)
print("PBC RHF Energy :", erhf)
print("PBC KGCCSD Energy        :", ekgcc)
print("Mol GCCSD Energy per cell:", egcc / np.product(nmp))
print("PBC EOMEE roots:", eee)
print("Mol EOMEE roots:", eee_mol)