Fix handling of previous virials
commitf3c239f6b1ef2ce62f1b51dec72a32e050fa0ddc
authorMark Abraham <mark.j.abraham@gmail.com>
Thu, 9 Feb 2017 16:58:59 +0000 (9 17:58 +0100)
committerErik Lindahl <erik.lindahl@gmail.com>
Tue, 14 Feb 2017 19:17:36 +0000 (14 20:17 +0100)
tree4b269b1128f51c0d5b582e8edb9d3cff1df1159c
parent48d68b706614fd1dc5c432c0d570f00c7097fbfc
Fix handling of previous virials

These quantities get written to checkpoint files only for the Trotter
pressure-coupling integrators that need them, but they were being
copied in do_md for all Trotter integrators. This meant that an
appending restart of md-vv plus nose-hoover plus no pressure coupling
truncated off a correct edr frame and wrote one with zero virial and
wrong pressure. And in the same case, a no-append restart writes a
duplicate frame that does not agree with the one written before
termination.

Fixed by copying them only when they are useful to copy, so that in
the problem case, the correctly computed post-restart virial is not
wiped with zeroes from state fields that were never read from the
checkpoint. Cases that use the previous-virial values are not
affected.

Refs #1793

Change-Id: I84908122aefbe8658f423eaf4e5bd4ae25a93d24
src/programs/mdrun/md.cpp