# NanoLanguage

NanoLanguage is a scripting interface built on top of the interpreted programming language Python, and is primarily intended for simulation of physical and chemical properties of nanoscale systems.

## Introduction

Over the years, several electronic-structure codes based on density functional theory have been developed by different groups of academic researchers; VASP, Abinit, SIESTA, and Gaussian are just a few examples. The input to these programs is usually a simple text file written in a code-specific format with a set of code-specific keywords. [1] [2] [3]

NanoLanguage was introduced by Atomistix A/S as an interface to Atomistix ToolKit (version 2.1) in order to provide a more flexible input format. A NanoLanguage script (or input file) is just a Python program and can be anything from a few lines to a script performing complex numerical simulations, communicating with other scripts and files, and communicating with other software (e.g. plotting programs). NanoLanguage is not a proprietary product of Atomistix and can be used as an interface to other density functional theory codes as well as to codes utilizing e.g. tight-binding, k.p, or quantum-chemical methods.[4] [5]

## Features

Built on top of Python, NanoLanguage includes the same functionality as Python and with the same syntax. Hence, NanoLanguage contains, among other features, common programming elements (for loops, if statements, etc.), mathematical functions, and data arrays.

In addition, a number of concepts and objects relevant to quantum chemistry and physics are built into NanoLanguage, e.g. a periodic table, a unit system (including both SI units and atomic units like Ångström), constructors of atomic geometries, and different functions for density-functional theory and transport calculations. [6]

## Example

This NanoLanguage script uses the Kohn–Sham method to calculate the total energy of a water molecule as a function of the bending angle.

```#Define function for molecule setup
def waterConfiguration(angle,bondLength):
from math import sin,cos

positions = [(0.0, 0.0, 0.0)*Angstrom,
(1.0, 0.0, 0.0)*bondLength,
(cos(theta), sin(theta), 0.0)*bondLength]
elements = [Oxygen] + [Hydrogen]*2

return MoleculeConfiguration(elements,positions)

#Choose DFT method with default arguments
method = KohnShamMethod()

#Scan different bending angles and calculate the total energy
for i in range(30,181,10):
theta = i*degrees
h2o = waterConfiguration(theta, 0.958*Angstrom)
scf = method.apply( h2o )
print 'Angle = ', theta, ' Total Energy = ',calculateTotalEnergy(scf)
```