CatCert
Automated Quality-Control, Vacuum Thickness, Dipole Correction, and Surface Energy Convergence Certification for Heterogeneous Catalysis & DFT Surface Slabs (VASP, Quantum ESPRESSO).
Overview
CatCert is an open-source scientific software package designed to standardize, audit, and certify periodic DFT surface slab calculations and adsorption energetics in heterogeneous catalysis, 2D materials, electrochemistry, and surface science.
Surface slab modeling in VASP, Quantum ESPRESSO, and ASE requires rigorous convergence of slab geometry and periodic boundary conditions:
- 🧱 Surface Energy ($\gamma$) & Slab Layer Convergence:
- Pointwise surface energy: $\gamma = \frac{E_{\text{slab}}(N) - N \cdot E_{\text{bulk}}}{2 A}$ (for symmetric slabs).
- Fiorentini-Methfessel asymptotic regression: $E_{\text{slab}}(N) = 2 A \gamma + N \cdot E_{\text{bulk}}$.
- Layer-by-layer delta convergence criterion: $\Delta\gamma \le 0.015\text{ J/m}^2$ ($\approx 1\text{ meV/\AA}^2$).
- 🌌 Vacuum Thickness & Planar Electrostatic Potential $\bar{V}(z)$:
- Automatically isolates the vacuum gap (verifying $\ge 12-15\text{ \AA}$ to eliminate periodic image interactions).
- Checks vacuum plateau flatness: $\Delta V_{\text{vac}} \le 0.05\text{ eV}$.
- Computes the physical work function: $\Phi = V_{\text{vac}} - E_{\text{Fermi}}$.
- ⚡ Electrostatic Dipole Moment & Asymmetry Audit:
- Quantifies potential steps $|\Delta \Phi| = |\Phi_{\text{top}} - \Phi_{\text{bottom}}|$ in asymmetric slabs (adsorbates on one side, polar facets).
- Audits dipole corrections (
LDIPOL = .TRUE.in VASP,dipfield = .true.in QE) to prevent artificial electric field artifacts.
- 🔬 Adsorption Energy ($E_{\text{ads}}$) & Dispersion Check:
- $E_{\text{ads}} = E_{\text{slab+adsorbate}} - (E_{\text{clean}} + E_{\text{gas}})$.
- Verifies presence of van der Waals / dispersion corrections (D3-BJ, D4, vdW-DF2) and ZPE corrections.
- 📑 Publication Deliverables:
- Interactive self-contained
report.htmldashboard. - Publication vector figures ($\gamma$ vs layer count, $\bar{V}(z)$ potential profile) in SVG, PDF, PNG (300 DPI).
- Ready-to-compile LaTeX summary tables (
.tex). - Draft Methods text snippet and BibTeX citation (
citation.bib).
- Interactive self-contained
DFT Outputs (OUTCAR, LOCPOT, QE log, Convergence CSV)
│
▼
┌───────────────────────────────────────────────────────────┐
│ CatCert │
│ ├── Surface Energy & Fiorentini-Methfessel Regression │
│ ├── Vacuum Gap Spacing & Potential Profile Flatness V(z) │
│ ├── Work Function (Phi = V_vac - E_Fermi) │
│ ├── Asymmetric Dipole Correction Verification │
│ └── Adsorption Energy & vdW Dispersion Audit │
└───────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────┐
│ Publication Deliverables │
│ ├── report.html (Interactive Dashboard & Badges) │
│ ├── catcert_surface_energy_convergence.pdf/svg/png │
│ ├── catcert_potential_profile.pdf/svg/png │
│ ├── catcert_summary_table.tex / .csv │
│ ├── methods_snippet.txt (Ready for Manuscript) │
│ └── citation.bib (BibTeX Reference) │
└───────────────────────────────────────────────────────────┘
Installation
From PyPI
Correction (1.2.0): the Al(111) surface energy of 0.858 J/m^2 quoted in the 1.1.0 development notes was computed against an unconverged bulk reference and is withdrawn. See CHANGELOG.md.
Note: PyPI release pending. Until then, install from the tagged GitHub release:
pip install "git+https://github.com/sircalch/catcert@v1.2.0"
From Source
git clone https://github.com/sircalch/catcert.git
cd catcert
pip install -e .[dev]
Quickstart (CLI)
1. Run Benchmark Demo (Pt(111) 3-7 Layers + CO* Adsorption)
catcert demo -o my_slab_audit/
Open my_slab_audit/report.html in your browser!
2. Assess Slab Convergence CSV & Potential Profile
catcert assess --layers-csv pt_layers.csv --area 27.60 --potential potential_1d.dat --e-fermi -5.70 -o slab_report/
Python API Usage
from catcert import (
calculate_surface_energy_convergence,
calculate_vacuum_potential_profile,
calculate_dipole_correction_audit,
calculate_adsorption_energy,
assess_slab_quality
)
from catcert.reporters import (
generate_catcert_figures,
generate_catcert_manuscript_assets,
generate_catcert_html_report
)
# 1. Surface energy convergence
se_res = calculate_surface_energy_convergence(
slab_energies_ev=[-72.22, -96.42, -120.61, -144.79, -168.97],
n_atoms_list=[12, 16, 20, 24, 28],
layer_counts=[3, 4, 5, 6, 7],
surface_area_ang2=27.60,
bulk_energy_per_atom_ev=-6.045
)
# 2. Consolidate slab quality
report = assess_slab_quality(
metadata={"surface": "Pt(111)", "functional": "PBE-D3", "software": "VASP"},
surface_energy_res=se_res
)
print(f"Overall Certification: {report.overall_status}")
print(f"Converged gamma: {report.surface_energy.converged_gamma_j_m2:.3f} J/m^2")
# 3. Export manuscript deliverables
generate_catcert_figures(report, "output_dir/")
generate_catcert_manuscript_assets(report, "output_dir/")
generate_catcert_html_report(report, "output_dir/report.html")
Citation
If you use CatCert in your research, please cite:
@software{monreal2026catcert,
author = {Monreal-Hern{\'a}ndez, Andre},
title = {{CatCert: Automated Quality-Control, Vacuum Thickness, Dipole Correction, and Surface Energy Convergence Certification for Heterogeneous Catalysis & DFT Surface Slabs}},
year = {2026},
version = {1.0.0},
publisher = {Zenodo},
url = {https://github.com/sircalch/catcert}
}
License
This project is licensed under the MIT License - see the LICENSE file for details.
Metadata
Release files for catcert 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| catcert-1.2.0.tar.gz | 32.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| catcert-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 66.5 kB
Release files / catcert-1.2.0.tar.gz
| Download URL | catcert-1.2.0.tar.gz |
|---|---|
| Size | 32.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9301d7b8cba84d261eeadc6fca802c8dd8470464be8a716d63f4ee15d0485199
|
|
BLAKE2b-256 checksum How to use checksums |
300faa0799a5afa35239bfdfaba19121f91d0cb9d72729123c14e8d8c98f6649
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.
Transparency logRelease files / catcert-1.2.0-py3-none-any.whl
| Download URL | catcert-1.2.0-py3-none-any.whl |
|---|---|
| Size | 33.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4374a3ca87667dbfed153fcb8106f82f1c8826e38012705ebd0b6d58d48e1c34
|
|
BLAKE2b-256 checksum How to use checksums |
22fc726f195f03ab61b1f81104508bc36e9ca390879f8f014e2eca6fa6e2423f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.
Transparency log