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 .
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:
Then an additional three-body repulsion is evaluated to compensate the bond energies imposing single bond per particle condition:
where the two body potential is rewritten as:
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 , 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 . In S. Ciarella and W.G. Ellenbroek 2019 is explained that setting corresponds to no energy requirement to initiate bond swap, while this energy barrier scales roughly as .
Note
Choosing 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 .
Read more...
- cpu_local_force_arrays¶
Local force arrays on the CPU.
Read more...
- energies¶
Energy contribution from each particle.
Read more...
- energy¶
The potential energy of the system from this force.
Read more...
- forces¶
The force applied to each particle.
Read more...
- gpu_local_force_arrays¶
Local force arrays on the GPU.
Read more...
- torques¶
The torque applied to each particle.
Read more...
- virials¶
Virial tensor contribution 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
: