Optimize alchemical scaling schedule for LJcorrection 61/4961/3
authorradakb <brian.radak@gmail.com>
Tue, 19 Feb 2019 15:27:48 +0000 (10:27 -0500)
committerDavid Hardy <dhardy@ks.uiuc.edu>
Fri, 29 Mar 2019 17:57:31 +0000 (12:57 -0500)
commit8afc58ef3f9e20570844b0ce581e9ac991c4e798
tree75c6dcef61a6a635efe4fe97c193938e8d0ea130
parentd0f87b7ffd966dbfa309500275fdb73e0e4343da
Optimize alchemical scaling schedule for LJcorrection

The long-range Lennard-Jones correction is included and scaled
w/VDW energy during alchemical simulations. This change revises
the coupling schedule when alchVdwLambdaEnd != 0.0 or 1.0.

The old behavior was to compute the full correction at both
alchemical endpoints and then completely decouple one before
recoupling the other - this is extremely dramatic in the rare, but
reasonable, instance that the coupling schedule is not symmetric.
The new behavior always retains the contribution from non-alchemical
atoms and only couples/decouples the "correction" for the alchemical
atoms.

The TI derivatives are now also "cleaned up" so that there are no
spurious components coming from the opposing alchemical endpoint.
For example, previously, there were non-zero contributions in VDW2
that exactly cancelled part of VDW1, even if alchemical group 2 is
empty. The result is the same, but the new code is more intuitive.

Finally, this enables proper all-in-one decomposition of free energies
into VDW and ELECT components for arbitrary values of alchVdwLambdaEnd.
The old schedule could inadvertently contaminate the ELECT portion
with the LJcorrection unless alchVdwLambdaEnd was properly chosen.

Change-Id: I3ae5903434e68fb134fe24952bb35a175f9d0621
src/Controller.C
src/Molecule.C
src/Molecule.h