.. index:: units

units command
=============

Syntax
""""""

.. code-block:: LAMMPS

   units style

* style = *lj* or *real* or *metal* or *si* or *cgs* or *electron* or *micro* or *nano*

Examples
""""""""

.. code-block:: LAMMPS

   units metal
   units lj

Description
"""""""""""

This command sets the style of units used for a simulation.  It
determines the units of all quantities specified in the input script
and data file, as well as quantities output to the screen, log file,
and dump files.  Typically, this command is used at the very beginning
of an input script.

For all units except *lj*, LAMMPS uses physical constants from
www.physics.nist.gov.  For the definition of kcal in real units,
LAMMPS uses the thermochemical calorie = 4.184 J.

The choice you make for units simply sets some internal conversion
factors within LAMMPS.  This means that any simulation you perform for
one choice of units can be duplicated with any other unit setting
LAMMPS supports.  In this context "duplicate" means the particles will
have identical trajectories and all output generated by the simulation
will be identical.  This will be the case for some number of timesteps
until round-off effects accumulate, since the conversion factors for
two different unit systems are not identical to infinite precision.

To perform the same simulation in a different set of units you must
change all the unit-based input parameters in your input script and
other input files (data file, potential files, etc) correctly to the
new units.  And you must correctly convert all output from the new
units to the old units when comparing to the original results.  That
is often not simple to do.

Potential or table files may have a ``UNITS:`` tag included in the
first line indicating the unit style those files were created for.
If the tag exists, its value will be compared to the chosen unit style
and LAMMPS will stop with an error message if there is a mismatch.
In some select cases and for specific combinations of unit styles,
LAMMPS is capable of automatically converting potential parameters
from a file. In those cases, a warning message signaling that an
automatic conversion has happened is printed to the screen.

----------

For style *lj*, all quantities are unitless.  Without loss of
generality, LAMMPS sets the fundamental quantities mass, :math:`\sigma`,
:math:`\epsilon`, and the Boltzmann constant :math:`k_B = 1`.  The
masses, distances, energies you specify are multiples of these
fundamental values.  The formulas relating the reduced or unitless
quantity (with an asterisk) to the same quantity with units is also
given.  Thus you can use the mass, :math:`\sigma`, and :math:`\epsilon`
values for a specific material and convert the results from a unitless
LJ simulation into physical quantities.  Please note that using
these three properties as base, your unit of time has to conform
to the relation :math:`\epsilon = \frac{m \sigma^2}{\tau^2}` since
energy is a derived unit (in SI units you equivalently have the relation
:math:`1\mathsf{J} = 1\frac{\mathsf{kg}\cdot\mathsf{m}^2}{\mathsf{s}^2}`).

* mass = mass or :math:`m`, where :math:`M^* = \frac{M}{m}`
* distance = :math:`\sigma`, where :math:`x^* = \frac{x}{\sigma}`
* time = :math:`\tau`, where :math:`\tau^* = \tau \sqrt{\frac{\epsilon}{m \sigma^2}}`
* energy = :math:`\epsilon`, where :math:`E^* = \frac{E}{\epsilon}`
* velocity = :math:`\frac{\sigma}{\tau}`, where :math:`v^* = v \frac{\tau}{\sigma}`
* force = :math:`\frac{\epsilon}{\sigma}`, where :math:`f^* = f \frac{\sigma}{\epsilon}`
* torque = :math:`\epsilon`, where :math:`t^* = \frac{t}{\epsilon}`
* temperature = reduced LJ temperature, where :math:`T^* = \frac{T k_B}{\epsilon}`
* pressure = reduced LJ pressure, where :math:`p^* = p \frac{\sigma^3}{\epsilon}`
* dynamic viscosity = reduced LJ viscosity, where :math:`\eta^* = \eta \frac{\sigma^3}{\epsilon\tau}`
* charge = reduced LJ charge, where :math:`q^* = q \frac{1}{\sqrt{4 \pi \varepsilon_0 \sigma \epsilon}}`
* dipole = reduced LJ dipole, moment where :math:`\mu^* = \mu \frac{1}{\sqrt{4 \pi \varepsilon_0 \sigma^3 \epsilon}}`
* electric field = force/charge, where :math:`E^* = E \frac{\sqrt{4 \pi \varepsilon_0 \sigma \epsilon} \sigma}{\epsilon}`
* density = mass/volume, where :math:`\rho^* = \rho \frac{\sigma^{dim}}{m}`

Note that for LJ units, the default mode of thermodynamic output via
the :doc:`thermo_style <thermo_style>` command is to normalize all
extensive quantities by the number of atoms.  E.g. potential energy is
extensive because it is summed over atoms, so it is output as
energy/atom.  Temperature is intensive since it is already normalized
by the number of atoms, so it is output as-is.  This behavior can be
changed via the :doc:`thermo_modify norm <thermo_modify>` command.

For style *real*, these are the units:

* mass = grams/mole
* distance = Angstroms
* time = femtoseconds
* energy = kcal/mol
* velocity = Angstroms/femtosecond
* force = (kcal/mol)/Angstrom
* torque = kcal/mol
* temperature = Kelvin
* pressure = atmospheres
* dynamic viscosity = Poise
* charge = multiple of electron charge (1.0 is a proton)
* dipole = charge\*Angstroms
* electric field = volts/Angstrom
* density = g/cm\^dim

For style *metal*, these are the units:

* mass = grams/mole
* distance = Angstroms
* time = picoseconds
* energy = eV
* velocity = Angstroms/picosecond
* force = eV/Angstrom
* torque = eV
* temperature = Kelvin
* pressure = bars
* dynamic viscosity = Poise
* charge = multiple of electron charge (1.0 is a proton)
* dipole = charge\*Angstroms
* electric field = volts/Angstrom
* density = gram/cm\^dim

For style *si*, these are the units:

* mass = kilograms
* distance = meters
* time = seconds
* energy = Joules
* velocity = meters/second
* force = Newtons
* torque = Newton-meters
* temperature = Kelvin
* pressure = Pascals
* dynamic viscosity = Pascal\*second
* charge = Coulombs (1.6021765e-19 is a proton)
* dipole = Coulombs\*meters
* electric field = volts/meter
* density = kilograms/meter\^dim

For style *cgs*, these are the units:

* mass = grams
* distance = centimeters
* time = seconds
* energy = ergs
* velocity = centimeters/second
* force = dynes
* torque = dyne-centimeters
* temperature = Kelvin
* pressure = dyne/cm\^2 or barye = 1.0e-6 bars
* dynamic viscosity = Poise
* charge = statcoulombs or esu (4.8032044e-10 is a proton)
* dipole = statcoul-cm = 10\^18 debye
* electric field = statvolt/cm or dyne/esu
* density = grams/cm\^dim

For style *electron*, these are the units:

* mass = atomic mass units
* distance = Bohr
* time = femtoseconds
* energy = Hartrees
* velocity = Bohr/atomic time units [1.03275e-15 seconds]
* force = Hartrees/Bohr
* temperature = Kelvin
* pressure = Pascals
* charge = multiple of electron charge (1.0 is a proton)
* dipole moment = Debye
* electric field = volts/cm

For style *micro*, these are the units:

* mass = picograms
* distance = micrometers
* time = microseconds
* energy = picogram-micrometer\^2/microsecond\^2
* velocity = micrometers/microsecond
* force = picogram-micrometer/microsecond\^2
* torque = picogram-micrometer\^2/microsecond\^2
* temperature = Kelvin
* pressure = picogram/(micrometer-microsecond\^2)
* dynamic viscosity = picogram/(micrometer-microsecond)
* charge = picocoulombs (1.6021765e-7 is a proton)
* dipole = picocoulomb-micrometer
* electric field = volt/micrometer
* density = picograms/micrometer\^dim

For style *nano*, these are the units:

* mass = attograms
* distance = nanometers
* time = nanoseconds
* energy = attogram-nanometer\^2/nanosecond\^2
* velocity = nanometers/nanosecond
* force = attogram-nanometer/nanosecond\^2
* torque = attogram-nanometer\^2/nanosecond\^2
* temperature = Kelvin
* pressure = attogram/(nanometer-nanosecond\^2)
* dynamic viscosity = attogram/(nanometer-nanosecond)
* charge = multiple of electron charge (1.0 is a proton)
* dipole = charge-nanometer
* electric field = volt/nanometer
* density = attograms/nanometer\^dim

The units command also sets the timestep size and neighbor skin
distance to default values for each style:

* For style *lj* these are dt = 0.005 :math:`\tau` and skin = 0.3 :math:`\sigma`.
* For style *real* these are dt = 1.0 femtoseconds and skin = 2.0 Angstroms.
* For style *metal* these are dt = 0.001 picoseconds and skin = 2.0 Angstroms.
* For style *si* these are dt = 1.0e-8 seconds and skin = 0.001 meters.
* For style *cgs* these are dt = 1.0e-8 seconds and skin = 0.1 centimeters.
* For style *electron* these are dt = 0.001 femtoseconds and skin = 2.0 Bohr.
* For style *micro* these are dt = 2.0 microseconds and skin = 0.1 micrometers.
* For style *nano* these are dt = 0.00045 nanoseconds and skin = 0.1 nanometers.

Restrictions
""""""""""""

This command cannot be used after the simulation box is defined by a
:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command.

Related commands
""""""""""""""""

none


Default
"""""""

.. code-block:: LAMMPS

   units lj
