Skip to content

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.

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
  • 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.

from atomli import Atoms
from 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.

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.

Atomli calculators can be attached directly to ase.Atoms:

from ase import Atoms
from 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.

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.