Per S. Schmidt and Kristian S. Thygesen
The Journal of Physical Chemistry C Article ASAP
This database contains the adsorption energies of 200 reactions involving 8 different adsorbates on 25 different transition metal surfaces at full coverage as well as the surface energies for the same surfaces. Various DFT functionals have been employed and compared to the results from many-body perturbation theory within the random phase approximation.
The adsorption reactions are
and the surfaces include 3d transition metals from Scandium (Sc) to Zink (Zn), 4d from Yttrium (Y) to Cadmium (Cd) excluding Technetium (Tc) and 5d from Hafnium (Hf) to Gold (Au).
Per S. Schmidt and Kristian S. Thygesen
The Journal of Physical Chemistry C Article ASAP
The data can be obtained from the files:
Download raw data adsorption.db
and surfaces.db
And browsed online:
The adsorption energy is defined with respect to the adsorbate in its gas
phase:
And the surface energy as:
One example reaction that the adsorption energy is calculated for is:
In the database the adsorbate is then
key |
description |
unit |
---|---|---|
|
Surface Material |
|
|
Adsorbate |
|
|
Reference molecule 1 |
|
|
Reference molecule 2 |
|
|
Adsorption energy with LDA |
eV |
|
Adsorption energy with PBE |
eV |
|
Adsorption energy with RPBE |
eV |
|
Adsorption energy with BEEF-vdW |
eV |
|
Adsorption energy with vdW-DF2 |
eV |
|
Adsorption energy with mBEEF |
eV |
|
Adsorption energy with mBEEF-vdW |
eV |
|
Adsorption energy with EXX |
eV |
|
RPA correlation adsorption energy extrapolated |
eV |
In the following script it is shown how to extract and plot adsorption and surface energies from the database files (adsorption.db, surfaces.db):
# creates: database_example.svg
import numpy as np
import matplotlib.pyplot as plt
import ase.db
adsorbate = 'NO'
slabs = ['Sc', 'Ti', 'Cu', 'Pd']
db = ase.db.connect('adsorption.db')
db_surf = ase.db.connect('surfaces.db')
labels = ['LDA', 'PBE', 'RPBE', 'BEEF-vdW', 'RPA']
markers = ['o', 's', 'v', 'D', 'x']
markersize = [10, 10, 10, 10, 12]
mews = [1, 1, 1, 1, 4]
cols = ['r', 'k', 'b', 'g']
plt.figure()
for ii, slab in enumerate(slabs):
rows = db.select(adsorbate=adsorbate)
adss = []
for row in rows:
if row.symbols[0] == slab:
adss.append(row.LDA_adsorp)
adss.append(row.PBE_adsorp)
adss.append(row.RPBE_adsorp)
adss.append(row.BEEFvdW_adsorp)
adss.append(row.RPA_EXX_adsorp)
rows_surf = db_surf.select(surf_mat=slab)
surfs = []
for row in rows_surf:
surfs.append(row.LDA_surf)
surfs.append(row.PBE_surf)
surfs.append(row.RPBE_surf)
surfs.append(row.BEEFvdW_surf)
surfs.append(row.RPA_EXX_surf)
for i in range(len(adss)):
if ii == 0:
plt.plot(surfs[i], adss[i], color='darkgray',
marker=markers[i], markersize=markersize[i],
mew=mews[i], label=labels[i])
plt.plot(surfs[i], adss[i], color=cols[ii],
marker=markers[i], markersize=markersize[i], mew=mews[i])
p = np.polyfit(surfs[:-1],
adss[:-1],
deg=1)
plt.plot([surfs[2], surfs[0]],
p[0] * np.array([surfs[2], surfs[0]]) + p[1],
color=cols[ii])
plt.annotate(slabs[ii], (surfs[-1] + 0.02, adss[-1]), color=cols[ii],
size=14)
plt.legend(loc='lower left', numpoints=1, prop={'size': 14})
plt.title('NO adsorption', size=18)
plt.ylim([-3.5, 0])
plt.xlim([0.3, 1.1])
plt.xlabel(r'$E_{\sigma}$ (eV)', size=22)
plt.ylabel(r'$E_{\mathrm{ads}}$ (eV)', size=22)
plt.xticks(size=18)
plt.yticks(size=18)
plt.tight_layout()
plt.savefig('database_example.svg', dpi=500)
Which should generate the following figure showing the adsorption versus surface energy for NO adsorption on four different transition metals:
The surfaces were modeled using three layers with the bottom two layers fixed
at the fcc PBE lattice constants from materialsproject.org and the position
of the top layer relaxed. The position of the adsorbate was relaxed keeping
all three surface layers fixed at the position found previously. All
relaxations were carried out with the BFGS algorithm using the PBE
approximation to the xc-functional with a force convergence criteria of 0.05
eV/Å. The electron temperature was 0.01 eV and spin-polarized calculations
were performed for calculations involving Fe, Ni or Co. 5 Å of vacuum was
added to either side of the adsorbate to avoid artificial interactions
between neighboring layers following convergence tests at both the DFT and
RPA level. The adsorption energies are relative to the molecule in its gas
phase and the calculations for the isolated molecules were carried out in a
The RPA calculations were carefully converged with respect to plane wave
basis using the following extrapolation scheme: In the following figure, the
black dots are from a calculation with