Sequential stability evaluation for solid-state electrolyte candidates: mechanical, vibrational (anharmonic), and thermodynamic gates.
Project description
heatup
Sequential Stability Evaluation for Solid-State Electrolyte Candidates
heatup implements a three-gate sequential stability pipeline for solid-state
electrolyte (SSE) candidates discovered by machine-learning-guided active learning.
Each gate must pass (or at least not fail) before the next one is evaluated, avoiding
expensive computations on materials that are already ruled out by simpler criteria.
Candidate structure
│
▼
┌──────────────────┐
│ Gate 1 │ Born–Huang criterion (elastic tensor eigenvalues)
│ Mechanical │ Bulk modulus B, Shear modulus G
└────────┬─────────┘
│ pass / warn
▼
┌──────────────────┐
│ Gate 2 │ Anharmonic VDOS from AIMD (VACF method)
│ Vibrational │ Soft-mode weight at ω ≈ 0
└────────┬─────────┘
│ pass / warn
▼
┌──────────────────┐
│ Gate 3 │ Temperature-dependent convex hull
│ Thermodynamic │ F(T) = E₀ + F_vib(T), anharmonic for target
└──────────────────┘
│
▼
stability_report.json + stability_report.pdf
Installation
pip install heatup # core only
pip install "heatup[md]" # + MACE / ASE for MD triggering
pip install "heatup[generation]" # + PyXtal for polymorph generation
pip install "heatup[all]" # everything
For development:
git clone https://github.com/CibranLopez/HeatUp
cd heatup
pip install -r requirements.txt
pytest
Quick start
Python API
from heatup import run_stability_pipeline
report = run_stability_pipeline(
sym_dir = "database/LiZrS2/R3m",
operating_T = 1200.0, # K
device = "cuda",
)
print(report["overall"]) # "ok" | "warn" | "fail" | "missing"
for flag in report["flags"]:
print(flag)
Command line
# Single material
heatup database/LiZrS2/R3m --operating-T 1200 --device cuda
# Entire database
heatup batch --database database --operating-T 1200
# Skip PyXtal generation (faster)
heatup batch --no-generate
# Force recompute
heatup database/LiZrS2/R3m --force
Integration with the active-learning pipeline
In 02_validate.ipynb (or equivalent), replace the existing stability call with:
from heatup import run_stability_pipeline
for sym_dir in validated_dirs:
report = run_stability_pipeline(
sym_dir = sym_dir,
operating_T = OPERATING_TEMPERATURE,
device = DEVICE,
generate_missing_phases = True,
)
if report["overall"] == "ok":
retraining_candidates.append(sym_dir)
elif report["overall"] == "warn":
# borderline — human review
flagged.append((sym_dir, report["flags"]))
# "fail" → excluded automatically
Directory layout
database/
<material>/<symmetry>/
POSCAR
relaxation/
energy.json ← MACE ground-state energy per atom
elastic/
elastic_tensor.json ← 6×6 stiffness tensor + derived moduli
phonons/
dos.json ← harmonic DOS (fallback for Gate 3)
aimd/
<T>K/
output.traj
simulation-input.json
anharmonic_phonons/
vdos.json ← cached VACF→VDOS (written by this package)
thermo.json
free_energy.json
stability/
secondary_phases.json
hull_vs_T.json
stability_report.json ← gate results + overall verdict
stability_report.pdf ← three-panel dashboard
Configuration
All thresholds live in heatup/config.py and can be overridden at runtime:
import heatup.config as cfg
cfg.THERMO_HULL_WARN_EV = 0.05 # tighter metastability window (50 meV)
cfg.VIB_ZERO_FRAC_FAIL = 0.05 # stricter soft-mode threshold
cfg.MECH_BULK_WARN_GPa = 20.0 # demand stiffer electrolytes
cfg.PYXTAL_MAX_ATOMS = 60 # allow larger unit cells
Gate details
Gate 1 — Mechanical (Born–Huang)
Reads elastic/elastic_tensor.json. All six eigenvalues of the 6×6 Voigt
stiffness tensor C must be positive (Born–Huang criterion). The Voigt-averaged
bulk modulus B and shear modulus G are checked against configurable thresholds.
Gate 2 — Vibrational (anharmonic VDOS)
Reads aimd/<T>K/anharmonic_phonons/vdos.json. The VDOS is extracted from
AIMD trajectories via the velocity autocorrelation function (VACF), averaged
across all available MD temperatures, and the fraction of spectral weight within
a narrow window around ω = 0 is computed. Significant weight there indicates
soft modes surviving at finite temperature — a signature of structural instability
or pre-transitional dynamics.
Gate 3 — Thermodynamic (convex hull with T)
Constructs F(T) = E₀ + F_vib(T) for the target material (using the anharmonic
VDOS) and for all secondary phases (harmonic approximation). Missing polymorphs
are generated automatically with PyXtal. The pymatgen PhaseDiagram engine
builds the convex hull at each temperature and the distance above the hull is
evaluated at operating_T.
Running the tests
pytest # all tests
pytest -k mechanical # Gate 1 only
pytest -v --tb=long # verbose
pytest --cov=heatup # with coverage report
Citation
If you use this package in your research, please cite:
@article{heatup_2025,
title = {HeatUp: Sequential Stability Evaluation for Machine-Learning-Guided
Discovery of Solid-State Electrolytes},
author = {López, C. et al.},
journal = {---},
year = {2026},
note = {preprint}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file heatup-0.1.0.tar.gz.
File metadata
- Download URL: heatup-0.1.0.tar.gz
- Upload date:
- Size: 96.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55d346832aa8e4f1fb566db232e729ebbec0075e2ed3f1b894abcfeb6450b896
|
|
| MD5 |
857eb16d5eaa611c70673e6021538369
|
|
| BLAKE2b-256 |
40da1b8e7ab3385135364f33aae2e06b5fc9d598135025b814fa2e679ef79761
|
File details
Details for the file heatup-0.1.0-py3-none-any.whl.
File metadata
- Download URL: heatup-0.1.0-py3-none-any.whl
- Upload date:
- Size: 99.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4167b8f7204d46d63e76a8273c09892107db94036cd644cec5ec98cb0b642e37
|
|
| MD5 |
cd2a768d44fd46b6b7b585f2e6f59c69
|
|
| BLAKE2b-256 |
1044a90e3207f12c10d126a09fe8da47b5672f8b706e84afca7e21b758748ffa
|