[lammps-users] bond-swapping

I saw on the 8/22 patch that Monte Carlo bond swapping will be added soon. Will this be the algorithm for equilibrating long-chain polymers and brushes that was in the FORTRAN LAMMPS, or something similar? That would be great!

I want to write a Monte Carlo routines for forming and breaking bonds between the ends of bead-spring chains. Looking at bond_quartic.cpp, it seems that when a bond is broken, it is not deleted, but rather set to type 0. Now, suppose you wanted to reform the bond - would you just reset it to type 1? (assuming the normal bonds are type 1)

What I have in mind, as a way to avoid messing with the bond list that is created during startup, is to list all pairs of ends as bonded in my initial configuration file, but have all these bonds initially set to type 0. Then, when a pair of chains ends passes close to one another, "activate" the interactions for that bond (if it is favorable in a Monte Carlo sense) by switching it to type 1, which will be a FENE bond, offset so that U_bind = -1 (or something of order kT). Then, keep the bond intact until it is favorable in a Monte Carlo sense to break it, at which point switch it back to type zero. This could be repeated arbirarily many times.

Then after each breaking or formation I would have to either do this or the reverse of this, respectively:

     if (rsq > rc[type]*rc[type]) {
// IF criterion would have to be suitably modified
       bondlist[n][2] = 0;
       for (m = 0; m < atom->num_bond[i1]; m++)
         if (atom->bond_atom[i1][m] == atom->tag[i2])
           atom->bond_type[i1][m] = 0;
// change "0" to "1" if forming bond?
       if (i2 < atom->nlocal)
         for (m = 0; m < atom->num_bond[i2]; m++)
           if (atom->bond_atom[i2][m] == atom->tag[i1])
             atom->bond_type[i2][m] = 0;

Am I on the right track? Any advice or pitfalls, in particular for multiprocessor runs? I know interior bonds on chains would have to be type 2 or something so they would not be involved.


Rob - yes the bond swapping will be like the MC option
written for the older Fortran LAMMPS.

Re: adding/deleting bonds at chain ends, what you
propose should work. You need someway to prevent
mlutiple bonds from forming (unless you want that).
Also if you have N chains, you are adding 4N^2 bonds or
something like that, so it might not scale to large systems.


Hi. As you suggested, what I proposed scales badly with the number of chains (Nchain). The maximum # of 1-2 neighbors per atom scales with Nchain. This may be manageable or it may not. A more immediate problem, however, is that the maximum # of 1-3 neighbors per atom ~ Nchain^2. This is because an atom of chain A can connect as a 1-3 neighbor to an atom any other chain C through any third chain B, where both B and C can take on any value from 1 to Nchain. Similarly the maximum # of 1-4 neighbors per atom ~ Nchain^3. This very quickly leads to memory overflows. However, I don't need angular or dihedral interactions. Is there an easy way to disable the 1-3 and 1-4 neighbor lists? I'm using atom_style bond, so LAMMPS shouldn't be doing anything with them.


Quoting Steve Plimpton <[email protected]>:

LAMMPS uses the 1-3 and 1-4 lists for excluding pairwise
interactions, not for angles, dihedrals. If your settings
for 1-3 and 1-4 are 1.0 via the special_bonds command
then LAMMPS doesn't compute the lists (line 221 of special.cpp)