# Physical quantities and units¶

Units are a key concept in QuantumATK. All parameters that correspond to physical quantities, such as lengths, energies, voltages, etc., should be specified with an explicit unit. Similarly, all physical results returned from QuantumATK calculations also contain an explicit unit. PhysicalQuantity objects are created by multiplying the scalar, list, or array, containing the quantity’s value(s), with the desired unit:

>>> a = [[1.0, 2.0], [3.0, 4.0]]*Angstrom
>>> t = 0.5*femtoSecond**-1


See below for physical units available in QuantumATK.

All PhysicalQuantity objects have two query methods:

• inUnitsOf(Unit): Returns the numerical value in the specified unit as a numpy-array, respectively numpy-float object for scalar values.
• convertTo(Unit): Returns the value of the PhysicalQuantity as a new PhysicalQuantity object in the specified unit.

Moreover, since the PhysicalQuantity class derives from numpy.array, PhysicalQuantity objects can be used, in most respects, as a numpy array. This means that many class methods of numpy arrays, such as sum(), max(), or reshape() can be used with PhysicalQuantity objects.

Element-wise operations between two PhysicalQuantity objects work as in numpy, e.g.:

>>> a = [[1.0, 2.0], [3.0, 4.0]]*Ang
>>> b = [[2.0, 2.0], [4.0, 4.0]]*nanoMeter
>>> c = a + b
>>> print(c)
[[ 21.  22.]
[ 43.  44.]] Ang


Note, that addition and multiplication require compatible units for all operands.

Most numpy universal functions, as well as the two numpy functions numpy.dot and numpy.cross, work for PhysicalQuantity objects, in the same way as for numpy arrays.

Note, however, that most other numpy and python functions, e.g. numpy.arange, are not supported for PhysicalQuantity. In order to use them, the units have to be removed, via inUnitsOf() before the function is invoked:

>>> a = 5.0*Ang
>>> b = 1.0*nanoMeter
>>> delta = 0.5*Ang
>>> distances = numpy.arange(a.inUnitsOf(Ang), b.inUnitsOf(Ang), delta.inUnitsOf(Ang))


If the result of a PhysicalQuantity-operation is unitless, e.g:

>>> a = [[1.0, 2.0], [3.0, 4.0]]*Ang
>>> b = [[2.0, 2.0], [4.0, 4.0]]*Ang**-1
>>> c = a*b
>>> print(c)
[[ 21.  22.]
[ 43.  44.]]


the result is directly returned as a numpy array, respectively as numpy float for scalar values.

## Usage Examples¶

Getting a float value:

>>> a = 5*Angstrom
>>> print(a.inUnitsOf(nanoMeter))
0.5


Getting a PhysicalQuantity object:

>>> print(a.convertTo(nanoMeter))
0.5 nm


Physical quantities can be transformed with an exponent:

>>> a = 2. * Meter * Second**-2
>>> v = (2 * a * (1*Meter))**0.5
>>> print(v)
2.0 m/s


Inverse units are specified by using the exponent operator **:

>>> f = 2.2/Second
>>> print(f.inUnitsOf(Second**-1))
2.2


Units are attached to values by multiplication. Thus, to specify a length of 5 Bohr:

>>> a = 5*Bohr


By printing the value of the variable a, the unit will automatically be displayed:

>>> print(a)
5.0 Bohr


Units can also be composite. The unit for force is Newton, which is Joule per Meter. This is a rather awkward unit for nano-scale calculations, where something like electron volt per nm makes more sense. Any energy divided by a length is, however, a valid force unit, so to specify a force, write:

>>> F = 5*eV/Bohr


Next, multiply this by a length again and the result will be an energy:

>>> b = F*5*Bohr
>>> print(b)
25*eV


Some unit abbreviations are only available with the Units prefix:

>>> b = 5.1*Units.Ry
>>> print(b)
5.1 Rydberg


Units that by default are specified without a prefix, can also be given with a prefix:

>>> b = 5.1*Rydberg
>>> c = 5.1*Units.Rydberg


## Units available in QuantumATK¶

The following units are made available when importing QuantumATK:

 Unit type Name Length units nm nanoMeter Ang Angstrom Bohr Meter Energy units Rydberg eV meV electronVolt Hartree J Joule Calorie kiloCaloriePerMol kiloJoulePerMol Force units Newton nanoNewton Mass unit kiloGram Temperature unit Kelvin Time units fs femtoSecond femtosecond ps picoSecond picosecond ns nanoSecond nanosecond microSecond microsecond milliSecond millisecond Second Minute Hour Day Conductivity related units Ampere Volt Siemens G0 Coulomb Pressure units bar Pa GPa Spin unit hbar Number unit Mol mol Angle units Radians Degrees Physical constants boltzmann_constant planck_constant avogadro_number speed_of_light atomic_mass_unit hbar electron_mass elementary_charge vacuum_permitivity