Coordinate Propagators
commit343f224b11b49c1e79ef071735be16916b0596f6
authorPascal Merz <pascal.merz@me.com>
Tue, 9 Jul 2019 04:34:25 +0000 (8 22:34 -0600)
committerMark Abraham <mark.j.abraham@gmail.com>
Tue, 10 Sep 2019 03:22:57 +0000 (10 05:22 +0200)
treefbc0956ea3113730f6931b7531560e08fdb8076f
parent6ad2378a3d694533c9f00f903aee3438372fc832
Coordinate Propagators

This change introduces the propagator element, which, thanks to templating,
can cover the different propagation types used in NVE MD. The combination
of templating, static functions, and having only the inner-most operations in
the static functions allows to have performance comparable to fused update
elements while keeping easily reordable single instructions.

Note that the two velocity update functions are only necessary to allow
exact replication of the legacy do_md code for both md and md-vv. The
parentheses or the lack thereof lead to numerical errors which build up very
rapidly to make the (very strict) integrator comparison test fail. Relaxing this
condition will make getting rid of one of the two variants possible.

An interesting further development would be to unify the OpenMP loops for
coordinate propagation and constraining by using loops over constraint
groups in both cases.

Change-Id: I1a1f66f1efe63c791ef3fe51ce2f99da3367adca
docs/doxygen/lib/modularsimulator.md
src/gromacs/modularsimulator/propagator.cpp [new file with mode: 0644]
src/gromacs/modularsimulator/propagator.h [new file with mode: 0644]