RevCross

class hoomd.md.many_body.RevCross(nlist, default_r_cut=None)

Bases: Triplet

Reversible crosslinker three-body force.

Parameters:

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:

Uij(r)={4ε[(σrij)2n(σrij)n]r<rcut0rrcutU_{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}

Then an additional three-body repulsion is evaluated to compensate the bond energies imposing single bond per particle condition:

vijk(3b)=λ3ϵv^ij(2b)(rij)v^ik(2b)(rik) ,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:

v^ij(2b)(rij)={1rrminvij(rij)ϵr>rmin\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}

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 vijk(3b)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 setting rev_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 λ3\lambda_3 . In S. Ciarella and W.G. Ellenbroek 2019 is explained that setting λ3=1\lambda_3=1 corresponds to no energy requirement to initiate bond swap, while this energy barrier scales roughly as βΔEsw=βε(λ31)\beta \Delta E_\text{sw} =\beta \varepsilon(\lambda_3-1).

Note

Choosing λ<1\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 WadditionalW_\mathrm{additional}. Read more...

cpu_local_force_arrays

Local force arrays on the CPU. Read more...

energies

Energy contribution UiU_i from each particle. Read more...

energy

The potential energy UU of the system from this force. Read more...

forces

The force Fi\vec{F}_i applied to each particle. Read more...

gpu_local_force_arrays

Local force arrays on the GPU. Read more...

torques

The torque τi\vec{\tau}_i applied to each particle. Read more...

virials

Virial tensor contribution WiW_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 [energy][\mathrm{energy}]

  • sigma (float, required) - σ\sigma [length][\mathrm{length}]

  • n (float, required) - nn [dimensionless][\mathrm{dimensionless}]

  • lambda3 (float, required) - λ3\lambda_3 [dimensionless][\mathrm{dimensionless}]

Type: TypeParameter [tuple [particle_type, particle_type], dict]