Choosing a calculator
Atomli calculators share ASE’s attachment model, but the native backends do more than provide a drop-in method name. They retain expensive state between requests, use the same compiled engines in optimization and dynamics, and enforce each method’s scientific boundary before a calculation starts.
Choose by workload
Section titled “Choose by workload”| Calculator | Best fit | Python properties | Periodic systems | External data |
|---|---|---|---|---|
QC |
Molecular and periodic PBE or r2SCAN calculations | energy, forces, periodic stress | Three-dimensional PBC | Packaged basis and pseudopotential data |
XTB |
Fast electronic-structure energies and relaxation | energy, forces, stress | Yes | None |
MLIP |
Large structures, long trajectories, materials screening | energy, forces, stress | Yes, when the model supports the species | Model weights downloaded once or supplied locally |
DFTD3 |
Standalone dispersion correction | energy, forces | Yes | None |
LennardJones |
Tests and simple classical pair models | energy, forces | No cell-specific stress in Python | None |
Choose by method
Section titled “Choose by method”- PBE: default GGA DFT for molecular and periodic systems when SCF cost is acceptable.
- r2SCAN: meta-GGA DFT when energetics justify the extra cost over PBE.
- SKALA 1.1: neural exchange-correlation functional for molecular calculations, with automatic checkpoint delivery.
- GFN2-xTB: fast tight binding for relaxation, screening, and charged or periodic systems.
- g-xTB: tight binding with higher target accuracy than GFN2-xTB at comparable cost.
- MLIP models: Nequix, NequIP, and Equiformer potentials for large systems and long trajectories on CPU or WGPU.
- DFT-D3: standalone dispersion correction to combine with PBE or r2SCAN.
PBE, r2SCAN, and SKALA 1.1 can evaluate the SCF on a GPU for closed-shell molecules.
Energy and forces
Section titled “Energy and forces”from atomli import Atomsfrom atomli.calculators.xtb import XTB
atoms = Atoms("H2", positions=[[0, 0, 0], [0, 0, 0.74]])atoms.calc = XTB(method="gfn2")
energy = atoms.get_potential_energy()forces = atoms.get_forces()The calculator is retained on the Atoms object. A force request immediately
after an energy request can reuse backend state instead of reconstructing the
native engine.
Python API coverage
Section titled “Python API coverage”The calculator guides separate public Python features from native features without Python bindings:
- Python features means the current public Atomli wheel exposes the constructor, property, or behavior.
- Native-only features means the implementation exists in
qc.rs,tb.rs,mlip.rs, or their ASE adapter, but its higher-level Python binding is still future work.
ASE interoperability
Section titled “ASE interoperability”Atomli calculators can be attached directly to ase.Atoms:
from ase import Atomsfrom atomli.calculators.xtb import XTB
atoms = Atoms("H2", positions=[[0, 0, 0], [0, 0, 0.74]])atoms.calc = XTB(method="gfn2")ASE calculators assigned to Atomli Atoms are adapted on assignment. No
user-facing bridge or private-module import is required.
Unsupported properties
Section titled “Unsupported properties”Each calculator publishes implemented_properties. Requesting an unsupported
property raises NotImplementedError or a calculation error. Atomli does not
silently replace a requested method, device, or property with a different one.