5.2. Recovering Correlation Energy: B atom#

At the Hartree Fock level of theory, each electron experiences an average potential field of all the other electrons. In essence, it is a “mean field” approach that neglects individual electron-electron interactions or “electron correlation”. Thus, we define the difference between the self-consistent field energy and the exact energy as the correlation energy. Two fundamentally different approaches to account for electron correlation effects are available by selecting a Correlation method: Moller Plesset (MP) Perturbation theory and Coupled Cluster (CC) theory.

Exercise 1

Determine the percentage of the correlation energy recovered for HF, MP2, MP5, CCSD, CCSD(T).

Compare the performances of the different methods. In particular, you will see that some of the methods seem to overestimate the correlation recovered. How is it possible? (Hint: Think both about the theoretical aspects of the methods and how we are computing the recovered correlation energy).

CCSD energy/mp2 energy

You may recover the CCSD energy from the CCSD(T) calculation, but you will have to look at the output file or by calculating both. In any case, the calculations for a single atom are quick.

The same is true for the MP2 energy which can be extracted from the MP5 calculation. MP5 will require the use of the following options: psi4.set_options({"reference" :"rohf", "qc_module":"detci"}) as Psi4 does not have MP5 implemented using a RHF reference.

import psi4
import py3Dmol
import pandas as pd
import matplotlib.pyplot as plt

import sys
sys.path.append("..")
from helpers import *
psi4.set_num_threads(2)
psi4.set_memory('2 GB')
  Threads set to 2 by Python driver.

  Memory set to   1.863 GiB by Python driver.
2000000000
psi4.core.clean_options()

# define a single boron atom and set the correct multiplicity
boron_geometry = psi4.geometry("""""")

psi4.set_options({'reference' : "UHF"})

# Perform single-point calculation with requested method/basis 
B_energy_hf  = 0
drawXYZ(boron_geometry)

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
jupyter labextension install jupyterlab_3dmol

#Experimental energy of Boron
B_exact_e = -24.608


correlation = None # Calculate the total amount of correlation energy that should be recovered using the B_exact_e

print(F"\n Electron correlation: {correlation} Hartrees")
# calculate energy for other methods
psi4.set_options({'reference' : "UHF"})
#MP2
e_mp2 = None
#MP3
e_mp3 = None
#CCSD
e_ccsd = None
#CCSD(T)
e_ccsd_t = None
#MP5
psi4.set_options({"reference" :"rohf", 
                   "qc_module":"detci"})
e_mp5 = None
#CISD
e_cisd = None
#FCI
e_fci = None
correlations = {}
correlations['hf']= 0
correlations['mp2']    = None # calculate the % of correlation energy recovered here
correlations['mp3']    = None # calculate the % of correlation energy recovered here
correlations['mp5']    = None # calculate the % of correlation energy recovered here
correlations['ccsd']   = None # calculate the % of correlation energy recovered here
correlations['ccsd(t)'] = None # calculate the % of correlation energy recovered here
correlations['cisd'] = None # calculate the % of correlation energy recovered here
correlations['fci'] = None # calculate the % of correlation energy recovered here
pd.DataFrame.from_dict(correlations,orient='index',columns=['% correlation recovered'])