.. index:: pair_style srp
.. index:: pair_style srp/react

pair_style srp command
======================

pair_style srp/react command
============================
Syntax
""""""

.. code-block:: LAMMPS

   pair_style srp cutoff btype dist keyword value ...
   pair_style srp/react cutoff btype dist react-id keyword value ...

* cutoff = global cutoff for SRP interactions (distance units)
* btype = bond type (numeric, type label, or wildcard) to apply SRP interactions to
* distance = *min* or *mid*
* react-id = id of either fix bond/break or fix bond/create
* zero or more keyword/value pairs may be appended
* keyword = *exclude*

  .. parsed-literal::

       *bptype* value = atom type (numeric or type label) for bond particles
       *exclude* value = *yes* or *no*

Examples
""""""""

.. code-block:: LAMMPS

   pair_style hybrid dpd 1.0 1.0 12345 srp 0.8 1 mid exclude yes
   pair_coeff 1 1 dpd 60.0 4.5 1.0
   pair_coeff 1 2 none
   pair_coeff 2 2 srp 100.0 0.8

   pair_style hybrid dpd 1.0 1.0 12345 srp 0.8 * min exclude yes
   pair_coeff 1 1 dpd 60.0 50 1.0
   pair_coeff 1 2 none
   pair_coeff 2 2 srp 40.0

   fix        create all bond/create   100  1  2  1.0 1 prob  0.2  19852
   pair_style hybrid dpd 1.0 1.0 12345 srp/react 0.8 * min create exclude yes
   pair_coeff 1 1 dpd 60.0 50 1.0
   pair_coeff 1 2 none
   pair_coeff 2 2 srp/react 40.0

   pair_style hybrid srp 0.8 2 mid
   pair_coeff 1 1 none
   pair_coeff 1 2 none
   pair_coeff 2 2 srp 100.0 0.8

   labelmap bond 1 C-C
   pair_style hybrid srp 0.8 C-C mid


Description


Style *srp* computes a soft segmental repulsive potential (SRP) that
acts between pairs of bonds. This potential is useful for preventing
bonds from passing through one another when a soft non-bonded
potential acts between beads in, for example, DPD polymer chains.  An
example input script that uses this command is provided in
examples/PACKAGES/srp.

Bonds of specified type *btype* interact with one another through a
bond-pairwise potential, such that the force on bond *i* due to bond
*j* is as follows

.. math::

   F^{\mathrm{SRP}}_{ij} = C(1-r/r_c)\hat{r}_{ij} \qquad r < r_c

where *r* and :math:`\hat{r}_{ij}` are the distance and unit vector
between the two bonds.  Note that *btype* can be specified as an
asterisk "\*", which case the interaction is applied to all bond types.
The *mid* option computes *r* and :math:`\hat{r}_{ij}` from the midpoint
distance between bonds. The *min* option computes *r* and
:math:`\hat{r}_{ij}` from the minimum distance between bonds. The force
acting on a bond is mapped onto the two bond atoms according to the
lever rule,

.. math::

   F_{i1}^{\mathrm{SRP}} & = F^{\mathrm{SRP}}_{ij}(L) \\
   F_{i2}^{\mathrm{SRP}} & = F^{\mathrm{SRP}}_{ij}(1-L)

where *L* is the normalized distance from the atom to the point of
closest approach of bond *i* and *j*\ . The *mid* option takes *L* as
0.5 for each interaction as described in :ref:`(Sirk) <Sirk2>`.

The following coefficients must be defined via the
:doc:`pair_coeff <pair_coeff>` command as in the examples above, or in
the data file or restart file read by the :doc:`read_data <read_data>`
or :doc:`read_restart <read_restart>` commands:

* *C* (force units)
* :math:`r_c` (distance units)

The last coefficient is optional. If not specified, the global cutoff
is used.

.. note::

   Pair style srp considers each bond of type *btype* to be a
   fictitious "particle" of type *bptype*, where *bptype* is either the
   largest atom type in the system, or the type set by the *bptype* flag.
   Any actual existing particles with this atom type will be deleted at
   the beginning of a run. This means you must specify the number of
   types in your system accordingly; usually to be one larger than what
   would normally be the case, e.g. via the :doc:`create_box <create_box>`
   or by changing the header in your :doc:`data file <read_data>`.  The
   fictitious "bond particles" are inserted at the beginning of the run,
   and serve as placeholders that define the position of the bonds.  This
   allows neighbor lists to be constructed and pairwise interactions to
   be computed in almost the same way as is done for actual particles.
   Because bonds interact only with other bonds, :doc:`pair_style hybrid <pair_hybrid>` should be used to turn off interactions
   between atom type *bptype* and all other types of atoms.  An error
   will be flagged if :doc:`pair_style hybrid <pair_hybrid>` is not used.

.. note::

   If using type labels, the type labels must be defined before calling
   the :doc:`pair_coeff <pair_coeff>` command.

The optional *exclude* keyword determines if forces are computed
between first neighbor (directly connected) bonds.  For a setting of
*no*, first neighbor forces are computed; for *yes* they are not
computed. A setting of *no* cannot be used with the *min* option for
distance calculation because the minimum distance between directly
connected bonds is zero.

Pair style *srp* turns off normalization of thermodynamic properties
by particle number, as if the command :doc:`thermo_modify norm no <thermo_modify>` had been issued.

The pairwise energy associated with style *srp* is shifted to be zero
at the cutoff distance :math:`r_c`.

----------

.. versionadded:: 3Aug2022

Pair style *srp/react* interfaces the pair style *srp* with the
bond breaking and formation mechanisms provided by fix *bond/break*
and fix *bond/create*, respectively. When using this pair style, whenever a
bond breaking (or formation) reaction occurs, the corresponding fictitious
particle is deleted (or inserted) during the same simulation time step as
the reaction. This is useful in the simulation of reactive systems involving
large polymeric molecules :ref:`(Palkar) <Palkar>`  where the segmental repulsive
potential is necessary to minimize topological violations, and also needs to be
turned on and off according to the progress of the reaction.

----------

Mixing, shift, table, tail correction, restart, rRESPA info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

This pair style does not support mixing.

This pair style does not support the :doc:`pair_modify <pair_modify>`
shift option for the energy of the pair interaction. Note that as
discussed above, the energy term is already shifted to be 0.0 at the
cutoff distance :math:`r_c`.

The :doc:`pair_modify <pair_modify>` table option is not relevant for
this pair style.

This pair style does not support the :doc:`pair_modify <pair_modify>`
tail option for adding long-range tail corrections to energy and
pressure.

This pair style writes global and per-atom information to :doc:`binary restart files <restart>`. Pair srp should be used with :doc:`pair_style hybrid <pair_hybrid>`, thus the pair_coeff commands need to be
specified in the input script when reading a restart file.

This pair style can only be used via the *pair* keyword of the
:doc:`run_style respa <run_style>` command.  It does not support the
*inner*, *middle*, *outer* keywords.

----------

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

This pair style is part of the MISC package. It is only enabled
if LAMMPS was built with that package. See the Making LAMMPS section
for more info.

This pair style must be used with :doc:`pair_style hybrid <pair_hybrid>`.

This pair style requires the :doc:`newton <newton>` command to be *on*
for non-bonded interactions.

This pair style is not compatible with :doc:`rigid body integrators <fix_rigid>`

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

:doc:`pair_style hybrid <pair_hybrid>`, :doc:`pair_coeff <pair_coeff>`,
:doc:`pair dpd <pair_dpd>`

Default
"""""""

The default keyword value is exclude = yes.

----------

.. _Sirk2:

**(Sirk)** Sirk TW, Sliozberg YR, Brennan JK, Lisal M, Andzelm JW, J
Chem Phys, 136 (13) 134903, 2012.

.. _Palkar:

**(Palkar)** Palkar V, Kuksenok O, J. Phys. Chem. B, 126 (1), 336-346, 2022
