LAMMPS WWW Site - LAMMPS Documentation - LAMMPS Mailing List Archives
Re: [lammps-users] Compute center of mass using wrapped coordinates

# Re: [lammps-users] Compute center of mass using wrapped coordinates

 From: Axel Kohlmeyer Date: Fri, 16 Jun 2017 15:12:28 -0400

On Fri, Jun 16, 2017 at 10:39 AM, Pengyu Huang wrote:
Dear LAMMPS developers,

I would like to use the spherical binning to calculate the local density and pressure for a droplet simulation. It will be a droplet with both liquid and vapour phase in a periodic simulation box, but only a very little particles will be presented in the vapour phase. To do the spherical binning, the center of the mass of the droplet would need to be placed at the center. For a large droplet, the center of mass will not be drifted much from the middle, while for a small droplet it would drift a bit from the middle (not too far away). What I found from literature is that the center of mass of the droplet (or entire system, if not many vapor particles) is recentered at every a few timesteps.

I think this can be done in LAMMPS: if I can use the wrapped coordinates to compute the center of mass, and then use "fix recenter", although the recenter is done at every timestep. I did a search through the LAMMPS mailing list, I found Stan asked a similar question before and Steve commented it should be fine to do this for all atoms in a system. (http://lammps.sandia.gov/threads/msg28439.html) I then modified the codes in Group::xcm() as Stan mentioned it. I changed from "cmone[0] += unwrap[0] * massone; ..." to "cmone[0] += x[i][0] * massone; ...", for all three cmone. The thermodynamics results (energy, temperature, etc...) are the same in both original and modified LAMMPS, when no "fix recenter" is applied. When using "fix recenter" to kept the center of mass at the middle, I found the thermodynamics values drifted and diverged after a few thousand steps. I think this should be expected due to the numerical errors of shifting the coordinates.

I want to double check with you to see if the modification I made in LAMMPS are truly valid, just in case I miss something. For example, would the newly computed center of mass affect any important fix functions (fix nvt, npt and etc) in LAMMPS? If this works, it will also provide a bit more information to people who want to do the similar thing in LAMMPS. I would really appreciate it if you can give me some comments.

​your modification to the source code is not recommended. it ​will break quite a few features in LAMMPS that depend on xcm() using unwrapped coordinates. it doesn't make sense either, since using unwrapped coordinates is the only meaningful way to compute the center of mass. with wrapped coordinates you will get unphysical jumps when atoms pass through periodic boundaries. that is clearly not what you want.

if you are using fix recenter you should use the "shift all" option to maintain your droplet at its initial C.O.M position, but recenter *all* atoms.
be careful with this setup and monitor your system, as fix recenter will suppress any total system momentum and its resulting drift, which can lead to incorrectly computed temperatures, and in the worst case to a "flying icecube syndrome". a droplet in vapor system is more susceptible to this than, say, a solid in liquid system.

an alternative would be to use fix spring with the tether option to attach your droplet with a suitably chose force constant to a fixed location in space. this has the disadvantage of adding a (small) arbitrary force, but it does not hide the flying icecube problem (in fact, it makes it less likely to happen).

​axel.​

Regards,
Pengyu

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most