Daniel Russel wrote: >>> while the second is the excluded volume restraint, a loop over all >>> nonbonded pairs. Part of the nonbonded pair generation mechanism >>> excludes bonded particles. > Right, then the interesting question is how to do the non-bonded > particle generation. From what I gather with modeller, the speedups > compared to what I am describing come from using a proximity structure > and caching the list rather than separating the bonded from the > nonbonded computations. When generating the list you have to do a > similar lookup to see if each pair is bonded? Or is there some more > clever way of structuring things?
The separation of bonded from nonbonded interactions isn't an efficiency issue - it's a flexibility issue. Bonded and nonbonded interactions are rather different, so it's more much useful to have them handled by separate restraints; bonded interactions are local high-frequency interactions, while nonbonded are nonlocal and lower frequency. So for example you may want to treat them differently in multi-timescale treatments. Many molecular mechanics packages achieve efficiency gains by simply neglecting the high frequency oscillations of the system, i.e. using constraints such as SHAKE to fix bond lengths and angles rather than using restraints. And in the Modeller world, in most optimizations we calculate bond terms at every step, but either scale or turn off the nonbonded interactions.
Modeller uses the more-or-less standard cell-based nonbonded list generator, which has O(NlogN) performance. Bonded pairs (and any other excluded pairs, such as 1-4 interactions) are excluded from the list using a hash table with a sensibly chosen hash function.
Ben