The way this is supposed to work is as follows:
a) use neigh list to find closest possible bond partner to each atom
b) reverse communicate to sync this info across procs
steps a,b should work whether newton pair is on or off
result at this point should be that each owned atom has
one atom it wants to bond with (or none)
c) forward comm of who each atom’s bond partner is
so know this for ghost atoms
d) loop over local atoms I to decide if each bond I-J is accepted
J must also want to bond to I for acceptance
if accepted:
update data structs for atom I and atom J
the update of data structs needs to insure the bond
is stored only once if newton bond on, and twice if newton bond off
you proposed code change is in the update data structs section,
which I think breaks the logic for newton bond on vs off
if I understood, you had Gravelle test if with newton bond off,
which doesn’t actually exercise the change in the if test you made
So I think there must be some other issue.
For Gravelle:
how do you know you are getting too many bonds attached
to one trap? Can you detect the first timestep at which
this happens? I.e. a shorter, smaller simulation to debug.
does this problem go away if you don’t do fix bond/break and
fix bond/create together? I’m guessing there might
be some issue with using both together that is confusing
the code.
Steve