Units

Physical units are defined in the :git:`ase/units.py` module. Electron volts (eV), Ångström (Ang), the atomic mass unit and Kelvin are defined as 1.0. Other units are (amongst others) nm, Bohr, Hartree or Ha, kJ, kcal, mol, Rydberg or Ry, second, fs and kB.

Time is given in units of \(\textrm Å \sqrt{\textrm{u} / \textrm{eV}}\). Thus, for example, \(1\textrm{ fs} \approx 0.098 \textrm Å \sqrt{\textrm{u} / \textrm{eV}}\), where \(\textrm u\) is the atomic mass unit.

Prior to ASE 3.21.0, temperatures were often specified as kT in energy units (eV), effectively using the Boltzmann konstant kB as a temperature unit. From ASE 3.21.0, the temperatures should be given in Kelvin.

Note

As of version 3.12.0, all constants are taken from the 2014 version of the CODATA suggestions. Before that, all constants were taken from the 1986 version. There is, however, a way to create all units depending on other versions of CODATA via the create_units() function (see Changing the CODATA version).

Examples:

>>> from ase.units import Bohr,Rydberg,kJ,kB,fs,Hartree,mol,kcal
>>> 2 * Bohr
1.0583544211276823
>>> 25 * Rydberg
340.14232530459054
>>> 100 * kJ/mol
1.036426957471157
>>> 300 * kB
0.02585199101165164
>>> 0.1 * fs
0.009822694788464065
>>> print('1 Hartree =', Hartree * mol / kcal, 'kcal/mol')
1 Hartree = 627.5094738898777 kcal/mol

Changing the CODATA version

If you just require an additional set of units that are based on a different version of CODATA, you can use the create_units(codata_version) function. It supports CODATA versions '1986', '1998', '2002', '2006', '2010', '2014'. This function will return a dictionary with key-value pairs of all the constants defined in the ase.units module, but based on the CODATA version just selected:

>>> from ase.units import create_units
>>> units = create_units('1986')
>>> print(units['Bohr'])
0.5291772575069165
>>> units = create_units('2014')
>>> print(units['Bohr'])
0.5291772105638411

The dictionary also supports attribute access so it can be used as a drop-in replacement for the module:

>>> from ase.units import create_units
>>> units = create_units('1986')
>>> units.Bohr
0.5291772575069165
>>> units = create_units('2014')
>>> units.Bohr
0.5291772105638411
ase.units.create_units(codata_version)[source]

Function that creates a dictionary containing all units previously hard coded in ase.units depending on a certain CODATA version. Note that returned dict has attribute access it can be used in place of the module or to update your local or global namespace.

Parameters:

codata_version: str

The CODATA version to be used. Implemented are

  • ‘1986’

  • ‘1998’

  • ‘2002’

  • ‘2006’

  • ‘2010’

  • ‘2014’

Returns:

units: dict

Dictionary that contains all formerly hard coded variables from ase.units as key-value pairs. The dict supports attribute access.

Raises:

NotImplementedError

If the required CODATA version is not known.