Compute adsorption energies from DFT total energies. Supports two data sources -- CatHub GraphQL API (api.catalysis-hub.org) for querying published DFT data, and the local SQLite database (co2r-suncat.db) for project-specific formation energies. Use when the user asks about binding strength, adsorption stability, or needs E_ads for a species on a surface.
Compute adsorption energies (E_ads) from DFT data -- either from the Catalysis-Hub.org GraphQL API or from the local co2r-suncat.db SQLite database.
Before querying adsorption energies, check if the requested species/surface data exists using the missing_data_detector skill approach:
co2r-suncat.db for the species on the target surface/facetThis is especially important for surface intermediates (OH*, COOH*, CHO*) that are only in the local DB, not in CatHub as gas→surface reactions.
Adsorption energy is the energy change when a gas-phase molecule binds to a surface:
E_ads = E(slab+adsorbate) - E(slab) - E(gas)
All energies in eV. Negative = favorable (exothermic), positive = unfavorable (endothermic).
Use the cathub skill for all GraphQL query mechanics. This section only covers which queries yield adsorption energies.
When a CatHub reaction has the form Xgas + star -> Xstar, the reactionEnergy field IS the adsorption energy. Use these filters:
reactants: "~{adsorbate}gas" -- gas-phase molecule (partial match)products: "~{adsorbate}star" -- adsorbed specieschemicalComposition and facet to select the surfaceNote: Including +star in the reactants filter (e.g., "COgas+star") is accepted by the API but unnecessary -- the API matches adsorption reactions without it.
| Adsorption | reactants filter | products filter | Notes |
|---|---|---|---|
| CO on surface | "~COgas" | "~COstar" | Works well — COgas is unambiguous |
| H on surface | "Hgas" | "Hstar" | Must use exact match (no ~) |
| H2O on surface | "~H2Ogas" | "~H2Ostar" | Works well |
| Species | Metal | Facet | E_ads (eV) | pubId |
|---|---|---|---|---|
| CO | Cu | 111 | -0.36 | CatappTrends2008 |
| CO | Cu | 211 | -0.657 | JiangTrends2009 |
| CO | Ag | 111 | +0.05 | CatappTrends2008 |
| CO | Au | 111 | +0.10 | CatappTrends2008 |
| H | Pt | 111 | -2.72 | FerrinHydrogen2012 |
| H | Ni | 100 | -2.81 | FerrinHydrogen2012 |
Partial match and short species names:
~ prefix). ~Hgas matches HCOOHgas, SiHgas, CHgas — giving false positives.~ only for longer, unambiguous names like COgas, H2Ogas.~COOHgas is unsafe — it matches HCOOHgas (HCOOH decomposition, not COOH adsorption).OH*, COOH*, and other surface intermediates are NOT gas-phase species:
Method A only works for species that exist as gas-phase molecules in CatHub (CO, H, H2O, O2, etc.). Intermediates like OH* and COOH* are formed on surfaces through reactions, not adsorbed from gas phase. CatHub has no OHgas → OHstar or COOHgas → COOHstar entries. To get their formation energies, use the local database (Data Source 2) or query the surface reactions that produce them (e.g., H2Ogas → OHstar + Hstar).
For reactions that are not simple molecular adsorption (e.g., dissociative adsorption), request the reactionSystems field with the nested systems { energy } to get individual DFT total energies. Then compute:
{ reactions(first: 1, chemicalComposition: "Cu", facet: "111", reactants: "~COgas", products: "~COstar") {
edges { node { reactionSystems { name energyCorrection systems { energy Formula } } } }
}}
E_ads = E(COstar) - E(star) - E(COgas)
= -250.06 - (-234.52) - (-14.69) = -0.85 eV
Note: The energy field is on the nested systems object (type System), NOT on reactionSystems directly (type ReactionSystem). Many CatHub entries return null for system-level energies -- in that case, fall back to Method A where reactionEnergy is already the computed E_ads.
The local SQLite database (data/co2r-suncat.db) contains curated DFT data for CO2 reduction on transition metals. It is the preferred source for CO2R intermediates (COOH*, CHO*, COH*, OH*, etc.) that are not available as gas-phase species in CatHub.
| Category | Available values |
|---|---|
| Metals | Cu, Ag, Au, Pt, Pd, Ni, Rh, Ir, Ni5Ga3, Ni3Ga, Cu3Zn, Cu3Ag, CuZn, CuAg, Cu3Al, CuAl, Ag3Cu |
| Facets | 100, 111, 211, 310, 511, 110, 221, 711, 621, 521, 653 |
| References | PengRole2020, Ara, PasumarthiDoubleLayer2023, PasumarthiFacetDependence2023, PengTrends2022 |
| Entries | 1658 adsorbates, 23 gas-phase, 135 slabs |
Adsorbate species (42 total): C, CCH, CCH2, CCH3, CCHO, CCO, CCO2chem, CCO2phys, CCOH, CH, CH2, CH2CH3, CH2CHOH, CH2CO, CH2COH, CH3, CH3CO, CH3COH, CHCH, CHCH2, CHCH3, CHCHOH, CHCO, CHCOH, CHO, CHOH, CO, CO2phys, COH, COOH, H, H2O, HCOO, OCCO, OCCOH, OCH2CH, OCH2CH2, OCH2CH3, OCHCH, OCHCH2, OCHCH3, OCHO, OH
The FormationEnergy table uses foreign key IDs (status_id, species_id, surface_id, facet_id, reference_id). Always use the FormationEnergyView which joins all lookup tables and provides human-readable columns:
SELECT species_name, formation_energy, active_site, surface_name, facet, reference
FROM FormationEnergyView
WHERE status='ads' AND species_name='CO' AND surface_name='Cu' AND facet='100' AND efield=0.0;
Available columns in FormationEnergyView: formation_energy_id, formation_energy, active_site, cell_size, coverage, efield, reference, surface_name, facet, species_name, status.
Do NOT query FormationEnergy directly with status='ads' — the raw table has status_id (integer), not status (text), and the query will error.
The database often has multiple entries for the same species + surface + facet because:
active_site): atop, bridge, fcc, 4foldhollow, bidentate, etc. Different sites give different E_ads.Always check which active_site and reference you need. The most stable (most negative) E_ads is typically the preferred binding site.
Three gas-phase reference molecules are set to formation_energy = 0.0 eV:
| Reference molecule | Provides reference for | formation_energy |
|---|---|---|
| CO(g) | Carbon + Oxygen | 0.0 eV |
| H2(g) | Hydrogen | 0.0 eV |
| H2O(g) | Oxygen + Hydrogen | 0.0 eV |
The clean slab is also set to 0.0 eV as the surface reference.
All other species have formation energies computed relative to this reference set.
| Species | E_form (eV) | Decomposition into references |
|---|---|---|
| CO | 0.000 | Reference molecule |
| H2 | 0.000 | Reference molecule |
| H2O | 0.000 | Reference molecule |
| CO2 | -0.284 | CO + H2O - H2 |
| HCOOH | -0.445 | CO + H2O |
| CH3OH | -1.526 | CO + 2H2 |
| CH4 | -2.805 | CO + 3H2 - H2O |
| C2H4 | -3.152 | 2CO + 2H2 - 2H2O |
| C2H6 | -4.774 | 2CO + 4H2 - 2H2O |
| C3H8 | -6.822 | 3CO + 5H2 - 3H2O |
For adsorbates (status='ads'): The formation_energy column IS the adsorption energy. Since both the gas-phase reference and the slab are 0.0 eV, the stored value is directly:
-- CO* on Cu(100), atop site, from Ara reference:
formation_energy(CO*) = E_DFT(CO + Cu_slab) - E_DFT(Cu_slab) - E_DFT(CO_gas) = -0.659 eV = E_ads(CO)
This holds for ALL adsorbates. No further subtraction needed.
For gas-phase species (status='gas'): Formation energy is NOT an adsorption energy. It is the energy relative to the reference set {CO=0, H2=0, H2O=0}, computed by decomposing into reference molecules:
CO2 = CO + H2O - H2 (atom balance: C+2O = C+O + 2H+O - 2H ✓)
E_form(CO2) = E_DFT(CO2) - E_DFT(CO) - E_DFT(H2O) + E_DFT(H2) = -0.284 eV
This is the reverse water-gas shift reaction energy (CO + H2O → CO2 + H2).
For transition states (status='ts'): Formation energy = sum of initial-state formation energies + activation energy (Ea):
CO2-H-ele: IS = CO2_gas + H_gas + 2*slab + ele_gas
E_form(TS) = (-0.284) + 0.0 + 0.0 + 0.0 + 0.06 (Ea) = -0.224 eV
| Metal | E_ads (eV) | Binding strength |
|---|---|---|
| Pd | -1.743 | Strongest |
| Rh | -1.703 | |
| Ni | -1.669 | |
| Ni5Ga3 | -1.513 | |
| Pt | -1.460 | |
| Ir | -1.446 | |
| Cu | -0.623 | |
| Ag | -0.040 | |
| Au | +0.194 | Weakest (endothermic) |
Follows the expected d-band center trend.
| Facet | E_ads (eV) | Surface type |
|---|---|---|
| 621 | -0.840 | High-index step/kink |
| 310 | -0.817 | Step |
| 521 | -0.804 | High-index step/kink |
| 653 | -0.795 | High-index step/kink |
| 110 | -0.777 | Open facet |
| 211 | -0.680 | Step |
| 711 | -0.675 | Step |
| 511 | -0.664 | Step |
| 100 | -0.596 | Terrace |
| 111 | -0.623 | Close-packed terrace |
Under-coordinated step/kink sites bind CO strongest; close-packed terraces bind weakest.
| Species | E_ads (eV) | Site | Notes |
|---|---|---|---|
| HCOO | -1.341 | bidentate | Strongest-binding intermediate |
| CO | -0.659 | atop | Key C1 intermediate |
| OCHO | -0.481 | bidentate | Formate pathway |
| COOH | -0.360 | bidentate-up | CO2R potential-determining step |
| H2O | -0.261 | atop | Weak physisorption |
| OH | -0.040 | fcc | Very weak |
| CHO | -0.040 | atop | Formyl intermediate |
| H | +0.065 | bridge | Endothermic — Cu suppresses HER |
| COH | +0.323 | 4foldhollow | Unstable on Cu |
| Metal | CO (eV) | H (eV) | COOH (eV) | OH (eV) |
|---|---|---|---|---|
| Cu | -0.680 | -0.061 | -0.487 | -0.298 |
| Au | -0.286 | +0.238 | -- | -- |
| Ag | -0.075 | +0.350 | -- | -- |
Cu binds all intermediates strongest among coinage metals. H is endothermic on Ag and Au (HER suppressed). COOH/OH data only available for Cu.
The database contains E-field dependent adsorption energies from PasumarthiFacetDependence2023:
SELECT species_name, efield, formation_energy, active_site, facet
FROM FormationEnergyView
WHERE status='ads' AND species_name='CO' AND surface_name='Cu' AND facet='211'
ORDER BY efield;
Example — CO on Cu(211) ontop-step site:
| E-field (V/A) | E_ads (eV) |
|---|---|
| -0.550 | -0.702 |
| -0.158 | -0.690 |
| 0.000 | -0.680 (from PengRole2020, fcc site) |
| +0.100 | -0.700 |
| +0.233 | -0.712 |
Positive field slightly strengthens CO binding (Stark effect).
Both compute the same formula, just named differently:
| Source | Name | Formula |
|---|---|---|
| CatHub | reaction energy (for X_gas + * → X*) | E(X*+slab) - E(slab) - E(X_gas) |
| Local DB | formation energy (for adsorbate X*) | E(X*+slab) - E(slab) - E(X_gas) |
| Textbook | adsorption energy | E(X*+slab) - E(slab) - E(X_gas) |
Values may differ between CatHub and the local DB if they come from different DFT calculations.
FormationEnergyView, not FormationEnergy. The raw table uses integer foreign keys (status_id, species_id, etc.). Querying WHERE status='ads' on the raw table will error. The view provides human-readable columns.active_site) and DFT references (~0.06 eV spread for CO on Cu(100) atop across references). Always filter or aggregate appropriately.Xgas → Xstar. Surface intermediates (OH*, COOH*, CHO*, COH*) do not exist as gas-phase species in CatHub — use the local database instead.~) is unsafe for short names. ~Hgas matches HCOOHgas, SiHgas, CHgas. ~COOHgas matches HCOOHgas. Use exact match for short species.reactionSystems { systems { energy } }) often returns null