194 lines
8.1 KiB
ReStructuredText
194 lines
8.1 KiB
ReStructuredText
.. index:: compute pair/local
|
|
|
|
compute pair/local command
|
|
==========================
|
|
|
|
Syntax
|
|
""""""
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
compute ID group-ID pair/local value1 value2 ... keyword args ...
|
|
|
|
* ID, group-ID are documented in :doc:`compute <compute>` command
|
|
* pair/local = style name of this compute command
|
|
* one or more values may be appended
|
|
* value = *dist* or *dx* or *dy* or *dz* or *eng* or *force* or *fx* or *fy* or *fz* or *p1* or *p2* or ...
|
|
|
|
.. parsed-literal::
|
|
|
|
*dist* = pairwise distance
|
|
*dx*,\ *dy*,\ *dz* = components of pairwise distance
|
|
*eng* = pairwise energy
|
|
*force* = pairwise force
|
|
*fx*,\ *fy*,\ *fz* = components of pairwise force
|
|
*p1*, *p2*, ... = pair style specific quantities for allowed N values
|
|
|
|
* zero or more keyword/arg pairs may be appended
|
|
* keyword = *cutoff*
|
|
|
|
.. parsed-literal::
|
|
|
|
*cutoff* arg = *type* or *radius*
|
|
|
|
Examples
|
|
""""""""
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
compute 1 all pair/local eng
|
|
compute 1 all pair/local dist eng force
|
|
compute 1 all pair/local dist eng fx fy fz
|
|
compute 1 all pair/local dist fx fy fz p1 p2 p3
|
|
|
|
Description
|
|
"""""""""""
|
|
|
|
Define a computation that calculates properties of individual pairwise
|
|
interactions. The number of datums generated, aggregated across all
|
|
processors, equals the number of pairwise interactions in the system.
|
|
|
|
The local data stored by this command is generated by looping over the
|
|
pairwise neighbor list. Info about an individual pairwise interaction
|
|
will only be included if both atoms in the pair are in the specified
|
|
compute group, and if the current pairwise distance is less than the
|
|
force cutoff distance for that interaction, as defined by the
|
|
:doc:`pair_style <pair_style>` and :doc:`pair_coeff <pair_coeff>`
|
|
commands.
|
|
|
|
.. versionchanged:: 12Jun2025
|
|
|
|
The sign of *dx*, *dy*, *dz* is no longer determined by the value of
|
|
their atom-IDs but by their order in the neighbor list to be
|
|
consistent with *fx*, *fy*, and *fz*.
|
|
|
|
The value *dist* is the distance between the pair of atoms. The values
|
|
*dx*, *dy*, and *dz* are the :math:`(x,y,z)` components of the distance
|
|
vector :math:`\vec{x_i} - \vec{x_j}` between the pair of atoms. The
|
|
order of the atoms is determined by the neighbor list and the respective
|
|
atom-IDs can be output with :doc:`compute property/local
|
|
<compute_property_local>`.
|
|
|
|
The value *eng* is the interaction energy for the pair of atoms.
|
|
|
|
The value *force* is the force acting between the pair of atoms, which
|
|
is positive for a repulsive force and negative for an attractive
|
|
force.
|
|
|
|
The values *fx*, *fy*, and *fz* are the :math:`(x,y,z)` components of
|
|
the force vector on the first atom *i* of a pair in the neighbor list
|
|
due to the second atom *j*. Mathematically, they are obtained by
|
|
multiplying the value of *force* from above with a unit vector created
|
|
from the *dx*, *dy*, and *dz* components of the distance vector also
|
|
described above. For pair styles that apply non-central forces, such as
|
|
:doc:`granular pair styles <pair_gran>`, these values only include the
|
|
:math:`(x,y,z)` components of the normal force component.
|
|
|
|
A pair style may define additional pairwise quantities which can be
|
|
accessed as *p1* to *pN*, where :math:`N` is defined by the pair style.
|
|
Most pair styles do not define any additional quantities, so :math:`N = 0`.
|
|
An example of ones that do are the :doc:`granular pair styles <pair_gran>`
|
|
which calculate the tangential force between two particles and return
|
|
its components and magnitude acting on atom :math:`I` for
|
|
:math:`N \in \{1,2,3,4\}`. See individual pair styles for details.
|
|
|
|
When using *pN* with pair style *hybrid*, the output will be the Nth
|
|
quantity from the sub-style that computes the pairwise interaction
|
|
(based on atom types). If that sub-style does not define a *pN*,
|
|
the output will be 0.0. The maximum allowed :math:`N` is the maximum number
|
|
of quantities provided by any sub-style.
|
|
|
|
When using *pN* with pair style *hybrid/overlay* the quantities
|
|
from all sub-styles that provide them are concatenated together
|
|
into one long list. For example, if there are 3 sub-styles and
|
|
2 of them have additional output (with 3 and 4 quantities,
|
|
respectively), then 7 values (\ *p1* up to *p7*\ ) are defined.
|
|
The values *p1* to *p3* refer to quantities defined by the first
|
|
of the two sub-styles. Values *p4* to *p7* refer to quantities
|
|
from the second of the two sub-styles. If the referenced *pN*
|
|
is not computed for the specific pairwise interaction (based on
|
|
atom types), then the output will be 0.0.
|
|
|
|
The value *dist*, *dx*, *dy* and *dz* will be in distance :doc:`units <units>`.
|
|
The value *eng* will be in energy :doc:`units <units>`.
|
|
The values *force*, *fx*, *fy*, and *fz* will be in force :doc:`units <units>`.
|
|
The values *pN* will be in whatever units the pair style defines.
|
|
|
|
The optional *cutoff* keyword determines how the force cutoff distance
|
|
for an interaction is determined. For the default setting of *type*,
|
|
the pairwise cutoff defined by the :doc:`pair_style <pair_style>`
|
|
command for the types of the two atoms is used. For the *radius*
|
|
setting, the sum of the radii of the two particles is used as a
|
|
cutoff. For example, this is appropriate for granular particles which
|
|
only interact when they are overlapping, as computed by
|
|
:doc:`granular pair styles <pair_gran>`.
|
|
Note that if a granular model defines atom
|
|
types such that all particles of a specific type are monodisperse
|
|
(same diameter), then the two settings are effectively identical.
|
|
|
|
Note that as atoms migrate from processor to processor, there will be
|
|
no consistent ordering of the entries within the local vector or array
|
|
from one timestep to the next. The only consistency that is
|
|
guaranteed is that the ordering on a particular timestep will be the
|
|
same for local vectors or arrays generated by other compute commands.
|
|
For example, pair output from the
|
|
:doc:`compute property/local <compute_property_local>` command can be combined
|
|
with data from this command and output by the :doc:`dump local <dump>`
|
|
command in a consistent way.
|
|
|
|
Here is an example of how to do this:
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
compute 1 all property/local patom1 patom2
|
|
compute 2 all pair/local dist eng force
|
|
dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_2[1] c_2[2] c_2[3]
|
|
|
|
.. note::
|
|
|
|
For pairs, if two atoms I,J are involved in 1--2, 1--3, and 1--4
|
|
interactions within the molecular topology, their pairwise interaction
|
|
may be turned off, and thus they may not appear in the neighbor list,
|
|
and will not be part of the local data created by this command. More
|
|
specifically, this will be true of I,J pairs with a weighting factor
|
|
of 0.0; pairs with a non-zero weighting factor are included. The
|
|
weighting factors for 1--2, 1--3, and 1--4 pairwise interactions are set
|
|
by the :doc:`special_bonds <special_bonds>` command. An exception is if
|
|
long-range Coulombics are being computed via the
|
|
:doc:`kspace_style <kspace_style>` command, then atom pairs with
|
|
weighting factors of zero are still included in the neighbor list, so
|
|
that a portion of the long-range interaction contribution can be
|
|
computed in the pair style. Hence in that case, those atom pairs will
|
|
be part of the local data created by this command.
|
|
|
|
Output info
|
|
"""""""""""
|
|
|
|
This compute calculates a local vector or local array depending on the
|
|
number of keywords. The length of the vector or number of rows in the
|
|
array is the number of pairs. If a single keyword is specified, a
|
|
local vector is produced. If two or more keywords are specified, a
|
|
local array is produced where the number of columns = the number of
|
|
keywords. The vector or array can be accessed by any command that
|
|
uses local values from a compute as input. See the :doc:`Howto output <Howto_output>` page for an overview of LAMMPS output
|
|
options.
|
|
|
|
The output for *dist* will be in distance :doc:`units <units>`. The
|
|
output for *eng* will be in energy :doc:`units <units>`. The output for
|
|
*force*, *fx*, *fy*, and *fz* will be in force :doc:`units <units>`.
|
|
The output for *pN* will be in whatever units the pair style defines.
|
|
|
|
Restrictions
|
|
""""""""""""
|
|
none
|
|
|
|
Related commands
|
|
""""""""""""""""
|
|
|
|
:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
|
|
|
|
Default
|
|
"""""""
|
|
|
|
The keyword default is cutoff = type.
|