Creating bonds for different neighbors

Hello,

Let me begin by describing what I’m trying to do. I want to define a different potential for different neighbor “shells” in a lattice - i.e., a different potential between an atom and its first nearest neighbors, second nearest neighbors, 3rd nearest neighbors, etc… Specifically, I’d like just like to define a simple 2 body potential like a harmonic potential between each atom and it’s first 3 neighbor shells. I tried to achieve this using bonds with the following script for a silicon lattice:

Hello,

Let me begin by describing what I'm trying to do. I want to define a
different potential for different neighbor "shells" in a lattice - i.e., a
different potential between an atom and its first nearest neighbors, second
nearest neighbors, 3rd nearest neighbors, etc.. Specifically, I'd like just
like to define a simple 2 body potential like a harmonic potential between
each atom and it's first 3 neighbor shells. I tried to achieve this using
bonds with the following script for a silicon lattice:

[...]

This script doesn't produce any errors for me, but I was wondering if my
logic is correct. As you can see, I used the "create_bonds" command to
create bond types 1,2 and 3 between various cutoffs rmin and rmax
corresponding to the 1st, 2nd and 3rd neighbors. I then define the harmonic
potential between these bonds. Notice how I defined a "dummy" Buckingham
potential with a small cutoff and zero energy parameters - just so I could
use the "create_bonds" command.

I was wondering:

1) Is this script doing what I think it's doing - Is a bond between each
atom and it's 1st, 2nd and 3rd neighbors being defined? (Assuming I got the
rmin and rmax values correct in "create_bonds") I am worried that there are
some intricacies about bonds in LAMMPS that I don't know about.

you can easily debug your script by using the write_data command and
compare the contents of the data file with what you expect.

2) Is there a better way to do this? I don't want to use data files for my
purposes, but it also seems messy defining a negligible Buckingham potential
just so I can create bonds.

first off, you can use pair style zero instead of buckingham, which
was made for cases like yours. you can use a normal cutoff (and skin
distance) with it. it won't do any pairwise computation. with your
approach, the interaction topology will remain constant, i.e. every
atom's neighbors will not change during the run. if that is what you
want, you may be fine. only careful testing and benchmarking can tell.

the obvious alternative way of implementing your model would be
directly as a custom pair style. where you just read in cutoffs and
parameters as pair coeffs (and the global cutoff to make certain, you
have a suitable neighbor list). this model can adapt to changes in the
environment, i.e. if the system is deformed or reconstructs.
with this approach you have to consider how to avoid jumps in energy
and forces, when the list of neighbors of an atom changes or atoms
move from one shell to another.

axel.

Thanks Axel.

Is there a way in LAMMPS to exclude atoms in a pair style under a certain “rmin” cutoff like with create_bonds?

For example, defining a Morse pair style between atoms in different neighbor shells would require that only atoms within a cutoff rmin < Rc < rmax are included.

Is such a thing already implemented?

Drew Rohskopf | Graduate Research Assistant

Atomistic Simulation & Energy Group

Georgia Institute of Technology

(404)403-0313

Thanks Axel.

Is there a way in LAMMPS to exclude atoms in a pair style under a certain
"rmin" cutoff like with create_bonds?

in a custom pair style you can do whatever you want. the only
limitations are your ability to write c++ code and to read/understand
the LAMMPS source code.

For example, defining a Morse pair style between atoms in different neighbor
shells would require that only atoms within a cutoff rmin < Rc < rmax are
included.

Is such a thing already implemented?

yes and no. of course it doesn't exist exactly in the way you
describe, but some of the more complex pair styles have more complex
operations to determine which interactions to apply for atoms
following particular conditions (distance being one of them).

in your custom pair style you'd just loop over all atoms in the
neighbor list and then just compute r for each pair and then compare
against the respective cutoff radii and use the corresponding force
computation parameters.

axel.