adjust neighbor atoms position before swap atoms

Dear Lammps user,

When use fix atom/swap command to two cations that have different radius, I find the acceptance rate is extremely low. So I want to add a function such that it can modify the distance of neighbor atoms regarding to the selected swap atoms first, and then make the swap attempt.

My current idea is to add some lines in fix_atom_swap::attempt_swap():

  1. after pick i and j, get a neighbor list of i and j
  2. loop the neighbor list, record neighbor atoms that are within the cutoff distance for modification (smaller than force cutoff)
  3. change the neighbor atoms coordinates
  4. if swap not made, restore their original coordinates.

I’m not sure if this is a good way to realize this. Would you provide some suggestions?

Thank you!


Aidan can comment on fix atom/swap. Moving other

atoms is tricky. You might have more success with

fix gcmc (w/out insertions or deletions), which does

more sophisticated MC moves than fix atom/swap.


What you are proposing is some kind of collective move. Implementing it correctly in LAMMPS will not be straightforward. Before investing a lot of time on this ask yourself a few questions:

  1. What is the acceptance rate for the basic swap move? (If it is > 0.001 i.e. 0.1%, that is good enough to do a simulation)
  2. What exactly would the collective move do to the neighbor atoms?
  3. Will it really give you a larger acceptance rate? (Hint: compare probability of getting deltaE<kT from the basic and collective moves)
  4. Will the collective move satisfy microscopic reversibility?

fix gcmc will probably be worse than fix atom/swap for this application.

There are many other ways to eliminate the problem of large size ratios, mostly consisting of breaking the problem up in to a sequence of intermediate steps involving cations of size between the large and small cation.


there is one question that hasn't been asked here: what is the overall
purpose of this?
perhaps there would be an alternate route to achieve the same goal.


Dear Aidan, Axel and Steve,

Thank you so much for all the comments. They are very useful. I’ll research more on other solutions first.