Task #1793

Updated by Mark Abraham about 5 years ago

The integrator loop has been in need of work for a long time (and it's not just the fault of the velocity-Verlet implementation), which we have been slowly cleaning up (see for just some of those patches).

This should help
* find and fix bugs
* make it reasonable to implement and document old and new integration schemes well (e.g. #1137),
* modularize code (e.g. constraint, integrator, coupling algorithm, non-bonded scheme, and global-summation code should know as little about each other as possible)
* pave the road for future task parallelism at this level (currently every function call gets passed pretty much everything, which means we have no idea what the data dependencies are, and bugs could be anywhere)
* provide optimization opportunities (e.g. with leap-frog, at @nsttcouple-1@ steps we should be able to avoid using a blocking MPI_Allreduce to get the KE for use at the next step, but currently the necessary conditions are unclear)
* avoid pessimizations like #692
make clear where developers of new features should add code