The atomic simulation environment - A Python library for working with atoms
Ask Hjorth Larsen, Jens Jørgen Mortensen, Jakob Blomqvist, Ivano E. Castelli, Rune Christensen, Marcin Dułak, Jesper Friis, Michael N. Groves, Bjørk Hammer, Cory Hargus, Eric D. Hermes, Paul C. Jennings, Peter Bjerre Jensen, James Kermode, John R. Kitchin, Esben Leonhard Kolsbjerg, Joseph Kubal, Kristen Kaasbjerg, Steen Lysgaard, Jón Bergmann Maronsson, Tristan Maxson, Thomas Olsen, Lars Pastewka, Andrew Peterson, Carsten Rostgaard, Jakob Schiøtz, Ole Schütt, Mikkel Strange, Kristian S. Thygesen, Tejs Vegge, Lasse Vilhelmsen, Michael Walter, Zhenhua Zeng and Karsten W. Jacobsen, “The atomic simulation environment - A Python library for working with atoms”, Journal of Physics: Condensed Matter 29(27), 273002 (2017). https://doi.org/10.1088/1361-648X/aa680e
This summary was written by a language model from the paper and has not been checked line by line. Rely on the published paper for details.
Question
Atomistic simulation codes have traditionally been monolithic compiled programs driven by static input files, so a single run can do only what the code implements, and combining tasks or comparing codes means rewriting inputs by hand. This topical review describes the Atomic Simulation Environment (ASE), a collection of Python modules for setting up, steering, visualizing and analyzing atomic-scale simulations, and explains how a scripting layer with a uniform interface to many energy and force codes makes complex simulation tasks simple to express (Hjorth Larsen et al. 2017).
Approach
The paper is a software review with short code examples (which are absent from the extracted text; only the surrounding prose and figures survive). It traces ASE from its origin around 2000 as an object-oriented wrapper for the Fortran DFT code DACAPO at the Technical University of Denmark, through rewrites for versions 2 and 3 that deliberately reduced the degree of “objectification” (positions became plain coordinate arrays rather than objects) while keeping design patterns such as observers attached to dynamics. It then walks through the library section by section: structure generation, file input and output with a database, calculators and their parallelization, dynamics and optimization, global optimization, vibrations and thermochemistry, electronic structure tools, and command-line utilities. ASE is pure Python built on NumPy, with SciPy and matplotlib recommended, uses eV and Å as units, and is licensed under LGPLv2.1 or newer.
Key findings
The core abstraction is the pairing of an Atoms object (species, positions, cell, periodic boundary conditions, and optional velocities, masses or magnetic moments, all backed by NumPy arrays) with a “calculator”, a black box that returns energies, forces and possibly stresses. The paper tabulates about 30 calculators, ranging from DFT codes (VASP, GPAW, Quantum Espresso, CP2K, FHI-aims, NWChem, Gaussian and others) to tight-binding and classical potentials (EMT, EAM, Lennard-Jones, LAMMPS, QUIP, OpenKIM), plus wrappers adding Tkatchenko-Scheffler and Grimme D3 dispersion corrections. Most calculators communicate by writing input files, launching the code and parsing output, which is simple but costly in I/O; in-process calculators such as GPAW allow zero-copy data exchange and reuse of wavefunctions between steps, and CP2K is driven through pipes. Three parallel modes are supported, including a distributed-atoms mode (currently only with Asap) for million-atom molecular dynamics.
Algorithms act only on Atoms and are calculator agnostic. They include NVE, NVT (Berendsen, Langevin, Nosé-Hoover) and NpT molecular dynamics; local optimizers (BFGS, L-BFGS, MDMin, FIRE, SciPy wrappers), where preconditioned L-BFGS gave speedups of up to an order of magnitude over standard L-BFGS in solid-state tests; constraints and filters (for example fixed atoms or unit-cell relaxation); nudged elastic band with climbing image, IDPP initial paths, NEB-TR and AutoNEB (reported to cut cost by 50 to 70% in benchmarks); the dimer method; and basin hopping, minima hopping and a genetic algorithm module used for alloy nanoparticles, Au clusters on TiO2 and ammonia storage materials. The structure tools cover 230 space groups, surfaces with adsorption sites, Wulff nanoparticles and 65 file formats, and the ase.db module stores atoms plus key-value data in JSON, SQLite3 or PostgreSQL backends with a command-line and web interface. A checkpointing module built on the database lets long scripts resume across queue wall-time limits.
Analysis modules compute vibrations from finite differences (6N+1 force calls) with a correction for the egg-box effect, phonons, and thermochemistry in harmonic, ideal-gas and crystalline-solid limits; phase and Pourbaix diagrams (illustrated for K-Ta-O, where KTaO3 is stable against solid phases but not against dissolution, using about 500 stored dissolution energies); band structures and k-point paths; BEEF-vdW ensemble error estimates (Fischer-Tropsch reaction enthalpies of -1.86 and -1.53 eV with estimated errors of 0.25 eV, against experimental -2.14 and -1.80 eV); and Landauer-Büttiker electron transport, shown for a benzene junction between graphene leads.
Significance
ASE established the calculator interface that much later atomistic software, including Kitchin group tools, builds on: the paper notes that Amp, matscipy and quippy extend it, and the group’s machine-learned potentials (boes2016, wang2018, gao2018), NEB and optimization work (yang2021, wander2025a, thirumalai2018) and thermochemistry (wander2025) all run through it. Its database and scripting model also underpin the group’s data-sharing practice (kitchin2015, kitchin2016a). The authors list future needs including machine-learning search methods, better electronic-structure analysis, built-in symmetry analysis, and utilities for managing screening studies.