deMon-Nano is a density-functional based tight-binding (DFTB) code using atom centered orbitals. This interface makes it possible to use deMon-Nano as a calculator in ASE. You need Slater-Koster files for the combination of atom types of your system. These can be obtained at

Environment variables

Set environment variables in your configuration file (what is the directory for the Slater-Koster files and what is the name of the executable):

  • bash:

    $ DEMONNANO_BASIS_PATH="/path/to/basis/"  (an example)
    $ ASE_DEMONNANO_COMMAND="/path/to/bin/deMon.username.x (an example)

deMon-Nano Calculator (a FileIOCalculator)

class ase.calculators.demonnano.DemonNano(**kwargs)[source]

Calculator interface to the deMon-nano code.

ASE interface to the deMon-nano code.

The deMon-nano code can be obtained from

The ASE_DEMONNANO_COMMAND environment variable must be set to run the executable, in bash it would be set along the lines of export ASE_DEMONNANO_COMMAND=”pathway-to-deMon-binary/deMon.username.x”



relative path to the run directory

atomsAtoms object

the atoms object


Command to run deMon. If not present, the environment variable ASE_DEMONNANO_COMMAND is used


Relative path to the directory containing DFTB-SCC or DFTB-0 parameters If not present, the environment variable DEMONNANO_BASIS_PATH is used


Relative path to the deMon restart dir


Title in the deMon input file.


If True a force calculation is enforced

print_outstr | list

Options for the printing in deMon


Explicitly given input arguments. The key is the input keyword and the value is either a str, a list of str (will be written on the same line as the keyword), or a list of lists of str (first list is written on the first line, the others on following lines.)

Example: Geometry Optimization with ASE

import numpy as np

from ase import Atoms
from ase.calculators.demonnano import DemonNano
from import write
from ase.optimize import BFGS

d = 0.9775
t = np.pi / 180 * 110.51
mol = Atoms('H2O',
            positions=[(d, 0, 0),
                       (d * np.cos(t), d * np.sin(t), 0),
                       (0, 0, 0)])

input_arguments = {'DFTB': 'SCC',
                   'CHARGE': '0.0',
                   'PARAM': 'PTYPE=BIO'}

calc = DemonNano(label='rundir/', input_arguments=input_arguments)
mol.calc = calc

# optimize geometry
dyn = BFGS(mol, trajectory='test.traj')

write('', mol)