495 lines
20 KiB
ReStructuredText
495 lines
20 KiB
ReStructuredText
.. index:: atom_style
|
|
|
|
atom_style command
|
|
==================
|
|
|
|
Syntax
|
|
""""""
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
atom_style style args
|
|
|
|
* style = *amoeba* or *angle* or *atomic* or *body* or *bond* or *charge* or *dielectric* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or *bpm/sphere* or *spin* or *tdpd* or *tri* or *template* or *wavepacket* or *hybrid*
|
|
|
|
.. parsed-literal::
|
|
|
|
args = none for any style except the following
|
|
*body* args = bstyle bstyle-args
|
|
bstyle = style of body particles
|
|
bstyle-args = additional arguments specific to the bstyle
|
|
see the :doc:`Howto body <Howto_body>` doc
|
|
page for details
|
|
*sphere* arg = 0/1 (optional) for static/dynamic particle radii
|
|
*bpm/sphere* arg = 0/1 (optional) for static/dynamic particle radii
|
|
*tdpd* arg = Nspecies
|
|
Nspecies = # of chemical species
|
|
*template* arg = template-ID
|
|
template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
|
|
*hybrid* args = list of one or more sub-styles, each with their args
|
|
|
|
* accelerated styles (with same args) = *angle/kk* or *atomic/kk* or *bond/kk* or *charge/kk* or *full/kk* or *molecular/kk* or *spin/kk*
|
|
|
|
Examples
|
|
""""""""
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
atom_style atomic
|
|
atom_style bond
|
|
atom_style full
|
|
atom_style body nparticle 2 10
|
|
atom_style hybrid charge bond
|
|
atom_style hybrid charge body nparticle 2 5
|
|
atom_style spin
|
|
atom_style template myMols
|
|
atom_style hybrid template twomols charge
|
|
atom_style tdpd 2
|
|
|
|
Description
|
|
"""""""""""
|
|
|
|
The *atom_style* command selects which per-atom attributes are
|
|
associated with atoms in a LAMMPS simulation and thus stored and
|
|
communicated with those atoms as well as read from and stored in data
|
|
and restart files. Different models (e.g. :doc:`pair styles
|
|
<pair_style>`) require access to specific per-atom attributes and thus
|
|
require a specific atom style. For example, to compute Coulomb
|
|
interactions, the atom must have a "charge" (aka "q") attribute.
|
|
|
|
A number of distinct atom styles exist that combine attributes. Some
|
|
atom styles are a superset of other atom styles. Further attributes
|
|
may be added to atoms either via using a hybrid style which provides a
|
|
union of the attributes of the sub-styles, or via the :doc:`fix
|
|
property/atom <fix_property_atom>` command. The *atom_style* command
|
|
must be used before a simulation is setup via a :doc:`read_data
|
|
<read_data>`, :doc:`read_restart <read_restart>`, or :doc:`create_box
|
|
<create_box>` command.
|
|
|
|
.. note::
|
|
|
|
Many of the atom styles discussed here are only enabled if LAMMPS was
|
|
built with a specific package, as listed below in the Restrictions
|
|
section.
|
|
|
|
Once a style is selected and the simulation box defined, it cannot be
|
|
changed but only augmented with the :doc:`fix property/atom
|
|
<fix_property_atom>` command. So one should select an atom style
|
|
general enough to encompass all attributes required. E.g. with atom
|
|
style *bond*, it is not possible to define angles and use angle styles.
|
|
|
|
It is OK to use a style more general than needed, though it may be
|
|
slightly inefficient because it will allocate and communicate
|
|
additional unused data.
|
|
|
|
Atom style attributes
|
|
"""""""""""""""""""""
|
|
|
|
The atom style *atomic* has the minimum subset of per-atom attributes
|
|
and is also the default setting. It encompasses the following per-atom
|
|
attributes (name of the vector or array in the :doc:`Atom class
|
|
<Classes_atom>` is given in parenthesis): atom-ID (tag), type (type),
|
|
position (x), velocities (v), forces (f), image flags (image), group
|
|
membership (mask). Since all atom styles are a superset of atom style
|
|
*atomic*\ , they all include these attributes.
|
|
|
|
This table lists all the available atom styles, which attributes they
|
|
provide, which :doc:`package <Packages>` is required to use them, and
|
|
what the typical applications are that use them. See the
|
|
:doc:`read_data <read_data>`, :doc:`create_atoms <create_atoms>`, and
|
|
:doc:`set <set>` commands for details on how to set these various
|
|
quantities. More information about many of the styles is provided in
|
|
the Additional Information section below.
|
|
|
|
.. list-table::
|
|
:header-rows: 1
|
|
:widths: 12 28 18 32
|
|
|
|
* - Atom style
|
|
- Attributes
|
|
- Required package
|
|
- Applications
|
|
* - *amoeba*
|
|
- *full* + "1-5 special neighbor data"
|
|
- :ref:`AMOEBA <PKG-AMOEBA>`
|
|
- AMOEBA/HIPPO force fields
|
|
* - *angle*
|
|
- *bond* + "angle data"
|
|
- :ref:`MOLECULE <PKG-MOLECULE>`
|
|
- bead-spring polymers with stiffness
|
|
* - *atomic*
|
|
- tag, type, x, v, f, image, mask
|
|
-
|
|
- atomic liquids, solids, metals
|
|
* - *body*
|
|
- *atomic* + radius, rmass, angmom, torque, body
|
|
- :ref:`BODY <PKG-BODY>`
|
|
- arbitrary bodies, see :doc:`body howto <Howto_body>`
|
|
* - *bond*
|
|
- *atomic* + molecule, nspecial, special + "bond data"
|
|
- :ref:`MOLECULE <PKG-MOLECULE>`
|
|
- bead-spring polymers
|
|
* - *bpm/sphere*
|
|
- *bond* + radius, rmass, omega, torque, quat
|
|
- :ref:`BPM <PKG-BPM>`
|
|
- granular bonded particle models, see :doc:`BPM howto <Howto_bpm>`
|
|
* - *charge*
|
|
- *atomic* + q
|
|
-
|
|
- atomic systems with charges
|
|
* - *dielectric*
|
|
- *full* + mu, area, ed, em, epsilon, curvature, q_scaled
|
|
- :ref:`DIELECTRIC <PKG-DIELECTRIC>`
|
|
- systems with surface polarization
|
|
* - *dipole*
|
|
- *charge* + mu
|
|
- :ref:`DIPOLE <PKG-DIPOLE>`
|
|
- atomic systems with charges and point dipoles
|
|
* - *dpd*
|
|
- *atomic* + rho + "reactive DPD data"
|
|
- :ref:`DPD-REACT <PKG-DPD-REACT>`
|
|
- reactive DPD
|
|
* - *edpd*
|
|
- *atomic* + "eDPD data"
|
|
- :ref:`DPD-MESO <PKG-DPD-MESO>`
|
|
- Energy conservative DPD (eDPD)
|
|
* - *electron*
|
|
- *charge* + espin, eradius, ervel, erforce
|
|
- :ref:`EFF <PKG-EFF>`
|
|
- Electron force field systems
|
|
* - *ellipsoid*
|
|
- *atomic* + rmass, angmom, torque, ellipsoid
|
|
-
|
|
- aspherical particles
|
|
* - *full*
|
|
- *molecular* + q
|
|
- :ref:`MOLECULE <PKG-MOLECULE>`
|
|
- molecular force fields
|
|
* - *line*
|
|
- *atomic* + molecule, radius, rmass, omega, torque, line
|
|
-
|
|
- 2-d rigid body particles
|
|
* - *mdpd*
|
|
- *atomic* + rho, drho, vest
|
|
- :ref:`DPD-MESO <PKG-DPD-MESO>`
|
|
- Many-body DPD (mDPD)
|
|
* - *molecular*
|
|
- *angle* + "dihedral and improper data"
|
|
- :ref:`MOLECULE <PKG-MOLECULE>`
|
|
- apolar and uncharged molecules
|
|
* - *oxdna*
|
|
- *atomic* + id5p
|
|
- :ref:`CG-DNA <PKG-CG-DNA>`
|
|
- coarse-grained DNA and RNA models
|
|
* - *peri*
|
|
- *atomic* + rmass, vfrac, s0, x0
|
|
- :ref:`PERI <PKG-PERI>`
|
|
- mesoscopic Peridynamics models
|
|
* - *smd*
|
|
- *atomic* + molecule, radius, rmass + "smd data"
|
|
- :ref:`MACHDYN <PKG-MACHDYN>`
|
|
- Smooth Mach Dynamics models
|
|
* - *rheo*
|
|
- *atomic* + rho, status
|
|
- :ref:`RHEO <PKG-RHEO>`
|
|
- solid and fluid RHEO particles
|
|
* - *rheo/thermal*
|
|
- *atomic* + rho, status, energy, temperature
|
|
- :ref:`RHEO <PKG-RHEO>`
|
|
- RHEO particles with temperature
|
|
* - *sph*
|
|
- *atomic* + "sph data"
|
|
- :ref:`SPH <PKG-SPH>`
|
|
- Smoothed particle hydrodynamics models
|
|
* - *sphere*
|
|
- *atomic* + radius, rmass, omega, torque
|
|
-
|
|
- finite size spherical particles, e.g. granular models
|
|
* - *spin*
|
|
- *atomic* + "magnetic moment data"
|
|
- :ref:`SPIN <PKG-SPIN>`
|
|
- magnetic particles
|
|
* - *tdpd*
|
|
- *atomic* + cc, cc_flux, vest
|
|
- :ref:`DPD-MESO <PKG-DPD-MESO>`
|
|
- Transport DPD (tDPD)
|
|
* - *template*
|
|
- *atomic* + molecule, molindex, molatom
|
|
- :ref:`MOLECULE <PKG-MOLECULE>`
|
|
- molecular systems where attributes are taken from :doc:`molecule files <molecule>`
|
|
* - *tri*
|
|
- *sphere* + molecule, angmom, tri
|
|
-
|
|
- 3-d triangulated rigid body LJ particles
|
|
* - *wavepacket*
|
|
- *charge* + "wavepacket data"
|
|
- :ref:`AWPMD <PKG-AWPMD>`
|
|
- Antisymmetrized wave packet MD
|
|
|
|
.. note::
|
|
|
|
It is possible to add some attributes, such as a molecule ID and
|
|
charge, to atom styles that do not have them built in using the
|
|
:doc:`fix property/atom <fix_property_atom>` command. This command
|
|
also allows new custom-named attributes consisting of extra integer
|
|
or floating-point values or vectors to be added to atoms. See the
|
|
:doc:`fix property/atom <fix_property_atom>` page for examples of
|
|
cases where this is useful and details on how to initialize,
|
|
access, and output these custom values.
|
|
|
|
----------
|
|
|
|
Particle size and mass
|
|
""""""""""""""""""""""
|
|
|
|
All of the atom styles define point particles unless they (1) define
|
|
finite-size spherical particles via the *radius* attribute, or (2)
|
|
define finite-size aspherical particles (e.g. the *body*, *ellipsoid*,
|
|
*line*, and *tri* styles). Most of these styles can also be used with
|
|
mixtures of point and finite-size particles.
|
|
|
|
Note that the *radius* property may need to be provided as a
|
|
*diameter* (e.g. in :doc:`molecule files <molecule>` or :doc:`data
|
|
files <read_data>`). See the :doc:`Howto spherical <Howto_spherical>`
|
|
page for an overview of using finite-size spherical and aspherical
|
|
particle models with LAMMPS.
|
|
|
|
Unless an atom style defines the per-atom *rmass* attribute, particle
|
|
masses are defined on a per-type basis, using the :doc:`mass <mass>`
|
|
command. This means each particle's mass is indexed by its atom
|
|
*type*.
|
|
|
|
A few styles define the per-atom *rmass* attribute which can also be
|
|
added using the :doc:`fix property/atom <fix_property_atom>` command.
|
|
In this case each particle stores its own mass. Atom styles that have
|
|
a per-atom rmass may define it indirectly through setting particle
|
|
diameter and density on a per-particle basis. If both per-type mass
|
|
and per-atom *rmass* are defined (e.g. in a hybrid style), the
|
|
per-atom mass will take precedence in any operation which which works
|
|
with both flavors of mass.
|
|
|
|
----------
|
|
|
|
Additional information about specific atom styles
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
For the *body* style, the particles are arbitrary bodies with internal
|
|
attributes defined by the "style" of the bodies, which is specified by
|
|
the *bstyle* argument. Body particles can represent complex entities,
|
|
such as surface meshes of discrete points, collections of
|
|
sub-particles, deformable objects, etc.
|
|
|
|
The :doc:`Howto body <Howto_body>` page describes the body styles
|
|
LAMMPS currently supports, and provides more details as to the kind of
|
|
body particles they represent. For all styles, each body particle
|
|
stores moments of inertia and a quaternion 4-vector, so that its
|
|
orientation and position can be time integrated due to forces and
|
|
torques.
|
|
|
|
Note that there may be additional arguments required along with the
|
|
*bstyle* specification, in the atom_style body command. These
|
|
arguments are described on the :doc:`Howto body <Howto_body>` doc page.
|
|
|
|
For the *dielectric* style, each particle can be either a physical
|
|
particle (e.g. an ion), or an interface particle representing a
|
|
boundary element between two regions of different dielectric
|
|
constant. For interface particles, in addition to the properties
|
|
associated with atom_style full, each particle also should be assigned
|
|
a unit dipole vector (mu) representing the direction of the induced
|
|
dipole moment at each interface particle, an area (area/patch), the
|
|
difference and mean of the dielectric constants of two sides of the
|
|
interface along the direction of the normal vector (ed and em), the
|
|
local dielectric constant at the boundary element (epsilon), and a
|
|
mean local curvature (curv). Physical particles must be assigned
|
|
these values, as well, but only their local dielectric constants will
|
|
be used; see documentation for associated :doc:`pair styles
|
|
<pair_dielectric>` and :doc:`fixes <fix_polarize>`. The distinction
|
|
between the physical and interface particles is only meaningful when
|
|
:doc:`fix polarize <fix_polarize>` commands are applied to the
|
|
interface particles. This style is part of the DIELECTRIC package.
|
|
|
|
For the *dipole* style, a point dipole vector mu is defined for each
|
|
point particle. Note that if you wish the particles to be finite-size
|
|
spheres as in a Stockmayer potential for a dipolar fluid, so that the
|
|
particles can rotate due to dipole-dipole interactions, then you need
|
|
to use the command `atom_style hybrid sphere dipole`, which will
|
|
assign both a diameter and dipole moment to each particle. This also
|
|
requires using an integrator with a "/sphere" suffix like :doc:`fix
|
|
nve/sphere <fix_nve_sphere>` or :doc:`fix nvt/sphere <fix_nvt_sphere>`
|
|
and the "update dipole" or "update dlm" parameters to the fix
|
|
commands.
|
|
|
|
The *dpd* style is for reactive dissipative particle dynamics (DPD)
|
|
particles. Note that it is part of the DPD-REACT package, and is not
|
|
required for use with the :doc:`pair_style dpd or dpd/stat <pair_dpd>`
|
|
commands, which only require the attributes from atom_style *atomic*.
|
|
Atom_style *dpd* extends DPD particle properties with internal
|
|
temperature (dpdTheta), internal conductive energy (uCond), internal
|
|
mechanical energy (uMech), and internal chemical energy (uChem).
|
|
|
|
The *edpd* style is for energy-conserving dissipative particle
|
|
dynamics (eDPD) particles which store a temperature (edpd_temp), and
|
|
heat capacity (edpd_cv).
|
|
|
|
For the *electron* style, the particles representing electrons are 3d
|
|
Gaussians with a specified position and bandwidth or uncertainty in
|
|
position, which is represented by the eradius = electron size.
|
|
|
|
For the *ellipsoid* style, particles can be ellipsoids which each
|
|
stores a shape vector with the 3 diameters of the ellipsoid and a
|
|
quaternion 4-vector with its orientation. Each particle stores a flag
|
|
in the ellipsoid vector which indicates whether it is an ellipsoid (1)
|
|
or a point particle (0).
|
|
|
|
For the *line* style, particles can be are idealized line segments
|
|
which store a per-particle mass and length and orientation (i.e. the
|
|
end points of the line segment). Each particle stores a flag in the
|
|
line vector which indicates whether it is a line segment (1) or a
|
|
point particle (0).
|
|
|
|
The *mdpd* style is for many-body dissipative particle dynamics (mDPD)
|
|
particles which store a density (rho) for considering density-dependent
|
|
many-body interactions.
|
|
|
|
The *oxdna* style is for coarse-grained nucleotides and stores the
|
|
3'-to-5' polarity of the nucleotide strand, which is set through
|
|
the bond topology in the data file. The first (second) atom in a
|
|
bond definition is understood to point towards the 3'-end (5'-end)
|
|
of the strand.
|
|
|
|
For the *peri* style, the particles are spherical and each stores a
|
|
per-particle mass and volume.
|
|
|
|
The *smd* style is for Smooth Particle Mach dynamics. Both fluids and
|
|
solids can be modeled. Particles store the mass and volume of an
|
|
integration point, a kernel diameter used for calculating the field
|
|
variables (e.g. stress and deformation) and a contact radius for
|
|
calculating repulsive forces which prevent individual physical bodies
|
|
from penetrating each other.
|
|
|
|
The *sph* style is for smoothed particle hydrodynamics (SPH) particles
|
|
which store a density (rho), energy (esph), and heat capacity (cv).
|
|
|
|
For the *spin* style, a magnetic spin is associated with each atom.
|
|
Those spins have a norm (their magnetic moment) and a direction.
|
|
|
|
The *tdpd* style is for transport dissipative particle dynamics (tDPD)
|
|
particles which store a set of chemical concentration. An integer
|
|
"cc_species" is required to specify the number of chemical species
|
|
involved in a tDPD system.
|
|
|
|
The *wavepacket* style is similar to the *electron* style, but the
|
|
electrons may consist of several Gaussian wave packets, summed up with
|
|
coefficients cs= (cs_re,cs_im). Each of the wave packets is treated
|
|
as a separate particle in LAMMPS, wave packets belonging to the same
|
|
electron must have identical *etag* values.
|
|
|
|
The *sphere* and *bpm/sphere* styles allow particles to be either point
|
|
particles or finite-size particles. If the *radius* attribute is >
|
|
0.0, the particle is a finite-size sphere. If the diameter = 0.0, it
|
|
is a point particle. Note that by using the *disc* keyword with the
|
|
:doc:`fix nve/sphere <fix_nve_sphere>`, :doc:`fix nvt/sphere
|
|
<fix_nvt_sphere>`, :doc:`fix nph/sphere <fix_nph_sphere>`, :doc:`fix
|
|
npt/sphere <fix_npt_sphere>` commands for the *sphere* style, spheres
|
|
can be effectively treated as 2d discs for a 2d simulation if desired.
|
|
See also the :doc:`set density/disc <set>` command. These styles also
|
|
take an optional 0 or 1 argument. A value of 0 means the radius of
|
|
each sphere is constant for the duration of the simulation (this is
|
|
the default). A value of 1 means the radii may vary dynamically
|
|
during the simulation, e.g. due to use of the :doc:`fix adapt
|
|
<fix_adapt>` command.
|
|
|
|
The *template* style allows molecular topology (bonds,angles,etc) to be
|
|
defined via a molecule template using the :doc:`molecule <molecule>`
|
|
command. The template stores one or more molecules with a single copy
|
|
of the topology info (bonds,angles,etc) of each. Individual atoms only
|
|
store a template index and template atom to identify which molecule and
|
|
which atom-within-the-molecule they represent. Using the *template*
|
|
style instead of the *bond*, *angle*, *molecular* styles can save memory
|
|
for systems comprised of a large number of small molecules, all of a
|
|
single type (or small number of types). See the paper by Grime and
|
|
Voth, in :ref:`(Grime) <Grime>`, for examples of how this can be
|
|
advantageous for large-scale coarse-grained systems. The
|
|
``examples/template`` directory has a few demo inputs and examples
|
|
showing the use of the *template* atom style versus *molecular*.
|
|
|
|
.. note::
|
|
|
|
When using the *template* style with a :doc:`molecule template
|
|
<molecule>` that contains multiple molecules, you should ensure the
|
|
atom types, bond types, angle_types, etc in all the molecules are
|
|
consistent. E.g. if one molecule represents H2O and another CO2,
|
|
then you probably do not want each molecule file to define two atom
|
|
types and a single bond type, because they will conflict with each
|
|
other when a mixture system of H2O and CO2 molecules is defined,
|
|
e.g. by the :doc:`read_data <read_data>` command. Rather the H2O
|
|
molecule should define atom types 1 and 2, and bond type 1. And
|
|
the CO2 molecule should define atom types 3 and 4 (or atom types 3
|
|
and 2 if a single oxygen type is desired), and bond type 2.
|
|
|
|
For the *tri* style, particles can be planar triangles which each
|
|
stores a per-particle mass and size and orientation (i.e. the corner
|
|
points of the triangle). Each particle stores a flag in the tri
|
|
vector which indicates whether it is a triangle (1) or a point
|
|
particle (0).
|
|
|
|
----------
|
|
|
|
Typically, simulations require only a single (non-hybrid) atom style.
|
|
If some atoms in the simulation do not have all the properties defined
|
|
by a particular style, use the simplest style that defines all the
|
|
needed properties by any atom. For example, if some atoms in a
|
|
simulation are charged, but others are not, use the *charge* style.
|
|
If some atoms have bonds, but others do not, use the *bond* style.
|
|
|
|
The only scenario where the *hybrid* style is needed is if there is no
|
|
single style which defines all needed properties of all atoms. For
|
|
example, as mentioned above, if you want dipolar particles which will
|
|
rotate due to torque, you need to use "atom_style hybrid sphere
|
|
dipole". When a hybrid style is used, atoms store and communicate the
|
|
union of all quantities implied by the individual styles.
|
|
|
|
When using the *hybrid* style, you cannot combine the *template* style
|
|
with another molecular style that stores bond, angle, etc info on a
|
|
per-atom basis.
|
|
|
|
LAMMPS can be extended with new atom styles as well as new body styles;
|
|
see the corresponding manual page on :doc:`modifying & extending LAMMPS
|
|
<Modify_atom>`.
|
|
|
|
----------
|
|
|
|
.. include:: accel_styles.rst
|
|
|
|
----------
|
|
|
|
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.
|
|
|
|
Many of the styles listed above are only enabled if LAMMPS was built
|
|
with a specific package, as listed below. See the :doc:`Build package
|
|
<Build_package>` page for more info. The table above lists which package
|
|
is required for individual atom styles.
|
|
|
|
Related commands
|
|
""""""""""""""""
|
|
|
|
:doc:`read_data <read_data>`, :doc:`pair_style <pair_style>`,
|
|
:doc:`fix property/atom <fix_property_atom>`, :doc:`set <set>`
|
|
|
|
Default
|
|
"""""""
|
|
|
|
The default atom style is *atomic*. If atom_style *sphere* or
|
|
*bpm/sphere* is used, its default argument is 0.
|
|
|
|
----------
|
|
|
|
.. _Grime:
|
|
|
|
**(Grime)** Grime and Voth, to appear in J Chem Theory & Computation
|
|
(2014).
|