-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
*O referencing issues in the tutorial #2
Comments
For GemNet-OC, the summation is over all atoms in the structure (code), but the contribution for atoms tagged as surface or adsorbate is computed differently compared to subsurface atoms, and that could be causing the difference here. Alternatively, try out EquiformerV2 where you don't have to worry about setting tags! The 31M model should be easy to fit in memory. |
That is very close to the result from the eSCN checkpoint in the tutorial (-4.88 eV). There are a few places where 0.5 eV discrepancy could show up I think, mostly related to the O2 reference energy in the paper referenced at the top. In the tutorial all the reaction energy references are from experimental data. |
Something is weird, If I use the Equiformer checkpoint, I get an energy similar to what Abishek reports above, but 0.76 eV that is not close to the OCP demo energy. I thought those would be the same? Edit: My energy is not the same as Abishek's because I used the exp lattice constant, not the coordinates from the json file. I get the same number as him when I use those. |
Two things that seem to matter:
Output:
Script:
|
Yeah, it might just be this causing the discrepancy. I was able to reproduce the demo results to get ~1.42 eV, yielding a final from ocdata.core import Bulk, Slab, Adsorbate, AdsorbateSlabConfig
bulk = Bulk(bulk_src_id_from_db="mp-126")
slabs = Slab.from_bulk_get_specific_millers(bulk=bulk, specific_millers=(1,1,1))
adsorbate = Adsorbate(adsorbate_smiles_from_db="*O")
heuristic_adslabs = AdsorbateSlabConfig(slabs[0], adsorbate, mode="heuristic")
atoms = heuristic_adslabs.atoms_list[0]
atoms.set_calculator(calc)
opt = BFGS(atoms)
opt.run(fmax=0.05, steps=100)
re2 = atoms.get_potential_energy()
nO = 0
for atom in atoms:
if atom.symbol == 'O':
nO += 1
re2 += re1 + re3
print(re2 / nO)
I'm not a 100% I set everything up properly above — would be good to double check! |
The demo shows a large offset in the energy of *O from John's paper to the OCP predictions:
https://open-catalyst-project.github.io/tutorial/OCP-introduction.html
John explained this during the tutorial as PBE-RPBE disagreement, but this seems very large for such a simple adsorbate.
Double checking the energies with the OCP demo shows O Pt(111) with an energy of about 1.42 eV, compared to ~0.59 eV from the calculator in the tutorial. Using 1.42 eV (with the formation reaction energies for H2O/O) yields final (O+->*) energy of -4.46 eV, which is pretty close to John's number (-4.26 eV):
https://open-catalyst.metademolab.com/results/01b2250b-f9c4-43d8-b9b7-f987988db7e8
I'm not exactly sure what happened here, but I would guess the missing tags have something to do this with. My understanding is that our models generally sum over just the surface atoms and adsorbate, so the energy in the tutorial might correspond to summing over the entire slab.
A script to automatically set tags to reasonable values might be helpful here and elsewhere?
The text was updated successfully, but these errors were encountered: