-
Notifications
You must be signed in to change notification settings - Fork 57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Lambda-ABF implementation for the NAMD interface #649
Conversation
Hi @jhenin , I just read your excellent λ-ABF paper and then found this PR. I can't wait to give it a try. Is there any guide about how to write the Colvars file? |
Hi Haohao, Here is an example input (using HMR):
|
Thank you very much! Just one additional question. I need to use HMR to enable a timestep of 2fs? |
In alchemical simulations, I usually scale down the timestep, because one of the end points has a molecule in gas phase. Depending on the nature of the ligand, you may get stable simulations at larger timesteps. |
Thanks for your clarification! |
bb446e4
to
ad9d897
Compare
a325994
to
b094ab9
Compare
Hi, @jhenin , |
0674e73
to
ec218d0
Compare
Thanks Haohao, I like the idea. |
f580527
to
d76c074
Compare
0e6d067
to
255a566
Compare
255a566
to
0790933
Compare
Save pointer to NAMD Controller in proxy this is necessary for accessing the Controller from threads other than 0 Simplify accelMD call Use alch lambda value from state file Dependencies updates and fixes - distinguish f_cv_gradient and f_cv_apply_force - rename external cvs "driven" - fix bug where error messages were not informative for complex dependency resolution failures Lambda-dynamics improvements - add total_force_current_step feature - follow lambda value from back-end Remove unused variables Enable scriptedColvarforces in ABMD script Allow scripted forces on external param Print unscaled biasing force in MTS
Select correct force bin on a per-colvar basis
So far is was erroneously set to true, but its effects were not fully implemented in ABF.
[update-doc]
removes spurious error messages
Had to force single-thread calculation to work around unreliable results on the singel timestep level
0790933
to
5e37f65
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good overall save for some minor comments.
/// \brief A variable that constrains or follows an external parameter | ||
/// in the back-end (eg. an alchemical coupling parameter for lambda-dynamics) | ||
/// If extended Lagrangian, then we drive the external parameter | ||
/// Otherwise we follow it | ||
/// Can have a single component | ||
f_cv_external, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would be okay with this in a pinch, but ideally I'd like to distinguish it from other "external" objects that are computed in a reproducible way (centers of mass, volumetric maps). Are you using this just to circumvent the check below?
cvm::error("Error: the calculated value of colvar \""+name+
"\":\n"+cvm::to_str(x)+"\n differs greatly from the value "
"last read from the state file:\n"+cvm::to_str(x_restart)+
"\nPossible causes are changes in configuration, "
"wrong state file, or how PBC wrapping is handled.\n",
COLVARS_INPUT_ERROR);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is used in many places in colvar.cpp. Another way to describe this feature is: this colvar is not a function of atom coordinates, it contains a special CVC that is communicated to and from the back-end through a separate mechanism. I'm happy to rename it if you have a better name, but I don't see an alternative to this feature.
src/colvar.cpp
Outdated
|
||
// when total atomic forces are obtained from the previous time step, | ||
// we cannot (currently) have colvar values and projected total forces for the same timestep | ||
// TODO this will need refining for driven alchemical parameters |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What do you mean by "driven alchemical parameters"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Driven" means Colvars is responsible for integrating (driving) the dynamics of this parameter. For the current version of this, see
Line 332 in 5e37f65
if (!is_enabled(f_cv_total_force_current_step)) { |
- move step zero data test from colvarbias.cpp to ABF - properly test for driven external parameter
As fully documented in the Lagardère et al. paper
complements the Tinker-HP implementation, which is maintained on the Tinker-HP repo.
TODO
Update: why are there no regression tests? Because of a synchronization issue in NAMD, where the current alchemical colvar interface is plugged into a "non-urgent" output routine, which causes it to run in a variable order with respect to the Colvars calculation. This causes variations in the instantaneous trajectory, even though it cancels out of the ensemble averages, so the free energies are correct. This causes failures in regression tests, which are by design sensitive to trajectory details. The GPU-resident code path of NAMD is immune from this problem and produces reproducible trajectories: it is therefore the recommended way to use this code in NAMD.