I wanted to put in a request for neighbor list
calculations being added to the potential energy
calculations. For larger systems these are critical;
I've unfortunately had to cut towhee usage tremendously
because for bigger polymer systems it just runs
prohibitively
slowly.
I know that you are concerned that neighbor list
rebuilds would occur too often. One possible solution
would be to construct the neighbor list such that if
one molecule makes a drastic move, e.g. rebuilt in a
different part of the box, all of its new neighbors
could have their portion of the list updated w/o doing
an entire rebuild. This may take a little more
bookkeepping and a little more space "per atom" within
the neighbor list, but the increases in simulation time
may be tremendous. (If each atom has 100 neighbors out
of 2000 in the system, then you'd prevent 1900/2000 of
the pairwise distance calculations, for each atom in
each move!)
Idea submitted to Marcus Martin by Michael Greenfield
Logged In: YES
user_id=1008768
Another option would be to use a link list instead of neighbor
list. Building a link-cell list (assigning each site to a cubic
sub-cell of the simulation box) is an order-N process
compared to N^2 for the neighbor list. Typically, a link list is
used to make building a neighbor list more efficient (you only
have to look for neighbors in adjacent cells).
In this case, even if a neighbor list isn't efficient because it
has to be rebuilt too frequently (due to the nature of the MC
algorithm), you could still use a link list to make your force
calculation more efficient. When a molecule moves, you first
bin its sites into their new link cells before doing the force
calculation.
For example, this reference has example link-cell code from
DL_POLY:
K. Kholmurodov, W. Smith, K. Yasuoka and T. Ebisuzaki. "A
highly vectorised "link-cell" FORTRAN code for the DL_POLY
molecular dynamics simulation package." Comput. Phys.
Commun., 125, 167-192 (2000).
http://dx.doi.org/10.1016/S0010-4655(99)00485-3
Jonathan
Logged In: YES
user_id=835111
This feature is being implemented into the code by developer
Marcus Martin