No, I'm no clear on what you're trying to do. If J indexes
the neihbors of atom J, then some proc knows those neighbors
and can compute that loop. The accumulated result f(j) can
be communicated to another processor if needed.
Steve
No, I'm no clear on what you're trying to do. If J indexes
the neihbors of atom J, then some proc knows those neighbors
and can compute that loop. The accumulated result f(j) can
be communicated to another processor if needed.
Steve
I will expalin it. If the u is the potential.
Then the interaction force on atomi is from the sum of forces of its neighbors atomj
for (i=0;i<inum;i++)
for(j=0;j<jnum;j++) ///atomj is the neighbor list of i
{
f[i]+=-du/drij/rij
f[j]-=-du/drij/rij
As the potential is a function of the coordination number (coord[i])*f(coord[j])
and coord[i] or coord[j] is the sum of the function of distance of the atom and its neighbors.
so there should be another loop for the derivate of coord[i]/dr
for (k=0;k<jnum;k++) /////k is the neighbor list of i
{
f[i]+=-du/dcoord[i] *dcoord[i]/drik
f[k]-=-du/dcoord[i] *dcoord[i]/drik
}
This should be done also for j because of the coord[j] term
for (l=0;l<lnum;l++) /////l is the neighbor list of l
{
f[j]+=-du/dcoord[j] *dcoord[j/drjl
f[l]-=-du/dcoord[j]*dcoord[j/drjl
}
}
The force acting on atomi and j are different from each other. Now I am using the half neighbor list, so the force acting on atomj must be added. If I turn the newton off and using the full neighbor list, there is the same problem because the force acting on the atomi partly comes from the other pairs jk.
2011/6/6 Steve Plimpton <[email protected]>
I'm not following all this. I'll simply say
that comm->forward() can communicate one
or more quantities from owned atoms to the
ghost atoms of other procs. Comm->reverse()
does the opposite, it communicates ghost atom
values back to the owning atoms, typically
summing the contributions from multiple ghost
images.
I have yet to see a potential where these kernels
are not sufficient to do the needed computations
in parallel, if you break them up in the proper way.
Steve