[lammps-users] Ghost-neighbor passing, pbc's and multiple runs

Hi everyone,

I've got a few (hopefully) basic questions about how LAMMPS passes and
communicates information on ghost neighbors. Here goes:

1. When atoms cross periodic boundary conditions, how and where in the code
does LAMMPS recognize this has happened?
2. Where in the code is information on those atoms passed to the processor
on the other side of the pbc (or itself for serial runs)?
3. During what stage of a run-step does this recognition and passing occur?
Does it happen between two (or more) sequential runs, and if so, where?
4. For sequential runs, does reneighboring automatically happen? Or, can it
be made to happen?

My motivation here is that for an atc run, I'm noticing that the reference
positions of some atoms (and I think it's the ghost-neighbor representations
of those atoms near a pbc) are not getting modified and passed the same way
current positions are. We (the user-atc development team) attempted to
ensure this by creating appropriate pre_comm routines, but I'm thinking
they're not getting invoked. Any ideas would help.

Thanks,

Jon Z.

Answers below.

Steve

Hi everyone,

I've got a few (hopefully) basic questions about how LAMMPS passes and
communicates information on ghost neighbors. Here goes:

1. When atoms cross periodic boundary conditions, how and where in the code
does LAMMPS recognize this has happened?

domain->pbc() which is invoked every reneighboring

2. Where in the code is information on those atoms passed to the processor
on the other side of the pbc (or itself for serial runs)?

info for ghost atoms (whether they are on the other side of the box or not)
is communicated every timestep - via the comm calls in the Verlet stepping,
forward() and reverse()

3. During what stage of a run-step does this recognition and passing occur?
Does it happen between two (or more) sequential runs, and if so, where?

see verlet->run() for during a run, see verlet->setup() for before a run

4. For sequential runs, does reneighboring automatically happen? Or, can it
be made to happen?

reneighboring is done before every run in verlet->setup()