RevCross¶
- class hoomd.md.many_body.RevCross(nlist, default_r_cut=None)¶
Bases:
Triplet
Reversible crosslinker three-body force.
- Parameters:
nlist (hoomd.md.nlist.NeighborList) – Neighbor list
default_r_cut (float) – Default cutoff radius \([\mathrm{length}]\).
RevCross
computes the revcross three-body force on every particle in the simulation state. Despite the fact that the revcross potential accounts for the effects of third bodies, it is actually just a combination of two body potential terms. It can thus use type-pair parameters similar to those of the pair potentials.The RevCross potential has been described in detail in S. Ciarella and W.G. Ellenbroek 2019. It is based on a generalized Lennard-Jones pairwise attraction to form bonds between interacting particles:
\[\begin{split}U_{ij}(r) = \begin{cases} 4 \varepsilon \left[ \left( \dfrac{ \sigma}{r_{ij}} \right)^{2n} - \left( \dfrac{ \sigma}{r_{ij}} \right)^{n} \right] & r < r_\mathrm{cut} \\ 0 & r \ge r_\mathrm{cut} \end{cases}\end{split}\]Then an additional three-body repulsion is evaluated to compensate the bond energies imposing single bond per particle condition:
\[v^{\left( 3b \right)}_{ijk} = \lambda_3 \epsilon \hat{v}^{ \left( 2b \right)}_{ij} \left(\vec{r}_{ij}\right) \cdot \hat{v}^{ \left( 2b \right)}_{ik} \left(\vec{r}_{ik}\right)~,\]where the two body potential is rewritten as:
\[\begin{split}\hat{v}^{ \left( 2b \right)}_{ij}\left(\vec{r}_{ij}\right) = \begin{cases} 1 & r \le r_{min} \\ - \dfrac{v_{ij}\left(\vec{r}_{ij}\right)}{\epsilon} & r > r_{min} \\ \end{cases}\end{split}\]Attention
The RevCross potential models an asymmetric interaction between two different chemical moieties that can form a reversible bond. This requires the definition of (at least) two different types of particles. A reversible bond is only possible between two different species, otherwise \(v^{\left( 3b \right)}_{ijk}\), would prevent any bond. In our example we then set the interactions for types A and B with
rev_c.params[[('A','B'),('A','B')]]
to{"sigma": 0.0, "n": 0, "epsilon": 0, "lambda3": 0}
and the only non-zero energy only between the different types with settingrev_c.params[('A','B')]
to{"sigma":1, "n": 100, "epsilon": 100, "lambda3": 1}
. Notice that the number of the minority species corresponds to the maximum number of bonds.This three-body term also tunes the energy required for a bond swap through the unitless coefficient \(\lambda_3\) . In S. Ciarella and W.G. Ellenbroek 2019 is explained that setting \(\lambda_3=1\) corresponds to no energy requirement to initiate bond swap, while this energy barrier scales roughly as \(\beta \Delta E_\text{sw} =\beta \varepsilon(\lambda_3-1)\).
Note
Choosing \(\lambda<1\) pushes the system to cluster because the three-body term is not enough to compensate the energy of multiple bonds, so it may cause nonphysical situations.
Example:
nl = md.nlist.Cell() bond_swap = md.many_body.RevCross(default_r_cut=1.3,nlist=nl) bond_swap.params[('A', 'A'), ('B', 'B')] = { "sigma":0,"n": 0, "epsilon": 0, "lambda3": 0} # a bond can be made only between A-B and not A-A or B-B bond_swap.params[('A','B')] = { "sigma": 1, "n": 100, "epsilon": 10, "lambda3": 1}
Members inherited from
AutotunedObject
:- property kernel_parameters¶
Kernel parameters.
Read more...
- property is_tuning_complete¶
Check if kernel parameter tuning is complete.
Read more...
- tune_kernel_parameters()¶
Start tuning kernel parameters.
Read more...
Members inherited from
Force
:- additional_energy¶
Additional energy term.
Read more...
- additional_virial¶
Additional virial tensor term \(W_\mathrm{additional}\).
Read more...
- cpu_local_force_arrays¶
Local force arrays on the CPU.
Read more...
- energies¶
Energy contribution \(U_i\) from each particle.
Read more...
- energy¶
The potential energy \(U\) of the system from this force.
Read more...
- forces¶
The force \(\vec{F}_i\) applied to each particle.
Read more...
- gpu_local_force_arrays¶
Local force arrays on the GPU.
Read more...
- torques¶
The torque \(\vec{\tau}_i\) applied to each particle.
Read more...
- virials¶
Virial tensor contribution \(W_i\) from each particle.
Read more...
Members inherited from
Triplet
:- r_cut¶
Cuttoff radius beyond which the energy and force are 0.
Read more...
- nlist¶
Neighbor list used to compute the triplet potential.
Read more...
Members defined in
RevCross
:- params¶
The revcross potential parameters. The dictionary has the following keys:
epsilon
(float
, required) - \(\varepsilon\) \([\mathrm{energy}]\)sigma
(float
, required) - \(\sigma\) \([\mathrm{length}]\)n
(float
, required) - \(n\) \([\mathrm{dimensionless}]\)lambda3
(float
, required) - \(\lambda_3\) \([\mathrm{dimensionless}]\)
Type:
TypeParameter
[tuple
[particle_type
,particle_type
],dict
]