I met a problem when running a simple Monte Carlo calculation with the package called JazzForLAMMPS.

In this Monto Carlo step, basically what it does is move the atoms randomly and then let LAMMPS return energy and force. But After a certain Monte Carlo steps some of the atoms are missing even though the boundary conditions are set as p p p, as is shown below.

ERROR: Lost atoms: original 14 current 10 (thermo.cpp:392)

To my knowledge atoms can not be lost now that all boundaries are periodic. I would appreciate if anyone could give any insight.

I met a problem when running a simple Monte Carlo calculation with the
package called JazzForLAMMPS.

In this Monto Carlo step, basically what it does is move the atoms randomly
and then let LAMMPS return energy and force. But After a certain Monte Carlo
steps some of the atoms are missing even though the boundary conditions are
set as p p p, as is shown below.

ERROR: Lost atoms: original 14 current 10 (thermo.cpp:392)

To my knowledge atoms can not be lost now that all boundaries are periodic.

that is not correct. atoms *can* get lost under *any* boundary
condition, if they move too far in a single step.

The Monte Carlo step is very small so I assume it is not what makes the atoms lost.

I have noticed that the center of mass is drifting when doing Monte Carlo steps in the calculation and also the drift gets more noticeable with more Monte Carlo steps. In the current JazzForLAMMPS package we do not trigger reneighboring in LAMMPS. But after having this problem we may add the step to the package.

The Monte Carlo step is very small so I assume it is not what makes the
atoms lost.

I have noticed that the center of mass is drifting when doing Monte Carlo
steps in the calculation and also the drift gets more noticeable with more
Monte Carlo steps. In the current JazzForLAMMPS package we do not trigger
reneighboring in LAMMPS. But after having this problem we may add the step
to the package.

for efficiency reasons, you may want to adopt a similar scheme as
LAMMPS does with the neigh_modify options delay, every and check. this
way, you trigger the reneighboring only after a certain number of
steps and do a check for the maximum displacement since the last
reneigbor every so many steps or just reneighbor only after N steps.

in the simplest case, you would just set those flags accordingly and
then add an interface to Neighbor::decide() or implement something
similar in your python code.