Revamp of alchemical WCA decomposition 18/5018/2
authorradakb <brian.radak@gmail.com>
Wed, 13 Mar 2019 19:35:38 +0000 (15:35 -0400)
committerDavid Hardy <dhardy@ks.uiuc.edu>
Mon, 1 Apr 2019 17:39:51 +0000 (12:39 -0500)
commit656f241eac11ac2e60eb617a199273b4d926adad
treed35d510824afccb04affead8f4be292207d9ad4e
parent229af5b048b360670f50726a0ff8fdc3e30e7252
Revamp of alchemical WCA decomposition

The old, undocumented, WCA strategy for LJ interactions is now
completely re-implemented and better integrated. All of the old
keywords are removed as well as all as the redundnant modifications
to electrostatics. The new code is compatible with TI (well, almost,
see below), IDWS, and all switching and LJcorrection schemes. There
re now two new WCA specific keywords:

alchWCA -- boolean for the WCA code path
alchRepLambdaEnd -- new lambda scheduling parameter

The WCA code separates the LJ terms into "repulsive" and
"dispersive" parts. For an exnihilated particle, the repulsion
is now turned on between 0 and alchRepLambdaEnd and the dispersion
is turned on between alchRepLambdaEnd and alchVdwLambdaEnd. By
construction, the LJcorrection and switching options only affect
the alchemical atoms when alchLambda >= alchRepLambdaEnd.

A major change from the old code is that electrostatic scaling is
completely decoupled from the LJ scaling.

Tests over a large set of molecules show that free energies agree
with the conventional soft-core routines, as expected.

TODO:

- There are now a LOT of if/else statements in the alchemical LJ
  routines. Many of these are global booleans and can probably be
  optimized (all combinations of alchWCA, switching, and
  vdwForceSwitching lead to globally different paths).

- Many of the generic inline routines in ComputeNonbondedAlch.h
  could probably be optimized.

- WCA has not historically been used with TI, but there is no
  theoretical limitation here. However, the additional decomposition
  implies TWO derivatives, although these are only both needed at
  alchLambda == alchRepLambdaEnd. This is not correctly implemented
  as is.

Change-Id: Ia3eef1633dc6dd21ffe0101428e2fb219d8037be
src/ComputeNonbondedAlch.h [new file with mode: 0644]
src/ComputeNonbondedBase.h
src/ComputeNonbondedBase2.h
src/ComputeNonbondedFEP.C
src/ComputeNonbondedTI.C
src/ComputeNonbondedUtil.C
src/ComputeNonbondedUtil.h
src/ComputePme.C
src/Controller.C
src/SimParameters.C
src/SimParameters.h