Atomistix ToolKit (ATK) packages a powerful set of tools for calculating properties of nano-scale systems. These atomic-scale simulators, in ATK denoted calculators, are based on density functional theory, semi-empirical tight binding, and classical potentials. The non-equilibrium Green’s function method is a unique feature of ATK; it allows simulations on nano-scale devices and interfaces, including support for non-zero bias between the electrode leads and device components such as electrostatic gates and dielectrics.


Fig. 106 A typical device system, consisting of a z-shaped graphene nanoribbon on top of a dielectric and controlled by three metallic gates. The contour plot illustrates the electrostatic potential through the system. One unique capability of ATK is its ability to simulate the electron transport through such two-probe systems. Gate electrodes are included as non-current-carrying electrostatic gates. One-probe systems with only a single electrode are also supported.

ATK is controlled using NanoLanguage, which is an extension to the well-established Python scripting language. Setting up and executing ATK calculations is therefore done in an ATK Python script or directly from the command line in an interactive Python shell.

The main purpose of this manual is to document all NanoLanguage functionality. The NanoLanguage Reference Manual therefore gives a detailed summary of all input and output parameters, as well as notes on relevant theory and usage examples. The section Classes gives a full list of available commands in NanoLanguage.

We also provide a thorough exposition of the theoretical background for the electronic structure methods implemented in ATK (see Atomic-scale Simulators), and a detailed introduction to Python scripting and using NanoLanguage to control ATK (see Python in ATK).

For tutorials on how to use ATK we refer to the Tutorials website.

ATK 2017

The 2017 release of ATK introduces a range of new features and performance improvements. The list below provides direct links to the documentation for some of the most significant new features.


  • Surface configuration

    Unique approach to simulating real surfaces without resorting to the slab approximation. Uses a one-probe device calculator (Green’s functions) with the physically correct boundary conditions. See SurfaceConfiguration.

  • SG15

    Highly optimized set of GGA pseudopotentials and basis sets for ATK-DFT, also available for calculations with spin-orbit coupling. Often significantly better than the standard FHI potentials. See sections SG15 and Pseudopotentials.

  • Ozaki equilibrium contour

    Highly stable calculation of the equilibrium density matrix in device calculations. Particularly useful if the electronic eigenvalue spectrum is very deep. See OzakiContour.

  • PEXSI solver

    Order-N calculation of the density matrix for very large bulk systems (Γ-point only), and possibly for equivalent-bulk calculations of the central region in big devices. See PEXSISolver.

  • New k-point grids

    Option to shift the Monkhorst–Pack k-point grid, and option to center it on Γ, see MonkhorstPackGrid. Also added a more general k-point mesh, which includes the edge of the Brillouin zone, see RegularKpointGrid. Useful for computing transmission spectra with highly localized features.

  • Hartree and electrostatic potentials

    The previous definition of the ElectrostaticDifferencePotential has been renamed HartreeDifferencePotential (now with unit eV), and the former is now derived from the latter, see The Hartree potential and the electrostatic potential. Two new potentials are also added: HartreePotential (unit eV) and ElectrostaticPotential (unit Volt).

  • New Hubbard-U type method

    Optional energy shifts to the pseudopotential projectors for each angular momentum channel. See PseudoPotentialProjectorShift.


  • Electron-phonon coupling

    Noncollinear spin and spin-orbit coupling can be included when calculating the electron-phonon coupling matrix. New options are added for increased computational speed and for controlling the memory footprint. See ElectronPhononCoupling.

  • Inelastic transmission spectrum

    Noncollinear spin and spin-orbit coupling can be included when calculating the inelastic transmission spectrum for a device configuration. Significantly faster calculations using a spectral representation. See InelasticTransmissionSpectrum.

  • Mobility

    More quantities can be obtained from a mobility calculation: Seebeck coefficient, thermal conductivity, and the Hall-coefficient and Hall-conductivity tensors. See Mobility.


  • Constrain the Bravais lattice

    Now possible (and often default) to maintain a specific Bravais lattice during stress optimization of a bulk configuration. See OptimizeGeometry().

  • Martyna–Tobias–Klein barostat

    State-of-the-art barostat algorithm. Replaces the NPTMelchionna method. See NPTMartynaTobiasKlein.

  • General MD improvements

    All thermostats and barostats support linear heating and cooling (see e.g. NVTBerendsen), and all barostats both isotropic and anisotropic pressure coupling (see e.g. NPTBerendsen). All MD methods are improved wrt. performance and flexibility, and offer more powerful hook functions and constraints.

  • MEAM potential

    New potential for ATK-Classical. Applicable to both metallic and covalent systems. See MeamPairPotential.

ATK Python

  • Verbosity framework

    Control what type of information ATK should print out while running. See setVerbosity().

  • Parallel parameters

    Options for detailed control of multilevel MPI parallelism. See ParallelParameters.

Installing and running the software

The software is distributed as a binary installer containing both ATK and the graphical user interface VNL (Virtual NanoLab). The installer is retrieved from the QuantumWise website: Download VNL-ATK. You will also need to obtain a license (trial licenses are available, see Trial license). Detailed instructions are given in the Installation Guide.

When ATK has been installed on your machine you can run it from the command line using the atkpython executable, which should be in your PATH, and a properly prepared ATK Python script (written in NanoLanguage):

$ atkpython

You can download and use to test this – the script defines a water molecule and relaxes the atomic coordinates using the BFGS algorithm to minimize the forces.

Parallel execution

ATK supports multi-level parallelism, using the Message Passing Interface (MPI) available on most supercomputing clusters for distributed memory parallelism, and OpenMP for shared memory parallelism.

Further details are available in an online guide: MPI setup for running ATK 2016 in parallel.

How to read this manual

This manual is typeset using in-line references to ATK Python objects and functions, and contains several script examples. The following style conventions are used:

  • All ATK objects and functions appear as links, e.g. MoleculeConfiguration. The link will take you to the relevant section of the NanoLanguage Reference Manual, where a detailed description of the object “MoleculeConfiguration” is provided.

  • References to particular chapters and sections are also links. For example, the links For-loops and Tuples direct you to specific sections in the chapter Python in ATK.

  • Boldface letters are used to highlight specific words, e.g. atkpython, while in-line names of Python variables, functions, parameters, and methods are in general typeset using a monospace serif, e.g. list_of_atoms for a Python variable and cartesianCoordinates() for a method of the MoleculeConfiguration object.

  • In-line names of files and directories are also typeset using a monospace serif, e.g. file.txt and $HOME/QuantumWise/.

  • Python structures are visually enclosed in a box and typeset using a monospaced serif:

    # This is a comment
    for i in range(3):
        print i

    Scripts can often be downloaded by following a link, e.g.

  • Instructions for using the command line are indicated by the $ prefix:

    $ atkpython

    while instructions for using an interactive Python session is indicated by the >>> prefix:

    >>> myList = [1, 2, 3, 4, 5]
    >>> print myList
    [1, 2, 3, 4, 5]
    >>> print len(myList)