nmo = rhf.mo_energy.size fock0 = numpy.diag(rhf.mo_energy) nocc = mol.nelectron // 2 nvir = nmo - nocc eri0 = pyscf.ao2mo.restore(1, pyscf.ao2mo.full(rhf._eri, rhf.mo_coeff), nmo) eris = lambda:None eris.oooo = eri0[:nocc,:nocc,:nocc,:nocc].copy() eris.ooov = eri0[:nocc,:nocc,:nocc,nocc:].copy() eris.ovoo = eri0[:nocc,nocc:,:nocc,:nocc].copy() eris.oovv = eri0[:nocc,:nocc,nocc:,nocc:].copy() eris.ovov = eri0[:nocc,nocc:,:nocc,nocc:].copy() eris.ovvv = eri0[:nocc,nocc:,nocc:,nocc:].copy() eris.vvvv = eri0[nocc:,nocc:,nocc:,nocc:].copy() eris.fock = fock0 mcc.ao2mo = lambda *args: eris conv, l1, l2 = kernel(mcc, eris, t1, t2, tol=1e-8) print(numpy.linalg.norm(l1)-0.0132626841292) print(numpy.linalg.norm(l2)-0.212575609057) import ccsd_rdm dm1 = ccsd_rdm.make_rdm1(mcc, t1, t2, l1, l2) dm2 = ccsd_rdm.make_rdm2(mcc, t1, t2, l1, l2) h1 = reduce(numpy.dot, (rhf.mo_coeff.T, rhf.get_hcore(), rhf.mo_coeff)) eri = pyscf.ao2mo.full(rhf._eri, rhf.mo_coeff) eri = pyscf.ao2mo.restore(1, eri, nmo).reshape((nmo,)*4) e1 = numpy.einsum('pq,pq', h1, dm1) e2 = numpy.einsum('pqrs,pqrs', eri, dm2) * .5 print e1+e2+mol.energy_nuc() - rhf.e_tot - ecc
fock0 = numpy.diag(rhf.mo_energy) nocc = mol.nelectron // 2 nvir = nmo - nocc eri0 = pyscf.ao2mo.restore(1, pyscf.ao2mo.full(rhf._eri, rhf.mo_coeff), nmo) eris = lambda: None eris.oooo = eri0[:nocc, :nocc, :nocc, :nocc].copy() eris.ooov = eri0[:nocc, :nocc, :nocc, nocc:].copy() eris.ovoo = eri0[:nocc, nocc:, :nocc, :nocc].copy() eris.oovv = eri0[:nocc, :nocc, nocc:, nocc:].copy() eris.ovov = eri0[:nocc, nocc:, :nocc, nocc:].copy() eris.ovvv = eri0[:nocc, nocc:, nocc:, nocc:].copy() eris.vvvv = eri0[nocc:, nocc:, nocc:, nocc:].copy() eris.fock = fock0 mcc.ao2mo = lambda *args: eris conv, l1, l2 = kernel(mcc, eris, t1, t2, tol=1e-8) print(numpy.linalg.norm(l1) - 0.0132626841292) print(numpy.linalg.norm(l2) - 0.212575609057) import ccsd_rdm dm1 = ccsd_rdm.make_rdm1(mcc, t1, t2, l1, l2) dm2 = ccsd_rdm.make_rdm2(mcc, t1, t2, l1, l2) h1 = reduce(numpy.dot, (rhf.mo_coeff.T, rhf.get_hcore(), rhf.mo_coeff)) eri = pyscf.ao2mo.full(rhf._eri, rhf.mo_coeff) eri = pyscf.ao2mo.restore(1, eri, nmo).reshape((nmo, ) * 4) e1 = numpy.einsum('pq,pq', h1, dm1) e2 = numpy.einsum('pqrs,pqrs', eri, dm2) * .5 print e1 + e2 + mol.energy_nuc() - rhf.e_tot - ecc