MACE Ni Benchmark — Kreitz 2021 Reproduction

SkillDev tools

Use when the user asks to reproduce the Kreitz 2021 Ni surface benchmark, run the MACE Ni benchmark, or compare a machine-learning potential (MACE, CHGNet, M3GNet) against DFT-D3 surface-science references. Invokes the "UMA Catalysis Tutorial" preset (template key `uma_catalysis_screening`).

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the MACE Ni Benchmark — Kreitz 2021 Reproduction skill

What this skill tells your AI

The instructions your AI receives, as published by hello-qm/catgo-lrg in server/catgo/workflow/skills/analysis/mace_ni_benchmark/SKILL.md and read by ahel’s review.

Reproduces six Ni surface DFT-D3 target quantities end-to-end with MACE-MP-0, on a single Ni bulk source, in one workflow.

When to invoke

Trigger phrases (any of):

  • "reproduce Kreitz 2021 Ni benchmark"
  • "run the MACE Ni benchmark"
  • "benchmark MACE against DFT-D3 for Ni"
  • "validate MLP on Ni surfaces"

Also invoke when the user asks to compute multiple of the six quantities below for Ni at once — one preset is cheaper than six separate workflows.

The six target quantities

#QuantitySource nodeResult key
1γ(111), γ(100), γ(110), γ(211)surface_energyper_facet[hkl].gamma_J_per_m2
2Wulff facet area fractionswulff_constructionarea_fractions[hkl]
3H adsorption energy on Ni(111) FCC hollow (ZPE-corrected)adsorption_energyE_ads_ZPE_eV
4Coverage slope ∂E_ads/∂θ (1,2,4,8,16 H on 4×4 Ni(111))coverage_analysisfit.slope
5CO* ↔ C* + O* NEB barrierts_search (mlp_neb)activation_barrier_kcal_mol
6TS imaginary-mode frequencyfreq (mlp_vibrations)dominant_imag_freq_cm (with is_valid_ts flag)

All six are viewable side-by-side in the project dashboard's "Benchmark" tab once any workflow derived from uma_catalysis_screening (or with a matching name) is present in the project.

How to invoke

Option A — UI (recommended)

In the Workflow Editor, click New from preset → Surface Catalysis → UMA Catalysis Tutorial. A 26-node DAG loads. The template is defined in src/lib/workflow/graph-model.ts::uma_catalysis_screening.

After it loads, the user must load structures into 4 input nodes:

  1. Ni bulk (FCC) — fcc Ni, a ≈ 3.524 Å (Materials Project mp-23)
  2. H₂ molecule — two H atoms ~0.74 Å apart in a 20 Å box
  3. CO* on Ni(111) — NEB reactant (CO adsorbed on a 3×3 Ni(111) slab)
  4. C* + O* on Ni(111) — NEB product (C and O separately adsorbed)

Option B — Manual DAG build (not recommended)

Rebuilding the 26-node DAG by hand costs ~2x the effort and always drifts from the defaults tested against MACE-MP-0 medium. Only do this if the user needs a custom variant (e.g. different slab supercell, or a non-cubic/non-Ni system).

Expected deviations (MACE-MP-0 vs RPBE-D3)

QuantityTypical |CatGo − Kreitz|Notes
γ(hkl)~0.1 J/m²γ(111) tends to be ~0.05 J/m² higher
Wulff fractions< 0.05Dominant (111) facet rank is preserved
E_ads(H, ZPE)~0.1 eVMACE-MP-0 slightly overbinds H
Coverage slope~0.03 eV/MLSign (repulsive) should match
NEB barrier~0.2 eVLargest single deviation
ν_imag~50 cm⁻¹Sign must be negative (imaginary)

If deviations are much larger than these ranges, check:

  • Did the bulk opt converge? (fmax < 0.05 eV/Å with relax_cell: true)
  • Did NEB converge to the expected CI image? (neb_converged: true)
  • Is is_valid_ts: true on the freq step at the TS? (Exactly one imaginary mode above the 20 cm⁻¹ trivial-mode filter.)

Defaults worth preserving

  • software: mlp, model: MACE, device: auto → uses MACE-MP-0 medium via the default mace_mp("medium", default_dtype="float64") path. Checkpoint auto-downloads to ~/.cache/mace/ on first run (~200 MB, ~2 min).
  • Vibrations freeze the Ni slab and vibrate the adsorbate only (freeze_mode: layers, freeze_layers: 2, freeze_invert: false) → ~20× cheaper freqs without losing ZPE accuracy. Note: freeze_invert inverts the set of atoms ASE displaces, so false here means the frozen set (bottom 2 Ni layers) is actually frozen and everything else vibrates — the standard catalysis setup. true would vibrate only the bottom 2 Ni layers (wrong for ZPE).
  • NEB: 8 images, climb: true, FIRE optimizer, fmax: 0.05 eV/Å.
  • Coverage sweep: 1,2,4,8,16 H on 4×4 hollow-site filling.

Reproducibility

Every MLP-dispatched step writes metadata.json (captured via the C1 footer in server/workflow/engines/mlp.py) into result_json.metadata:

{
  "mace_torch_version": "0.3.15",
  "torch_version": "2.10.0",
  "mace_model": "mace-mp-0-medium",
  "model_sha256": null,
  "device": "cuda:0" | "cpu",
  "gpu_name": "...",
  "wall_time_s": 12.3,
  "host": "...",
  "timestamp": "..."
}

The Benchmark tab surfaces the latest MLP step's metadata panel. Users export CSV from the same tab to share the full 6-row table with the metadata footer included as RFC-4180-escaped comment lines.

Related skills

  • structure/slab/ — slab generation internals
  • adsorption/ — the general E_ads formula this preset specializes
  • oer/, her/ — if the user wants surface reactivity trends on top of γ(hkl)

Signals

GitHub stars
196
Forks
23
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
mace-ni-benchmark
Source
github.com/hello-qm/catgo-lrg