Beispiel #1
0
 def rhf_energy(self):
     """
     Optimize RHF orbitals; return RHF energy, two-electron integrals,
     and coefficient matrix
     """
     rhf = RHF(self.mol, self.mints)
     return(rhf.E,rhf.g,rhf.C,rhf.orb_e)
Beispiel #2
0
    def __init__(self, mol, mints):

        rhf = RHF(mol, mints)
        self.E0 = rhf.computeEnergy()
        self.docc = rhf.docc
        self.nbf = len(rhf.S)
        self.e = rhf.e
        self.G = rhf.G
        self.C = rhf.C
Beispiel #3
0
        return np.einsum('pqrs, pP, qQ, rR, sS-> PQRS', G, C, C, C, C)

    def get_energy(self):  # MP2 energy correction
        e, E0, ndocc, ntot = self.e, self.E0, self.ndocc, self.ntot
        g_mo = self.transform_integrals(
            rhf.C, rhf.G)  # calls transform_integrals function
        E = 0.0
        for i in range(
                ndocc):  # i and j over occupied orbitals, a and b over virtual
            for j in range(ndocc):
                for a in range(ndocc, ntot):
                    for b in range(ndocc, ntot):
                        E += (g_mo[i, a, j, b] *
                              (2 * g_mo[i, a, j, b] - g_mo[i, b, j, a])) / (
                                  e[i] + e[j] - e[a] - e[b]
                              )  # MP2 energy expression

        print('The second order energy correction is {:20.14f}'.format(E))
        print('The total RMP2 energy is {:20.14f}'.format(E0 + E))
        return E


# testing
if __name__ == '__main__':

    rhf = RHF('../../3/bz3wp/Options.ini')
    rhf.get_energy()
    rmp2 = RMP2(rhf)
    rmp2.get_energy()
Beispiel #4
0
            for j in range(nocc):
                for a in range(nocc, ntot):
                    for b in range(nocc, ntot):
                        Ec += gmo[i, a, j, b]*(2*gmo[i, a, j, b] - gmo[i, b, j, a])/\
                             (e[i] + e[j] - e[a] - e[b])

        self.Ec = Ec
        self.E_mp2 = Ec + self.E_scf

        print('@MP2 correlation energy: {:15.10f}\n'.format(self.Ec))
        print('@Total MP2 energy: {:15.10f}\n'.format(self.E_mp2))

        return self.E_mp2


if __name__ == "__main__":
    import sys
    sys.path.insert(0, '../../3/jevandezande')
    from rhf import RHF
    rhf = RHF('../../3/jevandezande/Options.ini')
    rhf.energy()
    rmp2 = RMP2(rhf)
    e = rmp2.energy()

    dfrmp2 = RMP2(rhf, 'cc-pVDZ-RI')
    df_e = dfrmp2.energy()

    print("Energy Error: {:7.5e}".format(df_e - e))
    print("norm(UMP2.gmo - DFUMP2.gmo): {:7.5E}".format(
        np.linalg.norm(rmp2.gmo - dfrmp2.gmo)))