150 lines
5.2 KiB
ReStructuredText
150 lines
5.2 KiB
ReStructuredText
.. index:: compute angle/local
|
|
|
|
compute angle/local command
|
|
===========================
|
|
|
|
Syntax
|
|
""""""
|
|
|
|
.. parsed-literal::
|
|
|
|
compute ID group-ID angle/local value1 value2 ... keyword args ...
|
|
|
|
* ID, group-ID are documented in :doc:`compute <compute>` command
|
|
* angle/local = style name of this compute command
|
|
* one or more values may be appended
|
|
* value = *theta* or *eng* or *v_name*
|
|
|
|
.. parsed-literal::
|
|
|
|
*theta* = tabulate angles
|
|
*eng* = tabulate angle energies
|
|
*v_name* = equal-style variable with name (see below)
|
|
|
|
* zero or more keyword/args pairs may be appended
|
|
* keyword = *set*
|
|
|
|
.. parsed-literal::
|
|
|
|
*set* args = theta name
|
|
theta = only currently allowed arg
|
|
name = name of variable to set with theta
|
|
|
|
Examples
|
|
""""""""
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
compute 1 all angle/local theta
|
|
compute 1 all angle/local eng theta
|
|
compute 1 all angle/local theta v_cos set theta t
|
|
|
|
Description
|
|
"""""""""""
|
|
|
|
Define a computation that calculates properties of individual angle
|
|
interactions. The number of datums generated, aggregated across all
|
|
processors, equals the number of angles in the system, modified by the
|
|
group parameter as explained below.
|
|
|
|
The value *theta* is the angle for the 3 atoms in the interaction.
|
|
|
|
The value *eng* is the interaction energy for the angle.
|
|
|
|
The value *v_name* can be used together with the *set* keyword to
|
|
compute a user-specified function of the angle theta. The *name*
|
|
specified for the *v_name* value is the name of an :doc:`equal-style variable <variable>` which should evaluate a formula based on a
|
|
variable which will store the angle theta. This other variable must
|
|
be an :doc:`internal-style variable <variable>` defined in the input
|
|
script; its initial numeric value can be anything. It must be an
|
|
internal-style variable, because this command resets its value
|
|
directly. The *set* keyword is used to identify the name of this
|
|
other variable associated with theta.
|
|
|
|
Note that the value of theta for each angle which stored in the
|
|
internal variable is in radians, not degrees.
|
|
|
|
As an example, these commands can be added to the bench/in.rhodo
|
|
script to compute the cosine and cosine\^2 of every angle in the system
|
|
and output the statistics in various ways:
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
variable t internal 0.0
|
|
variable cos equal cos(v_t)
|
|
variable cossq equal cos(v_t)*cos(v_t)
|
|
|
|
compute 1 all property/local aatom1 aatom2 aatom3 atype
|
|
compute 2 all angle/local eng theta v_cos v_cossq set theta t
|
|
dump 1 all local 100 tmp.dump c_1[*] c_2[*]
|
|
|
|
compute 3 all reduce ave c_2[*]
|
|
thermo_style custom step temp press c_3[*]
|
|
|
|
fix 10 all ave/histo 10 10 100 -1 1 20 c_2[3] mode vector file tmp.histo
|
|
|
|
The :doc:`dump local <dump>` command will output the energy, angle,
|
|
cosine(angle), cosine\^2(angle) for every angle in the system. The
|
|
:doc:`thermo_style <thermo_style>` command will print the average of
|
|
those quantities via the :doc:`compute reduce <compute_reduce>` command
|
|
with thermo output. And the :doc:`fix ave/histo <fix_ave_histo>`
|
|
command will histogram the cosine(angle) values and write them to a
|
|
file.
|
|
|
|
----------
|
|
|
|
The local data stored by this command is generated by looping over all
|
|
the atoms owned on a processor and their angles. An angle will only
|
|
be included if all 3 atoms in the angle are in the specified compute
|
|
group. Any angles that have been broken (see the
|
|
:doc:`angle_style <angle_style>` command) by setting their angle type to
|
|
0 are not included. Angles that have been turned off (see the :doc:`fix shake <fix_shake>` or :doc:`delete_bonds <delete_bonds>` commands) by
|
|
setting their angle type negative are written into the file, but their
|
|
energy will be 0.0.
|
|
|
|
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, angle 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 atype aatom1 aatom2 aatom3
|
|
compute 2 all angle/local theta eng
|
|
dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_1[4] c_2[1] c_2[2]
|
|
|
|
Output info
|
|
"""""""""""
|
|
|
|
This compute calculates a local vector or local array depending on the
|
|
number of values. The length of the vector or number of rows in the
|
|
array is the number of angles. If a single value is specified, a
|
|
local vector is produced. If two or more values are specified, a
|
|
local array is produced where the number of columns = the number of
|
|
values. 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>` doc page for an overview of LAMMPS output
|
|
options.
|
|
|
|
The output for *theta* will be in degrees. The output for *eng* will
|
|
be in energy :doc:`units <units>`.
|
|
|
|
Restrictions
|
|
""""""""""""
|
|
none
|
|
|
|
Related commands
|
|
""""""""""""""""
|
|
|
|
:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
|
|
|
|
Default
|
|
"""""""
|
|
|
|
none
|