예제 #1
0
    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
예제 #2
0
    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