[ase-users] neighborlist: two atoms with distance larger than cutoff identified as neighbors

Chunguang Tang chunguang.tang at anu.edu.au
Mon Dec 14 00:18:52 CET 2020


Many thanks, Ask and Tristan. That's right.

Chunguang

On 13/12/20 2:22 am, Ask Hjorth Larsen wrote:
> Am Sa., 12. Dez. 2020 um 15:19 Uhr schrieb Tristan Maxson via 
> ase-users <ase-users at listserv.fysik.dtu.dk 
> <mailto:ase-users at listserv.fysik.dtu.dk>>:
>
>     There is an additional "skin" parameter which is a flat extra
>     amount that is counted.  I am unsure what the logic of having it
>     exactly is, but it is likely the source of your problem.
>
>     Thank you,
>     Tristan Maxson
>
>
> Indeed it's the skin parameter which ensures that the "neighbour" is 
> found (this is documented behaviour).
>
> The purpose of the skin variable is to avoid rebuilding the neighbor 
> list when atoms move only a little bit -- we tabulate more neighbours 
> than necessary for later performance in typical use cases where atoms 
> move around a bit.
>
> Maybe we should think of adding a more user-friendly interface which 
> does not produce the "fake" neighbours by default.
>
> Best regards
> Ask
>
>
>
>
>
>
>     On Sat, Dec 12, 2020 at 3:50 AM Chunguang Tang via ase-users
>     <ase-users at listserv.fysik.dtu.dk
>     <mailto:ase-users at listserv.fysik.dtu.dk>> wrote:
>
>         Dear ASE developers,
>
>         The below code identifies two atoms with distance of 2.5
>         angstroms as neighbors although I set the cutoff (radius) as 1
>         angstrom. I thought they are neighbors only when their
>         distance =< 2 angstroms. Could you help? Many thanks.
>
>         Chunguang
>
>         ------------------------------------------------
>
>         from ase import Atoms, neighborlist
>         lcell=10
>
>         p=[[0, 0, 0],[2.5, 0, 0]]
>
>         natom=len(p)
>         symbol=['H' for i in range(natom)]
>         atoms=Atoms(symbols=symbol,positions=p,cell=[lcell,lcell,lcell],pbc=True)
>         # two atoms with radius r1 and r2 are defined as neighbors if
>         they overlap. That is, if their distance<r1+r2
>
>         cutoff=[1. for i in range(natom)] #here we assume two points
>         with distance<2 angstrom are connected or neighbors
>         nl=neighborlist.NeighborList(cutoff,self_interaction=False,bothways=True)
>         nl.update(atoms)
>
>         for i in range(natom):
>             indices, offsets = nl.get_neighbors(i) # according ASE,
>         offsets seems to be the vector from atom i to its neighbor
>         atom, but its output is zero.
>             print(indices)
>
>
>         _______________________________________________
>         ase-users mailing list
>         ase-users at listserv.fysik.dtu.dk
>         <mailto:ase-users at listserv.fysik.dtu.dk>
>         https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
>
>     _______________________________________________
>     ase-users mailing list
>     ase-users at listserv.fysik.dtu.dk
>     <mailto:ase-users at listserv.fysik.dtu.dk>
>     https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.fysik.dtu.dk/pipermail/ase-users/attachments/20201214/dfe43219/attachment.html>


More information about the ase-users mailing list