[lammps-users] neighboring atom lists

Hi all;

I’m writing a function that works with EAM potentials, and I’m not quite getting the results I expected so I’m double checking all of my calculations.

I need to iterate over all atom pairs in a simulation, including ghost atoms. I’m currently iterating over the atoms as its done in Pair_EAM.cpp, using list->ilist and list->jlist.

The simulation I’m testing with is much smaller than the cut off radius defined by the EAM potential file (dynamo file). The functionality I was expecting (or at least what I need) is that LAMMPS duplicates the simulation cell creating ghost atoms (I’m not sure that ghost atoms is the correct term) until the distance from the outer most atom to the center is at least the cut off radius as defined by the EAM potential file. I’ve looked at the atom locations in the list->ilist and list->jlist and while it seems like this is how its done, my results seem to imply otherwise.

I’d appreciate any help in verifying my sanity.

BTW I’m only working on a single core with a single process for debugging purposes so I’m not (currently) concerned with non-owned ghost atoms.


LAMMPS does create atom pairs out to the cutoff, via ghost atoms.
If both atoms in the pair are owned by the same proc, then the
pair appears once (either with I or J). If one atom is a ghost, then
it may appear with either owned atom or both, depending on the
newton pair flag setting.


I’m printing out the number of neighbors each atom sees and for some atoms in my simulation this list is incomplete. That is in my structure (with periodic boundary conditions) each atom should see 54 neighbors within its cutoff distance (skin depth=0). However many atoms see far less than this (ranging from 22-45 atom neighbors), these are primarily towards the edges of the simulation. I’ve tried both nsq and bin algorithms and while they produce different lists, neither seem to produce complete lists.


units metal
boundary p p p
atom_style atomic
neighbor 0.0 bin
neigh_modify delay 5

#Create lattice
lattice fcc 4.078
region box block 0 4 0 4 0 4
create_box 1 box
create_atoms 1 box

EAM potentials

pair_style eam/alloy
pair_coeff * * …/…/potentials/Au.lammps.eam Au

fix 1 all nve
compute 1 all elcoeam
thermo 1
fix 2 all ave/time 11 1 11 c_1 mode vector file tempvector
run 10

From the documentation online the default for neighbor list generation is to ‘include all’ but some atoms appear to be missed.


Previously I said this:

If both atoms in the pair are owned by the same proc, then the
pair appears once (either with I or J).

If each atom has 54 physical neighbors (within the cutoff),
then each atom will only list half of them (on average) in
its list.