Table of Contents
This manual describes the new QuantumWise version of the Atomistix ToolKit, ATK. ATK is a set of atomic-scale simulators, so-called calculators that can calculate properties of nano-scale systems. This first QuantumWise version of ATK, only includes semi-empirical calculators, implemented in the module Atomistix ToolKit Semi-Empirical(ATK-SE). In future versions, ATK will also include Density Functional Methods.
The input format for ATK is NanoLanguage which is an extension to the Python scripting language. Compared to the previous version ATK-2008.10, the NanoLanguage syntax has been extended and slightly modified to provide better support for the use of different calculators.
ATK supports simulations of isolated systems (molecules), periodic systems (crystals), and systems of the type bulk-nanodevice-bulk (device systems). In this new version, it is also possible to include continuum dielectric and metallic regions for all system types. For device systems, it is thus possible to calculate current-voltage characteristics of nano-scale transistors, i.e. systems where a number of electro-static gates are controlling the source-drain current.
Figure 1: A typical device system, consisting of a z-shaped Graphene Nano Ribbon, on top of a dielectric and controlled by three metallic gates. The contour plot illustrates the electrostatic potential through the system. The unique capability of ATK is its ability to study the electron transport through such types of systems. The current version supports device systems with two electrodes, and gate electrodes are included as non current carrying electro-static gates. The underlying algorithms are readily extended to multi-probe systems; support for device systems with several current carrying electrodes are projected in future versions.
NanoLanguage is the scripting Language that binds all QuantumWise products together, and is a platform on which other developers and companies can build applications and extend the functionality of QuantumWise products. In the following sections, we will try to explain some of the idea's behind NanoLanguage; users familiar with NanoLanguage may consult the upgrade guide available from our website
Put shortly, NanoLanguage is a new way of thinking scientific computing, combining the strength of flexible object-oriented scripting interfaces (known from Mathematica and MATLAB) with sophisticated high performance scientific computing algorithms. The goal is to enable scientists to efficiently extend, specialize and combine methods to calculate nanoscale properties of matter, including density functional theory, semi-empirical tight-binding, classical potentials, as well as various quantum-chemical methods.
NanoLanguage admits both low and high level detailed control of the computer simulations. At the high level, it offers a common interface for setting up complex atomic-scale simulations and analyzing the results. On the lower level, it provides an interface to the low-level functionality in ATK.
NanoLanguage is built on top of Python, a powerful and well-established interpreted programming language, and thus includes basic programming constructions, as well as support for efficient manipulations of e.g. numerical array data. It is therefore an ideal tool for automating series of batch simulations where geometric, material, and other parameters are to be optimized.
NanoLanguage allows scientists to express models of nature in a common language without the need to re-implement already developed algorithms, and facilitates third-party development of new functionality on top of the ATK platform. Such functionality may consist of new atomic-scale modeling methodologies, tailored semi-empirical methods, or complex post-processing methods for calculating new quantities from the fundamental simulation results.
With a Python interface, the user is immediately offered all kinds of extended functionality out of the box. This list could be made very long, and below we will just highlight some of the most important advantages and features of NanoLanguage. First, however, it is necessary to clearly define where “NanoLanguage” fits into this concept. That is, how is NanoLanguage related to, or different from, Python itself.
From a programming language point of view, ATK is just a Python interpreter. That is, the syntax is the same as in Python, and the entire behavior of the ATK application will therefore be as close as possible to any other Python interpreter.
NanoLanguage further extends a standard Python environment with concepts and objects relevant for quantum physics and chemistry. That is, in NanoLanguage there is a periodic table containing elements, units such as Rydberg and Angstrom, methods for calculating the one-electron spectrum of a molecules, band-structure of solids, transmission spectra of nano-scale devices as well of constructors for creating molecules, Bravais lattices, and nano-scale devices.
Among many other things, NanoLanguage offers you
Using a programming language gives the user control of the program execution path, as opposed to program using a text based input file. For instance, performing calculations of current-voltage characteristics with different gate potentials and using combinations of self consistent potentials from previous runs as initial guess, can easily be defined in the input file. Other tasks as defining tight binding parameters, optimizing semi-empirical parameters based on reference calculations, or performing relaxations are planned to be in open source python modules which can easily be modified or extended.
By delivering parts of the end-user functionality in the form of open scripts, NanoLanguage offers a software transparency, giving the user increased insight as to what actually goes on inside the program. As a consequence, the user will also have the ability to tweak the behavior, or define new functionality within a given framework. Also, no operations are performed unless the user requests them. Obviously this saves time, but it also makes the scripts much more self-documenting. This is also reflected in more low-level details such as that all physical quantities must be defined with a unit. Again, this is related to transparency; nothing is implicit (and hence subject to misunderstandings or oversights).
Given the native capabilities of Python, users have the chance to extend the functionality of NanoLanguage. On the simplest level, this can be in the form of small functions performing routine tasks, or loops for simplifying automation (calculating the properties of a bulk sample for a range of lattice constants, for instance). A more advanced application could be to define entire classes to represent complex geometries (such as a nanotube).
NanoLanguage gives access to data, such as the electron difference density, in native Python types (basically, numerical arrays). This, for example, enables you to perform integration over the plane perpendicular to the transport direction to plot the effective potential along the transport axis in a two-probe system, or make cut-lines in the data. Later on, it will also be possible to access individual elements of the density matrix and other core constituents of the calculation through native Python types. This will allow for a multitude of user-defined analysis options, which in many cases can be defined and delivered as open scripts, instead of core functionality with a rigid interface.
In addition to the features of NanoLanguage mentioned above, we would also like to highlight some of the specific advantages offered by using Python as the platform for ATK.
Python is fully programmable, mature, modern object-oriented programming language.
The Python syntax is very powerful, yet surprisingly simple to learn. It is similar to other well-known languages such as C, but requires less unnecessary typing (in particular compared to e.g. Perl) and gives a better structural overview via its indentation scheme.
There are several standard Python modules which are of particular relevance for scientific applications. As the most notable example, we can mention the fast handling of large data arrays obtained via the NumPy package.
Since Python is inherently modularized, it will be much easier to modularize ATK. In particular, this offers great simplifications in order for users to develop their own extensions to the basic ATK package.
Python is an interpreted language, which could be used as an argument against it, for performance reasons. However, ATK takes advantage of the rich possibilities to couple Python with efficient code written in C, C++, or Fortran, and all performance-critical operations are carried out in compiled libraries, including the possibility to run in parallel. Therefore, Python, as an interpreted language, gains an advantage as it can be used interactively without compromising the power and speed of a compiled program.
Since the language is interpreted, the source code is, with minor exceptions, automatically cross-platform compatible.
Python comes with “batteries included”, meaning that you can perform a very large variety of operations out of the box.
On the more technical level, dynamical type-checking and name resolution are major benefits for the flexibility of the code.
For more information about Python, see the Python website. Also, we highly recommend the Wikipedia page on Python which contains a large number of links for further reading.
In this reference manual, you will find reference documentation for the different commands in the ATK scripting language called NanoLanguage. For tutorials on how to use ATK we refer to our website. The main purpose of the manual is to give a reference to the NanoLanguage input format. A detailed summary of all input and output parameters and available NanoLanguage commands can be found in the alphabetically ordered Reference manual index.
This manual contains several ATK script examples, as well as in-line text references to ATK and Python objects and functions. To ease the reading of these, we use the following style and link conventions
All ATK objects and functions are type set as links in bold face monospace. For example, the object “HuckelCalculator” will appear as HuckelCalculator. Click on the link, and you will be taken to the relevant section of the reference manual, where a detailed description of the object “HuckelCalculator” is provided.
More information for using basic Python constructions are provided in a separate chapter Python in ATK. References to this chapter, for example regarding Python for loops and tuples, are given directly in the manual pages.
In the HTML version of this manual, all script examples are syntax highlighted, for example
All ATK elements are color highlighted as in
MoleculeConfiguration
Python structures are type set as in
from and import
whereas script comments are displayed as
# This is a comment
Beneath each script example, a link is provided in the right margin. Use this to download your own copy of the displayed script.
Remember to visit our website for updates both to the manual and the software