.. index:: compute stress/mop
.. index:: compute stress/mop/profile

compute stress/mop command
==========================

compute stress/mop/profile command
==================================

Syntax
""""""

.. code-block:: LAMMPS

   compute ID group-ID style dir args keywords ...

* ID, group-ID are documented in :doc:`compute <compute>` command
* style = *stress/mop* or *stress/mop/profile*
* dir = *x* or *y* or *z* is the direction normal to the plane
* args = argument specific to the compute style
* keywords = *kin* or *conf* or *total* or *pair* or *bond* or *angle* or *dihedral* (one or more can be specified)

.. parsed-literal::

     *stress/mop* args = pos
       pos = *lower* or *center* or *upper* or coordinate value (distance units) is the position of the plane
     *stress/mop/profile* args = origin delta
       origin = *lower* or *center* or *upper* or coordinate value (distance units) is the position of the first plane
       delta = value (distance units) is the distance between planes

Examples
""""""""

.. code-block:: LAMMPS

   compute 1 all stress/mop x lower total
   compute 1 liquid stress/mop z 0.0 kin conf
   fix 1 all ave/time 10 1000 10000 c_1[*] file mop.time
   fix 1 all ave/time 10 1000 10000 c_1[2] file mop.time

   compute 1 all stress/mop/profile x lower 0.1 total
   compute 1 liquid stress/mop/profile z 0.0 0.25 kin conf
   fix 1 all ave/time 500 20 10000 c_1[*] ave running overwrite file mopp.time mode vector

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

Compute *stress/mop* and compute *stress/mop/profile* define
computations that calculate components of the local stress tensor using
the method of planes :ref:`(Todd) <mop-todd>`.  Specifically in compute
*stress/mop* calculates 3 components are computed in directions *dir*,\
*x*\ ; *dir*,\ *y*\ ; and *dir*,\ *z*\ ; where *dir* is the direction
normal to the plane, while in compute *stress/mop/profile* the profile
of the stress is computed.

Contrary to methods based on histograms of atomic stress (i.e., using
:doc:`compute stress/atom <compute_stress_atom>`), the method of planes
is compatible with mechanical balance in heterogeneous systems and at
interfaces :ref:`(Todd) <mop-todd>`.

The stress tensor is the sum of a kinetic term and a configurational
term, which are given respectively by Eq. (21) and Eq. (16) in
:ref:`(Todd) <mop-todd>`. For the kinetic part, the algorithm considers
that atoms have crossed the plane if their positions at times
:math:`t-\Delta t` and :math:`t` are one on either side of the plane,
and uses the velocity at time :math:`t-\Delta t/2` given by the velocity
Verlet algorithm.

.. versionadded:: 15Jun2023

   contributions from bond, angle and dihedral potentials

Between one and seven keywords can be used to indicate which contributions
to the stress must be computed: total stress (total), kinetic stress
(kin), configurational stress (conf), stress due to bond stretching
(bond), stress due to angle bending (angle), stress due to dihedral terms (dihedral)
and/or due to pairwise non-bonded interactions (pair).

NOTE 1: The configurational stress is computed considering all pairs of
atoms where at least one atom belongs to group group-ID.

NOTE 2: The local stress does not include any Lennard-Jones tail
corrections to the stress added by the :doc:`pair_modify tail yes
<pair_modify>` command, since those are contributions to the global
system pressure.

NOTE 3: The local stress profile generated by compute
*stress/mop/profile* is similar to that obtained by compute
:doc:`stress/cartesian <compute_stress_cartesian>`.
A key difference is that compute *stress/mop/profile*
considers particles crossing a set of planes, while
*stress/cartesian* computes averages for a set
of small volumes.
Moreover, *stress/cartesian* compute computes the diagonal components of the stress
tensor :math:`P_{xx}`, :math:`P_{yy}`, and :math:`P_{zz}`, while
*stress/mop/profile* computes the components
:math:`P_{ix}`, :math:`P_{iy}`, and :math:`P_{iz}`, where :math:`i` is the
direction normal to the plane.

Output info
"""""""""""

Compute *stress/mop* calculates a global vector (indices starting at 1),
with 3 values for each declared keyword (in the order the keywords have
been declared). For each keyword, the stress tensor components are
ordered as follows: stress_dir,x, stress_dir,y, and stress_dir,z.

Compute *stress/mop/profile* instead calculates a global array, with 1
column giving the position of the planes where the stress tensor was
computed, and with 3 columns of values for each declared keyword (in the
order the keywords have been declared). For each keyword, the profiles
of stress tensor components are ordered as follows: stress_dir,x;
stress_dir,y; and stress_dir,z.

The values are in pressure :doc:`units <units>`.

The values produced by this compute can be accessed by various
:doc:`output commands <Howto_output>`.  For instance, the results can be
written to a file using the :doc:`fix ave/time <fix_ave_time>`
command. Please see the example in the examples/PACKAGES/mop folder.

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

These styles are part of the EXTRA-COMPUTE package. They are only
enabled if LAMMPS is built with that package. See the :doc:`Build
package <Build_package>` doc page on for more info.

The method is implemented for orthogonal simulation boxes whose
size does not change in time, and axis-aligned planes.

Contributions from bonds, angles, and dihedrals are not compatible
with MPI parallel runs.

The method only works with two-body pair interactions, because it
requires the class method ``Pair::single()`` to be implemented, which is
not possible for manybody potentials.  In particular, compute
*stress/mop/profile* and *stress/mop* do not work with more than two-body
pair interactions, long range (kspace) interactions and
improper intramolecular interactions.

The impact of fixes that affect the stress (e.g. fix langevin) is
also not included in the stress computed here.

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

:doc:`compute stress/atom <compute_stress_atom>`,
:doc:`compute pressure <compute_pressure>`,
:doc:`compute stress/cartesian <compute_stress_cartesian>`,
:doc:`compute stress/cylinder <compute_stress_curvilinear>`,
:doc:`compute stress/spherical <compute_stress_curvilinear>`

Default
"""""""

none

----------

.. _mop-todd:

**(Todd)** B. D. Todd, Denis J. Evans, and Peter J. Daivis: "Pressure tensor for inhomogeneous fluids",
Phys. Rev. E 52, 1627 (1995).

.. _Ikeshoji3:

**(Ikeshoji)** Ikeshoji, Hafskjold, Furuholt, Mol Sim, 29, 101-109, (2003).
