How is the adsorption energy derived with OCPcalculator


First, I would like to thank you for the effective and fast responses on this discussion panel.

Next, I have a question regarding the use of OCPcalculator with an OC20 pre-trained model.

For the simple system (from the github fairchem tutorial) Pt + O, the adsorption energy that can be referenced to the corresponding literature, is obtained by adding the energies of two different reactions (re1 and re3). The tutorial mentions that OPC provides the reference energy: x CO + (x + y/2 - z) H2 + (z-x) H2O + w/2 N2 + * → CxHyOzNw*.

In the NRR tutorial however, it seems that no additional reaction energies are being combined to be able to relate the .get_potential_energy() output to some other DFT literature data.

I can’t seem to find information on how OCPCalculator derives the adsorption energy.

Therefore my questions are :

  1. Whether the correct adsorption energy is given with .get_potential_energy() or if this gives me the reference energy: x CO + (x + y/2 - z) H2 + (z-x) H2O + w/2 N2 + * → CxHyOzNw*, which would require additional calculations to obtain the adsorption energy between adsorbate and adsorbent.

  2. If I want to compare the OCP results to a DFT paper for another system. Let’s say Fe(110) and NHx (x:1-3), then how should I process the output of OCPCalculator to obtain the correct adsorption energy?

I would like to thank you for your response in advance.


Hi -

  1. All our OC20 pre-trained models will provide you the adsorption energy, that is:
  E_ads = E_adsorbate+slab - E_slab - E_ads_reference

The discussion on reference energy is really how we go about referencing the gas phase adsorbate, which we do so by: x CO + (x + y/2 - z) H2 + (z-x) H2O + w/2 N2 + * → CxHyOzNw*. This is often a minor point and the adsorption energies can be used directly, like in the case of the NRR tutorial.

  1. The output of the OCPCalculator is an ML predicted adsorption energy at RPBE level theory. It’s important to be cautious when comparing to DFT literature values that may be another level of theory. But assuming that isn’t a concern, you should check how the literature values referenced their adsorption energy. If their gas phase reference is similar to ours then you can use that directly, if they referenced it directly to NHx then you could do something like:
E_ads_paper = E_ads_OCP + E_ads_reference_OCP - E_ads_reference_paper

Hope this helps!

Okay, thank you for the fast response and the clarification.

Now another literature source I want to try and reproduce does include RPBE level theory. And their zero energy corresponds to the gas-phase of the atoms. You can see this in this paper: (doi:10.1016/j.susc.2005.04.028).

Would this mean that E_ads_reference_paper should be 0?

Resulting in,

E_ads_paper = E_ads_OCP + E_ads_reference_OCP - 0

Finding the correct way of comparing ML relaxations to this paper would be very useful because I would like to investigate the accuracy of the models with a couple of specific examples.

Thank you for all the great support so far.

No I don’t think 0 is the correct number here.

The reference zero corresponds to gas-phase molecules, radicals, and NO + H for NOH/HNO and a clean relaxed Pt(1 1 1) slab at infinite separation.

This line from the paper suggests that their referencing scheme is similar to what we are doing. However the gas phase reference is computed slightly different:

  1. E_ads_reference_paper should just be a DFT calculation of the gas phase adsorbate or radical in vacuum - E(CO), E(N2), etc.
  2. With the exception of NOH/HNO, which is E_ads_reference_NOH/HNO = E(NO) + E(H)

As an example: CO adsorption on Pt:

OCP:   E_ads_CO+Pt = E_dft_CO+Pt - E_dft_Pt - E_dft(C) - E_dft(O)
Paper: E_ads_CO+Pt = E_dft_CO+Pt - E_dft_Pt - E_dft(CO)

So to correct OCP to give you the paper result:

E_ads_CO+Pt(paper) = E_ads_CO+Pt(OCP) + E_dft(C) + E_dft(O) - E_dft(CO)

Where energy of C/O for OCP come from the following table from the OC20 paper SI:

E(CO) would need to come from a calculation on your end (or if the paper has this already somewhere)

This was my read at the paper at least, no guarantees that is exactly what they were doing but if so this should do it. Hope this helps!

Thank you for your response, I have been trying alot of different ways of comparing these values for the past week, however none seem to be working right.
I tried using:

E_ads_paper = E_ads_OCP + E_ads_reference_OCP - E_ads_reference_paper
But the differences would be more than 10 eV for some calculations. I even tried playing around by adding or substracting the formation enthalpies, just as they do in the tutorial: Simple simulations using the OCP ASE calculator

But even then the data is still to different to properly be compared to eachother.

The difference between the model and the literature is still much larger than expected. As can bee seen below.

It is difficult though, because the paper does not give the total DFT energies of the molecules. But only the atomization energies.

I started looking around at sdifferent Atomic an Molecular adsoprtion studies (RPBE), but they all seem to use the exact same style of referencing their energies. In all papers, they calculate the adsoprtion energy with:

E_(ads) = E_(substrate + adsorbate) − E_(substrate) − E_(gas-phase adsorbate)

But when I setup the systems identical to how they describe them, but than with the one of the pretrained models, I get quite some big deviations from the adsorption energies from the papers.

So now my question is:

Would that be because I am still referencing the energies in the wrong way, or are these just deviation resulting from the acuracy of the models?

I would like to thank you in advance if you are taking the time to help me again. I wanted to investigate the accuracy of pretrained models by comparing their calculations to various atomic and molecular adsoprtion studies, but it turned out to be a bit more challenging than I expected.