Neigh list - half /half-thread/full

Hi,

What is the full/half and half-thread neigh list flags used in pair_eam_kokkos? Does full mean every atom holds all its neighbors and half - is where if (i,j) are neighbors, it is maintained in neigh list of i or j but not both. what is half thread?

regards,
Naga

a full neighbor list has all pairs listed for both atoms. a half neighbor list is has each pair listed only once (for local atoms, for pair across sub-domain boundaries, the force->newton_pair setting decides). the FULL/HALF/HALFTHREAD settings are KOKKOS specific since KOKKOS styles can be compiled with different settings and also can select neighbor list generation settings at runtime.

axel.

A HALF neighbor list is the same as what regular LAMMPS uses and only works when you have a single OpenMP thread and no GPUs. A HALFTHREAD list uses thread atomics for thread safety to avoid write conflicts in the force array, which is needed on GPUs and when you are using more than 1 OpenMP thread (and not using data duplication, which is the default for OpenMP). A FULL neighbor list duplicates computation to avoid atomics, which can be faster on GPUs.

Stan

Ok, thanks for clarifying Axel and Stan.

regards,
Naga