12 months agoBug fixes in Monte Carlo functionality 27/4327/4
radakb [Thu, 5 Jul 2018 13:37:21 +0000 (09:37 -0400)]
Bug fixes in Monte Carlo functionality

This update is an unfortunate hodge-podge of changes. A significant
error in the algorithm was discovered while introducing new features and
reorganizing the output code.

1) cphMaxProposalAttempts is an extremely problematic parameter for
  small systems. This keyword is now deprecated and internally assigned
  to be one. Simulations of small systems with non-unit values almost
  certainly yielded incorrect statistics, but the effect is much smaller
  for large systems with uniform weights (the default).

2) Equivalent states were incorrectly accounted for during the inherent
  pKa proposal step (a mistake from the original paper). The pKas are
  now correctly shifted by the log multiplicity to obtain the
  _microscopic_ pKa when moving in the direction of a multiplicity.

  An unrelated error in the code seems to have bizarrely compensated for
  this problem. Namely, the unnormed pairwise weights were taken with
  respect to the current state such that the unnormed weight of the
  current state is exactly one. However, these weights were computed in
  log-space such that the assignment of one was incorrect (it should be
  zero). This meant that all other weights were reduced by a factor of
  1/e in a manner that did not maintain detailed balance in certain
  instances. Since 1/e ~= 1/2 and 1/3, this seems to have semi-corrected
  residues with those multiplicities.

As severe as the second error sounds, tests indicate that the most
significant problems were actually from the first error. Systematic
errors from the latter are actually probably at or below statistical
precision (+/- 1.0 pKa units).

All of these errors were unhelpfully masked by the published WHAM

1) The inherent pKa MC step now precludes transitions between equivalent
  states. This should be more efficient in nearly all instances and was
  a fairly heavily requested feature. The original aim was to be able to
  toggle this behavior on a per residue basis, but this was put on hold
  when bugs starting cropping up.

1) Re-organized archiving the titrator to cphrst so that this is more

2) Added preliminary support for proton transfer and co-titration moves,
  including separate enumeration in the move summary and persistence in
  the restart file. However, in light of the MC errors this
  functionality is now suspect and thus deactivated until it can be

3) Various bug-fixes in the initialization procedure. These were
  probably not encountered by most users and would have lead to crashes.

4) Disable obsolete building of hydrogen coordinates when not restarting
  from a known state. This was introduced for older versions of the
  build procedure and is catastrophic for certain instances such as
  certain primary amines, since "chirality" was occasionally built

Change-Id: If2692eef0110d3ad835090481371a65798fecdf6

12 months agoInitial version of IDWS 67/4267/9
Jérôme Hénin [Fri, 15 Jun 2018 13:55:29 +0000 (15:55 +0200)]
Initial version of IDWS

Interleaved Double-Wide Sampling, based on an idea from Grace Brannigan.
Switches between lambda2 values, eg. every fullElectFrequency steps.
On-the-fly FEP average is calculated using only forward samples.
Use lib/alch/ to get complete forward and backward data.
Also adds the fep.tcl driver script to lib/alch.

Change-Id: I2faffe5acffb0c8bad18573074c082664f79ced4

13 months agoWork around gcc 6.3.0 vectorizer bug on Cray XE/XK systems 87/4287/1
Jim Phillips [Wed, 20 Jun 2018 21:19:02 +0000 (16:19 -0500)]
Work around gcc 6.3.0 vectorizer bug on Cray XE/XK systems

GCC 6.3.0 has a bug when building with -march=bdver1, which
Cray programming environment targets for Opteron on XE/XK machines.
The symptom in NAMD is incorrect pressure values on CPU-only builds.

Change-Id: I3c32bf0c32dce4d7626971707d112a3f2e5c132c

13 months agoAdd support for Charm++'s change to use 64 bit ID for load balancing 45/4245/9
Ronak Buch [Wed, 6 Jun 2018 23:19:18 +0000 (18:19 -0500)]
Add support for Charm++'s change to use 64 bit ID for load balancing

Based on the value of the CMK_LBID_64BIT compile-time variable,
select either the new 64 bit ID or old 4 int LDObjid to use as
the ID for load balancing, and provide accessor to abstract
access to both types.

This is necessary to support the new 64 bit LB ID interface in Charm++
6.9.0. Once NAMD no longer cares about supporting versions of Charm++
older than 6.9.0, this can be removed and the new interface can be used

Change-Id: Ice18a9537b694e8e6174cd8118cbc60d59800fe9

13 months agoRemove unused stores to fields 2 and 3 of the element id 48/4248/4
Ronak Buch [Thu, 7 Jun 2018 22:32:38 +0000 (17:32 -0500)]
Remove unused stores to fields 2 and 3 of the element id

Change-Id: I087563a7a347d47f01db8006866d3194f85cc934

13 months agoFix bug in PDB destructor 63/4263/1
Jim Phillips [Thu, 14 Jun 2018 17:20:57 +0000 (12:20 -0500)]
Fix bug in PDB destructor

Array of pointers sometimes pointed to independently
allocated elements and sometimes to elements of an array.
Destructor would call delete [] if elements were
contiguous in memory, which could happen by coincidence.
Now independently tracks how data was allocated.

Bug reported on Mac by J.C. Gumbart.

Change-Id: I22c6a2c0a37d208913a73b83cd76098afc412778

13 months agoDon't initialize CUDA before fork in Charm++ startup 44/4244/1
Jim Phillips [Wed, 6 Jun 2018 03:47:21 +0000 (22:47 -0500)]
Don't initialize CUDA before fork in Charm++ startup

Change-Id: I0c5377628b1bac2a1bca4f5db9b83167b1c04d8f

13 months agoFix compilation error with gcc 4.4 (update Colvars to 2018-05-29) 38/4238/1
Giacomo Fiorin [Thu, 31 May 2018 14:58:47 +0000 (10:58 -0400)]
Fix compilation error with gcc 4.4 (update Colvars to 2018-05-29)

Change-Id: Ie97a495e06e0697071fd8c0beaf4d108425bbded

14 months agoUpdate Colvars to version 2018-05-15 75/4175/2
Giacomo Fiorin [Tue, 15 May 2018 15:08:31 +0000 (11:08 -0400)]
Update Colvars to version 2018-05-15

Introduces performance enhancements to coordNum and selfCoordNum, in
particular a pairlist feature introduced by Josh Vermaas.

Below are the relevant commits from

8bee345 2018-05-15 Condense computation of value and gradients for coordNum and selfCoordNum [Giacomo Fiorin]
325e1b3 2018-05-15 Fix pairlist loop based on feedback from Josh [Giacomo Fiorin]
6faa836 2018-05-11 Unify coordnum template function, include pairlist check/update in it [Giacomo Fiorin]
13ac4a3 2018-05-10 Added documentation for the tolerance and pairListFrequency options [Josh Vermaas]
7564f23 2018-05-10 New check. Tolerance is MUCH higher than you'd want for real simulation, but it makes the difference clear quickly. Pairlistfrequency 2 means that every other printed value will match exactly with the non-tolerant coordnum [Josh Vermaas]
9394090 2018-05-10 Fixed compiler errors resulting from theorycraft-coding [Josh Vermaas]
020f555 2018-05-10 Incorparated Giacomo's comments. [Josh Vermaas]
1682ea7 2018-05-10 Prototype pairlist implementation [Josh Vermaas]

Change-Id: Ie27a2f59b44b1dfda269410b1745c0ed5ec5f068

14 months agoUpdate/fix incomplete behavior of nonbondedScaling 72/4172/1
radakb [Mon, 14 May 2018 20:27:20 +0000 (16:27 -0400)]
Update/fix incomplete behavior of nonbondedScaling

nonbondedScaling is supposed to permit application of a positive
scalar multiple to all ELECT and VDW terms. Since LJcorrection terms
are part of VDW, these should be also be scaled (also the virial
correction, in analogy to the force).

This is a real edge case "bug," I only realized it when trying to
perform simulated scaling on a box of rigid water, which should be
identical to simulated tempering. Even then the results only differ
appreciably when the effective temperature is >320 K. Needless to
say I'm probably the only person to ever attempt this.


There are probably also missing ELECT terms when using Drude, the
Thole terms in particular. Since those are implemented as a 4-body
bonded term, this should be implemented easily using the "scale"
attribute of the tuple, only I don't know where that is set. Help?

If there are no objections, I would also like to add a
dihedralScaling keyword that serves the same function for (proper)
dihedrals and crossterms (maybe only when mergeCrossTerms is True?)

We could also add an option for a step-dependent update for both of
these keywords, just as we do for alchLamdba via alchLambda2 and
alchLambdaFreq. That would enable simple enhanced sampling
integrators based on nonequilibrium switches. This should offer less
of a challenge than implementing solute scaling switches at the C

Change-Id: I5ea29616da95a517fee56c69a5daa87ed4edbdb7

14 months agoFix config file parameter introspection bug 68/4168/1
Jim Phillips [Fri, 11 May 2018 20:43:28 +0000 (15:43 -0500)]
Fix config file parameter introspection bug

Previous changes to drop Tcl USE_COMPAT_CONST introduced a bug
when trying to read the value of a previously set parameter
before startup.  Fix, and error message improved.

Change-Id: I655bd994cca49b8d680854473dc7b10d7e97f06c

14 months agoAvoid placing extra PME load on first node 47/4147/1
Jim Phillips [Tue, 8 May 2018 20:27:15 +0000 (15:27 -0500)]
Avoid placing extra PME load on first node

At larger PE counts patches are excluded from both PE 0 and PE 1
to avoid slowing down any global integrator bottlenecks.  Since
PME work is preferentially placed on PEs without patches, extra
PME work could be placed on the first node.  This patch treats
PE 1 as having patches for the purpose of assigning PME work.

Change-Id: Ib8eac51d65f5ffe83b60a47ffbc4c97a03f8be54

14 months agoBug-fix for cphrst writing with Constant-pH MD 40/4140/2
radakb [Mon, 7 May 2018 13:47:36 +0000 (09:47 -0400)]
Bug-fix for cphrst writing with Constant-pH MD

It was reported that constant-pH restart files were not being
written with the correct frequency (cphRestartFreq). This was
apparently not well-tested since in most cases it makes sense to
just write restart files when the trajectory completes.

The writing criteria is now corrected.

Change-Id: Id1cfca8f6e87abac90957322f2cfbf325d5cdc9a

14 months agoRequire NAMDJSBLOCKIO environment variable for js block IO 30/4130/2
Jim Phillips [Fri, 4 May 2018 18:54:10 +0000 (13:54 -0500)]
Require NAMDJSBLOCKIO environment variable for js block IO

Updated js plugin causes psfgen to write block aligned js files,
which cannot be read by builds of NAMD and psfgen before today.
With this patch, psfgen will by default write the earlier js file
format (not block aligned) that is still readable by older builds.
The newer block aligned js files are produced only if environment
variable NAMDJSBLOCKIO is set.

Change-Id: Ic27ffdd074e46af0546a13a72329606f8571d6c6

14 months agoUpdate molfile plugin from John 29/4129/1
David [Fri, 4 May 2018 16:50:05 +0000 (11:50 -0500)]
Update molfile plugin from John

The update from John fixes issues with reading JS files, so that NAMD is
not forced to follow the new block alignment conventions.  We will later
want to modify NAMD to improve file reading performance by following the
new conventions, which is especially important for large systems.

Change-Id: I295c2a9b9529a72bf4355c4fd4fdf30f74450f7e

14 months agoFix minor bug with REST2 parameters 11/4111/1
David [Thu, 3 May 2018 00:14:31 +0000 (19:14 -0500)]
Fix minor bug with REST2 parameters

Correctly set range for soluteScalingFactorCharge.

Change-Id: I4126d9f998bde1f1f703ff201480887198ad809c

14 months agoUpdate Colvars to version 2018-04-29 98/4098/1
Giacomo Fiorin [Wed, 2 May 2018 18:51:22 +0000 (14:51 -0400)]
Update Colvars to version 2018-04-29

Fixes two small bugs identified by HanatoK

6d0c917 2018-04-29 Fix missing deallocation of output stream object (reported by HanatoK) [Giacomo Fiorin]
c92d369 2018-04-17 Do not test for atom group size [Jérôme Hénin]

Change-Id: Ice861520c4fc30896ae0c12a61b9cbaf5c70a004

14 months agoREST2 sample 93/3593/6
Wei Jiang [Tue, 30 Jan 2018 21:50:35 +0000 (15:50 -0600)]
REST2 sample

A complete work directory is ready for a full REST2 test.  New user
will get chance to know how to launch REST2 job and how to postprocess
trajectory data.  The 'aaqaa3_rest2_test.namd' config file lists all
necessary keywords and Tcl interface for a single solute tempering.
The 'rest2_remd.namd' is a full REST2 driver, which launches 16
different solute tempering replicas and manages exchanges among them.

Change-Id: I3ba4ef3af546c7afa748d0540c88c900218ffe04

14 months agoREST2 implementation in NAMD 88/3588/10
Wei Jiang [Mon, 29 Jan 2018 18:26:28 +0000 (12:26 -0600)]
REST2 implementation in NAMD

Contributed by Wei Jiang, Jonathan Thirman and Sunhwan Jo. REST2 denotes
second generation Replica Exchange Solute Tempering, where all heated
atoms get scaled charge and van der Waals parameters, as well as dihedral
and, optionally, bond and angle parameters.

The config file parameters are:
  soluteScaling - enable REST2, off by default
  soluteScalingFactor - scaling factor for solute interactions
  soluteScalingFactorCharge - optional factor for electrostatics
  soluteScalingFactorVdw - optional factor for van der Waals
  soluteScalingAll - apply scaling to bonds and angles, on by default
  ssFile - optional PDB for marking solute atoms, defaults to main PDB
  ssCol - optional column from ssFile, defaults to Occupancy column

Parameter soluteScalingFactor is the primary scaling factor for all
solute interactions.  Electrostatics and van der Waals interactions can
also be independently scaled using soluteScalingFactorCharge and
soluteScalingFactorVdw, respectively.

Rather than scaling individual energy and force terms, the rescaling
coefficients can be directly applied to the force field parameters
during the parameter reading and setup phase.  An extended LJ table is
tabulated for the van der Waals interactions, and the charges are scaled
before integration.  Each is updated at the Tcl scripting level, so that
there is no impact to performance during time stepping.

Bonded interaction rescaling is also applied to the force field
parameters rather than the individual interactions.  The scaling is
performed in ComputeHome(Self)Tuples.h, which is then offloaded
correctly to GPU.

However, the van der Waals parameter rescaling for now works correctly
only for CPU.  Testing shows that the CUDA kernels are not receiving the
updated LJ table parameters.

The charge rescaling is working correctly for the short-range non-bonded
CUDA kernels.  However, the electrostatic potential is not rescaling
correctly unless "usePMECUDA off" is specified (testing on one node).

Change-Id: Ic51dc0036310e85a6d6172fa475034f467ca18ab

14 months agoDocumentation for stochastic velocity rescaling 78/4078/3
radakb [Fri, 27 Apr 2018 19:54:40 +0000 (15:54 -0400)]
Documentation for stochastic velocity rescaling

o Add descriptions for the four new keywords.

o Add citation for the Bussi, et al. article.

Change-Id: I5d76a9c1e463693a2be71b6659d5631c64fcbf3d

14 months agoDrop Tcl USE_COMPAT_CONST and use const char* 71/4071/1
Jim Phillips [Fri, 27 Apr 2018 00:30:39 +0000 (19:30 -0500)]
Drop Tcl USE_COMPAT_CONST and use const char*

USE_COMPAT_CONST was for backwards compatibility with Tcl 8.3
and Tcl 8.4 has been out for over a decade.  Most changes are
mechanical, with some const propagation into related code.

Change-Id: Ieec6b339399a572e0732f7f61e4ba7753df1a15e

14 months agoRemove deprecated calls to cufftSetCompatibilityMode 69/4069/1
Ronak Buch [Thu, 26 Apr 2018 19:58:39 +0000 (14:58 -0500)]
Remove deprecated calls to cufftSetCompatibilityMode

Change-Id: I5358a0c6fa09c692e4460d63e969dbef591f3d48

14 months agoRemove unused code 57/4057/2
David [Wed, 25 Apr 2018 15:03:57 +0000 (10:03 -0500)]
Remove unused code

HomePatch has two constructors, one of which takes just the number of
atoms rather than the FullAtomList.  That constructor is called only
from PatchMgr::preCreateHomePatch, which is now never called.

Both methods and their prototypes have been removed.

Change-Id: Id839d68c2c24a7066bc454c41587c8bdd3488c11

14 months agoFinalize stochastic velocity rescaling implementation 49/4049/4
radakb [Tue, 24 Apr 2018 13:09:37 +0000 (09:09 -0400)]
Finalize stochastic velocity rescaling implementation

Here we add additional scripting features and increase robustness
of the stochastic velocity rescaling implementation. More doxygen
style comments are also added.

o stochRescaleFreq is no longer a required option and instead
  defaults to the steps per cycle frequency (default 20). This is
  in line with the default behavior in GROMACS.

o stochRescale and stochRescaleTemp can now be set from a Tcl
  script. This permits, for example, temperature replica exchange
  or neMD/MC with non-thermostatted switches to be implemented.
  For now, stochRescalePeriod CANNOT be reset, because this would
  require more significant changes, much like langevin and tCouple
  have now. I can't envision any use case for this, so I did not
  consider it worth the time.

o The stochastic component now has a more rigorous backend inside
  the Random class. The new routine sum_of_squared_gaussians(),
  should be pretty transparent. Really this is a highly-specialized
  case of a Gamma distribution, but again, I don't know of any
  other uses for such a routine, so I stuck with the specialized
  routine that assume integer argument (numDegFreedom - 1 in
  practical use). I didn't take the time to profile _this_ routine,
  but I translated the whole thing from Tcl and tested them for
  proper statistics and timings. It looks like the approximation
  for large arguments saves ~33% compute time per RNG.

Change-Id: Ic613a22ddc88c50f832fd3e889dc926ba7aece82

14 months agoFix passing string literal to non-const 42/4042/1
Jim Phillips [Sat, 21 Apr 2018 21:36:21 +0000 (16:36 -0500)]
Fix passing string literal to non-const

Actual bug as non-const argument was modified.

Change-Id: I3fa33f47050c55cdb39ab95c0c194f6db6e5ba3c

15 months agoAdd Doxygen comments 38/4038/1
David Hardy [Fri, 20 Apr 2018 20:07:14 +0000 (15:07 -0500)]
Add Doxygen comments

Doxygen comments added for stochastic velocity rescaling method.

Change-Id: I67b0b64d14de040d0755d1761c176a636b54ab41

15 months agoImplementation of a stochastic velocity rescaling thermostat 35/4035/6
radakb [Thu, 19 Apr 2018 23:29:05 +0000 (19:29 -0400)]
Implementation of a stochastic velocity rescaling thermostat

Bussi, et al. proposed a Gibbs sampling type thermostat which
couples the system to a heat bath by solving an auxiliary
Fokker-Planck equation for the kinetic energy in order to obtain
a (globaly) velocity scaling factor. The solution is to a stochastic
differential equation so the scaling factor depends on the current
kinetic energy as well as a stochastic component.

This algorithm has a two distinct advantages over Langevin dynamics:

1) In general, only 2 random variables are required at each
  rescaling, down from 3*Natoms for Langevin. Even for a box of
  216 TIP3P waters on my laptop, this leads to a ~5% speed-up!

2) Rescaling velocities, as opposed to adding noise to the vectors,
  is much less disruptive of the underlying dynamics and leaves
  holonomic constraints intact. One can thus avoid over-application
  of expensive RATTLE calls during the Ornstein-Uhlenbeck steps.

Possible issues with the present implementation:

1) The rescaling routines currently assume that the number of
  degrees of freedom is very large such that the underlying Gamma
  distribution can be treated as a Gaussian distribution. I haven't
  investigated this in-depth, but clearly it works for O(10^3)
  degrees of freedom.

2) The equations in the paper utilize a time parameter, which we
  call the stochVelRescalingPeriod, however, this could easily
  be converted to a frequency and save a division operation every
  few steps. Furthermore, using the standard NAMD idiom, the number
  of steps between rescalings is the stochVelRescalingFreq, even
  though that is also technically a period (in timesteps). It's
  debatable if this is a nomenclature we would like to encourage.

3) We don't currently permit different time factors per atom, as
  tCouple and Langevin do. It's not clear how recommendable this
  might be and it will change the implementation and performance,
  but other codes support it.

4) There are currently no defaults, although it would be quite
  reasonable to suggest

  stochVelRescalingPeriod 1.0 ;# in ps, suitable for water
  stochVelRescalingFreq   10  ;# the default pairlist frequency

5) It is generally straightforward to compute heat transfer during
  the rescaling, which can be (nearly trivially) used to compute
  the "shadow work" performed by the integrator (a quantity related
  to integrator error). This may be a very easy and general way to
  use this integrator for nonequilibrium MD/MC, but it is not done
  at present.

Change-Id: I6fbea09971a41f46f6f670977f1deb30c06a427d

15 months agoCleanup JSON IO for constant-pH MD 04/4004/2
radakb [Mon, 16 Apr 2018 18:28:32 +0000 (14:28 -0400)]
Cleanup JSON IO for constant-pH MD

The writing of JSON files (constant pH restarts) is now much
cleaner. There are a few quirks of format that might preclude
using a more general writer, but this was easy enough of a change
without the extra testing that that would require.

Other than a lurking bug in constant-pH specific error reporting,
this outwardly changes nothing that a user will see. It will,
however, make mucking about in the restart format easier as time
goes on.

Change-Id: Ie62dd7cfa42f778078984a73a3e878ef222784a5

15 months agoUpdate Colvars to version 2018-04-11 79/3979/1
Giacomo Fiorin [Wed, 11 Apr 2018 20:10:07 +0000 (16:10 -0400)]
Update Colvars to version 2018-04-11

Allows periodic custom/scripted variables, and adds a fix to allow the use of
old-style walls with scriptedColvarForces (bug report by Jeff Comer on namd-l).

c72a6db 2018-04-11 Move initialization of two flags to colvarmodule constructor [Giacomo Fiorin]
431e52a 2018-04-06 Allow scripted/custom colvars to be periodic [Jérôme Hénin]
81d391f 2018-04-05 Split colvarcomp constructor into POD constructor + init()unction [Giacomo Fiorin]

Change-Id: I2e88eafdbc49ccb4234c348e55448f6bc002f820

15 months agoConstant-pH - more config and restart format updates 20/3920/1
radakb [Thu, 29 Mar 2018 19:27:34 +0000 (15:27 -0400)]
Constant-pH - more config and restart format updates

- Residue aliases are now part of the config file definition,
  rather than being hardcoded ad hoc. THIS MEANS YOU WILL NEED TO

- Residue exclusions are now stored in the restart file, which
  means you no longer have to keep using cphExcludeResidue commands
  during subsequent runs (it would have crashed before if you

TODO: All of the changes to the restart format are starting to
  make the writer a bit heavy and over complicated. It looks like
  I'll finally have to sit down and write some general JSON
  encoding procs...

Change-Id: Ia8868b0cec9da0348bfa31f9f2a82346b1f7b6d6

15 months agoFix ordering error when updating parameters for Constant-pH MD 03/3903/1
radakb [Mon, 26 Mar 2018 20:30:20 +0000 (16:30 -0400)]
Fix ordering error when updating parameters for Constant-pH MD

In "fixing" the new restart behavior I accidentally created an
ordering error in the move dictionary (this is why I don't like
dict merge). The MC moves were inadvertently rebuilt in a random
order depending on how they were set (from keywords, etc). This
didn't change any of the results, but it caused the MC moves to be
occasionally printed in a different order after restarts, which
I didn't notice until I wrote a script to track MC statistics
between runs and saw that they didn't make sense.

Change-Id: I965d7c25b7fa25657efdda707302bbb35b78a473

15 months agoMinor updates and fixes for constant-pH MD 93/3893/3
radakb [Fri, 23 Mar 2018 17:41:09 +0000 (13:41 -0400)]
Minor updates and fixes for constant-pH MD

The changes might look much more comprehensive than they actually
are...(this one kind of got away from me).

New features/fixes:

- Official support for diprotic phosphate monoesters
  (parameterization pending, publish soon?)

- The pH is now stored in the restart file and therefore does NOT
  need to be set as a keyword during a restart. This is in
  preparation for replica exchange and/or other simulation modes
  that will change the pH value

- Multiple config files can now be read. These will overwrite (and
  warn the user about) duplicate titratable residue definitions,
  with preference for the last loaded.

- MC statistics are now stored in the restart file and accumulated
  over mutiple restarts. These may not make sense if the inherent
  pKa is updated between runs and this might get updated in the

- Fix expected behavior when changing weights and switch times
  after a restart. Previously the restart file was overwriting
  keyword specifications, which are supposed to always have

- See previous. The restart format is now a bit different, so OLD
  JSON format dict is now minimal and entries that match the
  default are removed. This decreases the file size by about half
  (though it was only order of KB before).

- Hopefully more robust error checking and responses when the user
  gives bad input specs. Things now crash when you probably want
  them to rather than just ignoring the input.

Code clean-up and other backend things the user doesn't see:

- Harmonized the Tcl switch idiom across all files - this was
  actually a surpising thing that I didn't know. Tcl switches do
  not adhere to "break" statements and _return_ the final
  expression within the given selection. Thus you can wrap a
  switch statement in []s and get the value back (cool!).

- Change lsearch statements to more readable "in" and "ni"
  statements (this might only work for Tcl 8.5 and later)

- simplified numtcl interface:
    - choice now subsumes weightedChoice (which no longer exists)
      and accepts optional weights. The result now includes the
      list element AND index

    - lincr now subsumes llincr (which no longer exists).

    - lmultiply and lincr now have broadcast behavior similiar to
      Numpy ndarrays. That is, you can add or multiply a list
      in-place by either a value or a list of identical size (in an
      element by element fashion). Both functions follow the
      indexing behavior or lindex, lset, etc. when using nested

- Massive overhaul of cphTitrator to be analogous to cphSystem
    - The namespace now exports a _single_ function, cphtitrator
      which accepts actions (e.g. get, set, propose) as the first

    - fuction documentation! hey, how about that?

    - internal data structures are almost totally different

- Clean-up/re-write of matrix reading for residue definitions. This
  started getting really ugly for large residues, so a whole bunch
  of shorthand convenience functions were introduced to make it
  bearable to add new residue patterns.

Change-Id: Ib041f5e70cd25aa14aabe9a2a8ae5f7384b211aa

16 months agoRebuild Make.depends 80/3880/1
Jim Phillips [Tue, 20 Mar 2018 21:36:22 +0000 (16:36 -0500)]
Rebuild Make.depends

Change-Id: Id303697d3e37e6da319738279c710e5c5e5b8657

16 months agoControl CUDA runtime thread affinity 76/3876/1
Jim Phillips [Sun, 18 Mar 2018 15:10:10 +0000 (10:10 -0500)]
Control CUDA runtime thread affinity

CUDA launches threads that inherit the affinity of the threads
initializing either the runtime or the individual contexts.
Now the runtime inherits the pre-Charm++ affinity, as does the
context for single-device hosts.  Multi-device host contexts
inherit the affinity of the binding pe.

Change-Id: I6c617bfadbf3316d1a4873cdbbda4bdf751445f5

16 months agoUpdate Colvars to version 2018-03-14 49/3849/1
Giacomo Fiorin [Wed, 14 Mar 2018 18:04:45 +0000 (14:04 -0400)]
Update Colvars to version 2018-03-14

This update fixes an issue reported by Marcelo Melo with the order of atoms in
Colvars groups being given manually by number, but out of order.  The intended
behavior is that Colvars atom groups can be defined out-of-order, but
coordinates are read from files in-order.  This fix introduces a back-mapping
to the original order, retaining backward compatibility as much as possible.

As stated already to various UIUC members in private, given the increased
frequent use of reinitatoms (e.g. in constant pH) I'd really like to phase out
most selection commands internal to Colvars.  These "selections" should be
managed centrally by NAMD, kept updated between topology changes, and made
available to the objects as Tcl procs.  These may be VMD-like selections (a
long standing issue) but they don't have to.

Below are the relevant commits from

9b85d5f 2018-03-13 Fix issue with out-of-order atom selections; clarify format for ref positions [Giacomo Fiorin]

Change-Id: Ia84f3241b0b41227ae05ae784c9de8eed83cd9e0

16 months agoFix Lowe-Andersen thermostat on KNL 38/3838/1
Jim Phillips [Mon, 12 Mar 2018 14:31:22 +0000 (09:31 -0500)]
Fix Lowe-Andersen thermostat on KNL

Added macros to use r2list_f instead of r2list on KNL.

Change-Id: I71a539ab8dac1e66a7542a9863905a0b8d9ca0d6

16 months agoUser guide updates for constant-pH MD 23/3823/2
radakb [Thu, 8 Mar 2018 14:17:40 +0000 (09:17 -0500)]
User guide updates for constant-pH MD

Modify documentation to reflect new selection syntax. This just
changes <segid>:<resid> to <segid>:<resid>:<resname> for all
pertinent keywords.

Since the long-hand syntax is a bit verbose, I removed the explicit
repeat to show how optional arguments work. The optional argument
is always strict repetition of the pattern, so this should be self
explanatory. The alternative was an awkward wrapping of the
"Acceptible Values" field that seemed confusing to me.

Change-Id: I086f3e291148ad0dba59dd3a339d62fdafb0de58

16 months agoFix bug when aliasing titratable residue names with constant pH 22/3822/2
radakb [Thu, 8 Mar 2018 14:13:09 +0000 (09:13 -0500)]
Fix bug when aliasing titratable residue names with constant pH

During residue aliasing only the resname was aliased and the
segresidname was not. This broke analysis tools and would have
caused very confusing behavior with residue selection. This is
now fixed here.

If anyone has been using this bug (for all of the last 3 days?),
it would only affect HSD, HSE, and HSP residues which are
otherwise aliased to HIS. A simple sed replacement in stdout,
cphlog, and cphrst files will completely fix the problem going

Change-Id: Ia2518f625e2110709fd7a8b19190dd7fb660c709

16 months agoComment on the effects of wrapAll and wrapWater in the UG. 18/3818/1
Giacomo Fiorin [Wed, 7 Mar 2018 14:12:06 +0000 (09:12 -0500)]
Comment on the effects of wrapAll and wrapWater in the UG.

Over time, the wording "alters this behavior" may have become confusing to
novice users, and lead them to think that even the physical trajectory of a
standard MD simulation is changed.

The new explanation is more verbose, but mentions explicitly the use cases
where wrapAll or wrapWater are not recommended.

Change-Id: I68e1ac0734ff0480fb88c0a7f601d7c5140b19eb

16 months agoConstant-pH MD: Revisions and new functionality 94/3794/3
radakb [Thu, 1 Mar 2018 21:56:16 +0000 (16:56 -0500)]
Constant-pH MD: Revisions and new functionality

Minor changes:
 - Clean up of documentation
 - Variable name segresid changed to segresidname throughout (see below)
 - Complete re-hab or residue testing facility. The old system was based
   on the old, directional pattern of patch definition. This is no
   longer necessary and way more robust. Testing that the correct
   patches are defined is still very easy, but a new convenience
   function is added for testing the correctness of the patches is also
   added. Scripting a test with this is very involved...
 - Simplification and performance enhancements for the experimental
   cphAnalyzeForce command.
 - Using minimization via cphNumMinSteps now results in reallocation of
   velocities when done. Either the temperature or thermostat
   temperature are used.
 - The generic namdtcl interface now includes a "::kBT" proc that
   returns the value of kT in the current thermostat.

Major changes:
 - A residue, in the topology sense, can now be divided into multiple
   titratable residues. Any titratable residue which does not have the
   same name as the topological residue is considered a "sub-residue"
   and requires special definition in the configuration file. Note that
   some residues may ONLY contain sub-residues, such as a C-terminal
   alanine or the phosphates in a lipid head group. In order to
   differentiate sub-residues from the regular residues, we expand the
   <segid>:<resid> selection to <segid>:<resid>:<resname>, where
   <resname> may be a sub-residue name. This new label (the
   "segresidname") is the only guaranteed unique selector for a
   titratable residue.
   IMPORTANT! Even if a residue has no sub-residues, the new
   segresidname syntax MUST be used for any keyword that requires a
 - The initial "run 0" command to kick-start the simulation has been
   replaced by the "startup" command and thus eliminates the spurious
   ENERGY: entry when a simulation begins. As a consequence, the old
   neMD/MC cycle sequence of MC/MD has now been flipped to MD/MC. This
   should not cause any change to statistics, but output will look
   slightly different.

Change-Id: Iad97be3aa5cfd1ee58228703f1c92b78987886b0

16 months agoUpdate Colvars to version 2018-02-24 69/3769/1
Giacomo Fiorin [Sat, 24 Feb 2018 19:10:22 +0000 (14:10 -0500)]
Update Colvars to version 2018-02-24

This update introduces new features such as runtime ABF integration,
accumulated work for K-changing restraints, use of OpenMP (for the few builds
where Charm++ allows it) as well as a fix for the TI estimator with staged
changes in K, and (re)initialization fixes that allow using Colvars in
combination with the new constant-pH protocols (only needed before the first
"run" is "colvars on").

colvarsTrajAppend is now deprecated: please stop using it.

Below are the relevant commits from

eed97c9 2018-02-24 Obtain integer version number from version string
c17f3cd 2018-02-23 Write trajectory labels only when needed [Giacomo Fiorin]
7307b5c 2017-12-14 Doc improvements [Giacomo Fiorin]
7f86f37 2017-12-14 Allow K-changing restraints computing accumulated work; fix staged-k TI estimator [Giacomo Fiorin]
8e0d593 2017-12-12 Projected ABF in 2D and 3D [Jérôme Hénin]
b94aa7e 2017-11-16 Unify PMF output for 1D, 2D and 3D in ABF [Jérôme Hénin]
771a88f 2017-11-15 Poisson integration for all BC in 2d and 3d [Jérôme Hénin]
0166f9e 2017-12-13 Allow negative force constants for the linear bias [Giacomo Fiorin]
353ef72 2017-12-03 Allow running setup_input() and setup_output() when module is empty [Giacomo Fiorin]
6af4d60 2017-12-01 Print message when issuing cv delete in VMD [Giacomo Fiorin]
efdae9b 2017-12-01 Print a short help for cv without commands, suggest using cv help [Giacomo Fiorin]
0fc924e 2017-12-01 Allow "cv delete" only inside VMD, print error message otherwise [Giacomo Fiorin]
4413972 2017-11-30 Check for homogeneous colvar to set it periodic [Jérôme Hénin]
95fe4b2 2017-11-06 Allow abf_integrate to start in bin with 1 sample [Jérôme Hénin]
7cf56af 2017-11-13 Restore stdlib header include, needed to declare rand() [Giacomo Fiorin]
51590b2 2017-11-03 Move Tcl functions to colvarproxy class (remove VMD/NAMD duplicates) [Giacomo Fiorin]
5752af7 2017-10-25 Make running average accessible to scripts [Jérôme Hénin]
06eea27 2017-10-23 Shorten a few constructs by using the power function [Giacomo Fiorin]
cf72d16 2017-10-20 Improve comment text for CVC class [Giacomo Fiorin]
3165dfb 2017-10-20 Move includes of colvarproxy.h from headers to files [Giacomo Fiorin]
32a867b 2017-10-20 Add optimized powint function from LAMMPS headers [Giacomo Fiorin]
3ad070a 2017-10-20 Remove some unused includes, isolate calls to std::pow() [Giacomo Fiorin]
98d548a 2017-10-20 Account for correct colvar bin in colvarbias_ti class [Giacomo Fiorin]
0aaf540 2017-10-20 Replace all calls to std::pow() where the exponent is not an integer [Giacomo Fiorin]
624cc72 2017-10-20 Use correct bin for system force for all backends [Jérôme Hénin]
3ee2617 2017-10-19 Fix issue #140 (segfault at end of run) [Jérôme Hénin]
541ccb8 2017-10-13 Doc fixes [Giacomo Fiorin]
5005669 2017-10-10 Move OpenMP support to base colvarproxy class [Giacomo Fiorin]
b8fbc8d 2017-10-10 Remove unused variable [Giacomo Fiorin]
321d06a 2017-10-10 Add macros to manage colvarscript commands [Giacomo Fiorin]
5ac0088 2017-10-10 Don't track colvarscript when updating proxy versions [Giacomo Fiorin]
cc8f249 2017-10-04 Clarify that SMP depends on code build [Giacomo Fiorin]
c554537 2017-10-04 Comment to specify timing of Jacobian calculation [Jérôme Hénin]
0b2ffac 2017-10-04 Summarize colvar definition options, clarify some details [Giacomo Fiorin]
28002e0 2017-10-01 Separate writing of restart file from other output (e.g. PMFs) [Giacomo Fiorin]
92f7c1d 2017-10-01 Deprecate colvarsTrajAppend [Giacomo Fiorin]
36de8dc 2017-09-29 Accompany all section titles in the doc with a label [Giacomo Fiorin]
12a707f 2017-09-26 Accurate Jacobian calculation for RMSD variants [Jérôme Hénin]
fe389c9 2017-09-21 Allow subtractAppliedForce with extended-L again [Jérôme Hénin]
22e50da 2017-09-20 Include omitted keywords in colvarscript help [Giacomo Fiorin]
5dc0aaa 2017-09-20 Clarify that firstTimestep is always honored by Colvars [Giacomo Fiorin]
b61f978 2017-09-18 Add references to sections within crash course [Giacomo Fiorin]

Change-Id: Ie20a45d82eb05e3dbc7f58a7bf0744fb5ea98023

16 months agoUpdates and fixes to constant pH 68/3768/1
radakb [Fri, 23 Feb 2018 19:13:21 +0000 (14:13 -0500)]
Updates and fixes to constant pH

- Add basic support for titratable phosphate monoesters
- Fix potential bug when using mass repartitioning
- Remove extraneous code:
  o checkpoint/revert is redundant with reinitatoms
  o bfactors are already zeroed by psfgen
  o clean up old-style proposal summaries

Change-Id: I670aab3eb3630edf9ee8d622707f83951590881e

16 months agoClean up Projections tracing for CUDA offload 53/3753/1
Jim Phillips [Wed, 21 Feb 2018 05:03:35 +0000 (23:03 -0600)]
Clean up Projections tracing for CUDA offload

Various user events did not have their tags registered correctly
due to the registration call not being done on pe 0, etc..  Also
disabled excessive tagging of every timestep on every sequencer
and patch/timestep user note that doesn't appear to work anymore.

Change-Id: I7a56464888dc076914061331bf980c788e3c6760

16 months agoFix message priorities for CUDA offload 50/3750/1
Jim Phillips [Tue, 20 Feb 2018 17:11:30 +0000 (11:11 -0600)]
Fix message priorities for CUDA offload

Set priorities of messages to recvFinishPatchesOnPe, recvFinishPatchOnPe,
and recvOpenBoxesOnPe for CUDA bonded and nonbonded offloading to
launch bonded (non-streaming) before nonbonded (streaming), and to
interleave properly with PME and other work.

Change-Id: Ibf904ccc2f1593017bcf9f127800d5d50216c3f9

16 months agoChange multicore-linux64 to multicore-linux-x86_64 43/3743/2
Jim Phillips [Mon, 19 Feb 2018 21:00:00 +0000 (15:00 -0600)]
Change multicore-linux64 to multicore-linux-x86_64

The Charm++ build script (run in interactive mode) used to
suggest multicore-linux64 but now uses multicore-linux-x86_64.
There is no difference between these other than the name.

Change-Id: I623e5bdeb777eecf7003e0f6f4c2c85e6d90e1c5

16 months agoTranslate config script from csh to bash 38/3738/2
Jim Phillips [Mon, 19 Feb 2018 02:49:35 +0000 (20:49 -0600)]
Translate config script from csh to bash

Linux distributions no longer install csh by default.
Bash is universally available and most users know it.

Change-Id: Id59f75d26b414d90dfa6833512eb0473f423dc33

16 months agoFix lurking bugs for alchLambda/alchLambda2 24/3724/7
radakb [Sat, 10 Feb 2018 16:21:45 +0000 (11:21 -0500)]
Fix lurking bugs for alchLambda/alchLambda2

In scriptSet:

Resetting of alchLambda(/alchLambda2) has not been subject to the
constraint that 0.0 <= alchLambda <= 1.0, as is imposed at startup.
This was only ever done from scripts and probably only by advanced
users, but could still potentially cause sneaky errors that might
be hard to diagnose.

At startup:

I don't know how this didn't break things before - alchLambda2 is
uninitialized by default but checked for validity even during TI,
where it is never used unless alchLambdaFreq > 0. There are now
separate checks for alchLambda and alchLambda2 when alchFepOn and

Change-Id: I45a04f82da9e40ffe7dedace2c0c2c23fddbd572

16 months agoUpdates to abf_integrate 39/3739/1
Jérôme Hénin [Mon, 19 Feb 2018 13:35:08 +0000 (14:35 +0100)]
Updates to abf_integrate

in particular, read gradient files from the CZAR estimator.

Change-Id: Ibdf923c33329a8049b8c5ea5794736cc4e2a1db8

17 months agoInclude PCI bus address in all CUDA error messages 16/3716/1
Jim Phillips [Tue, 13 Feb 2018 17:02:17 +0000 (11:02 -0600)]
Include PCI bus address in all CUDA error messages

When device IDs are hidden by the launch system such that every
device shows up as device 0 it is useful to report the PCI bus
address of the device in addition to the hostname and device ID.

Change-Id: I4e1516cbc67bcdb09d6d052eca595f8417cce5f2

17 months agoImprove CUDA device selection error checking 34/3634/1
Jim Phillips [Tue, 6 Feb 2018 04:43:37 +0000 (22:43 -0600)]
Improve CUDA device selection error checking

Enforce that number of devices is a multiple of number of
processes and that process does not bind same device twice.
Modify +ignoresharing to make each process bind all devices
to cope with launch systems that limit device visibility.
Add documentation, including for +devicesperreplica.

Change-Id: Icb21819bd703b3e33bafbe4a8577b20b32f6077d

17 months agoFix alchemical coupling + LJcorrection 85/3585/2
radakb [Mon, 29 Jan 2018 17:25:04 +0000 (12:25 -0500)]
Fix alchemical coupling + LJcorrection

Integrating alchemical coupling with LJcorrection introduced a
very subtle bug when alchVdwLambdaEnd = 0.0. This is because
the LJcorrection uses a linear combination of the endpoint
corrections, neither of which vanish when alchVdwLambdaEnd = 0.0
(no scaling occurs during the entire simulation). I don't know
who, if anyone is using this, and it should only be a serious
problem when
  a) doing staged VdW/elect decoupling of a ligand
  b) using constant pressure (which is abysmal for performance).

The new behavior just lumps all of the atoms into a single group
when alchVdwLambdaEnd = 0.0, which is actually the same as the
old behavior before integration with alchemy.

Change-Id: I253d76478792a245c1bc8529783304efaa46e54e

17 months agoFix CUDA with multiple processes per host 74/3574/2
Jim Phillips [Fri, 26 Jan 2018 05:20:03 +0000 (23:20 -0600)]
Fix CUDA with multiple processes per host

Every process on a host was binding all of the devices on that host,
which is inefficient due to context switching and caused errors when
devices were in compute mode EXCLUSIVE_PROCESS.  Modified DeviceCUDA
to only report devices that are assigned to pes of the calling process.
Also fixed a couple of related bugs.

The ideal configuration for multi-node runs is one process per device.
There is inefficiency and potential strangeness when the number of
devices per node is not a multiple of the number of processes per node,
but it does seem to run.

Change-Id: I310164bd0541afbc2eac1c920462a03fd069e0d4

17 months agoExpanded alchemical functionality: Drude and CMAP 69/3569/2
radakb [Wed, 24 Jan 2018 16:48:01 +0000 (11:48 -0500)]
Expanded alchemical functionality: Drude and CMAP

The following are now compatible with alchemical calculations:
  o Drude Thole damping
  o Crossterms (i.e. CMAP)
  o Drude anisotropic terms

Only the first of these was actually explicitly disabled in prior
releases. Alchemical scaling of crossterms is arguably a very rare
edge case - I can only envision it being used if an entire peptide
or lipid is being annihilated, which is a very ambitious
transformation. However, that in fact was the easiest test case (a
single energy calculation), so it has been implemented.

Thole damping contributes to the electrostatic TI derivative and
FEP energy while the other two go into the bonded term.

Change-Id: I680a176337ed2d920324ec300ca27dec1bc5fddf

17 months agoRebuild dependencies 72/3572/1
Jim Phillips [Thu, 25 Jan 2018 18:33:27 +0000 (12:33 -0600)]
Rebuild dependencies

Change-Id: I1a538cb140833b1de02da4fc9b993042d9a9a402

17 months agoImprove PME performance when toggling alch/LES/PairInteraction 61/3561/6
radakb [Tue, 23 Jan 2018 20:09:13 +0000 (15:09 -0500)]
Improve PME performance when toggling alch/LES/PairInteraction

The number of PME grids is increased for methods like alchemy and
causes a slowdown of ~30%, even if the method is toggled off at
the Tcl level (as happens in hybrid neMD/MC, such as constant pH).
This commit enables the number of PME grids to change when the MD
settings permit it.

Following the ComputeNonbondedUtil class as a template, this
introduces the new ComputePmeUtil class that caches the PME grid
related variables from SimParameters and shares that information
with ComputePme and ComputePmeMgr via inheritance. Other variables
could also be stored here in order to centralize dependence on
SimParameters, but this has not been done yet and is not necessary
for any obvious performance reason.

Previous tests showed a 30-40% slowdown for constant pH and alchemy,
regardless of settings. The new code shows only 2-5% slowdown when
omitting alchemical switches, and ~25-30% for 50/50 usage.

Change-Id: I6711f452aa80ae2375ef03595f6e0ed620146674

17 months agoFix PNG for constant pH execution flowchart 68/3568/1
radakb [Wed, 24 Jan 2018 14:59:18 +0000 (09:59 -0500)]
Fix PNG for constant pH execution flowchart

Apparently GIMP is much better at converting PDFs to PNGs than
Inkscape is (at least in this case?).

Change-Id: I017c79ab37f553d076e3fe6e9ab9415608ed5b34

17 months agoUpdate arch files for Linux POWER CUDA 56/3556/2
David [Tue, 23 Jan 2018 18:53:03 +0000 (12:53 -0600)]
Update arch files for Linux POWER CUDA

Removed SM 5.0 targets from POWER CUDA arch files.
There were never any POWER platforms with Maxwell GPUs.
(Also removed extra blank line from .cuda9prof arch file.)

Change-Id: I0bc53010b6a45c654491ed931015821a2fa253c0

17 months agoRemove commented code now in DeviceCUDA.C 59/3559/1
Jim Phillips [Tue, 23 Jan 2018 19:21:37 +0000 (13:21 -0600)]
Remove commented code now in DeviceCUDA.C

Change-Id: Ia4a7fe3e4ab8647dca19dcf92bdabc9e9df448e2

17 months agoUpdate Charm++ to 6.8.2 55/3555/2
David [Tue, 23 Jan 2018 18:12:10 +0000 (12:12 -0600)]
Update Charm++ to 6.8.2

Updated NAMD configuration and notes occurrences of 6.8.1 to 6.8.2.

Found 6.8.1 occurrences by doing in the base directory:
fgrep -r -I --exclude-dir='Linux*' 6.8.1 .

Change-Id: I77ac50804edf3b3754c228998a390fbeba203947

17 months agoFix User's Guide build 48/3548/2
Jim Phillips [Tue, 23 Jan 2018 03:28:23 +0000 (21:28 -0600)]
Fix User's Guide build

Remove subcaption and chemfig packages.
Add ug_constantph.tex to Makefile dependencylist.

Change-Id: I159e3babc31dbaea8103f91040da48d098183fb9

17 months agoFix config script for CUDA builds 49/3549/1
Jim Phillips [Tue, 23 Jan 2018 03:41:02 +0000 (21:41 -0600)]
Fix config script for CUDA builds

Build Make.config in proper order for overrides.
Only include version-specific files if they exist.

Change-Id: I879f5580443ba1e71d471d0f36322fa262dfa61c

18 months agoFix/update constant pH MD user guide 39/3539/1
radakb [Fri, 19 Jan 2018 18:58:46 +0000 (13:58 -0500)]
Fix/update constant pH MD user guide

o Update references
o Fix issues with tikz images when using latex2html
o tikz and chemfig images are now made as separate tex documents
  and then converted from pdf to png

Change-Id: Ia86c806e7471f264e81b6a6cfaabba25dcab7371

18 months agoFix "alch off" in scripts failing to disable alchemy kernels 33/3533/1
Jim Phillips [Thu, 18 Jan 2018 18:52:45 +0000 (12:52 -0600)]
Fix "alch off" in scripts failing to disable alchemy kernels

This bug was reducing the performance of constant pH simulations.

Change-Id: I36398bf47a42637b89007fb203ef33f1664c85ca

18 months agoFix Windows link error 04/3504/1
Jim Phillips [Thu, 11 Jan 2018 07:07:13 +0000 (01:07 -0600)]
Fix Windows link error

Visual Studio C++ mangles forward-declared struct and class
differently, so must use "struct FullAtom" everywhere.

Change-Id: I40b2175f06c24dff104a4b22147c1d5fb951b9ef

18 months agoUpdated selection of point charges and fix bug in PME correction. 64/3464/4
melomcr [Fri, 22 Dec 2017 00:01:07 +0000 (18:01 -0600)]
Updated selection of point charges and fix bug in PME correction.

Classical point charges are selected correctly when the QM region
moves across periodic boundaries.

Fixed bug in PME correction calculation.
Improved error messages to provide more context.

Change-Id: I7a980bf0f1eab1d0e7307f1a651375bf525c74e6

18 months agoFix integer overflows for exclusion counts 56/3456/1
Jim Phillips [Wed, 20 Dec 2017 15:55:41 +0000 (09:55 -0600)]
Fix integer overflows for exclusion counts

Eliminates false "Low global exclusion count!" errors with
negative exclusion counts on two-billion-atom systems.

Change-Id: I40a697eed2f28a7bdd0e062238641c68dab84ae4

18 months agoFix PME placement bug for grids with 2^31 or more points 55/3455/1
Jim Phillips [Wed, 20 Dec 2017 15:43:30 +0000 (09:43 -0600)]
Fix PME placement bug for grids with 2^31 or more points

Integer overflow would use one pencil per dimension with message
"PME using 1 x 1 x 1 pencil grid for FFT and reciprocal sum."
rather than, e.g., 45 x 45 x 43.

Change-Id: Iba99b6bd773b57d8bb272b219ffe1b1349bd2a29

19 months agoUse streaming message to distribute ComputeMap 54/3454/1
Jim Phillips [Wed, 20 Dec 2017 15:31:28 +0000 (09:31 -0600)]
Use streaming message to distribute ComputeMap

Initial ComputeMap distribution during startup was building its
own binary tree and allocating and sending large monolithic
messages.  Using MStream simplifies the code, is faster, and
avoids message allocation errors on two-billion-atom systems.

Change-Id: I0f1032da4c093718093d97b92300df7692ee114b

19 months agoUpdate config and arch for CUDA on Linux POWER 51/3451/1
David [Tue, 19 Dec 2017 18:56:07 +0000 (12:56 -0600)]
Update config and arch for CUDA on Linux POWER

Build options for CUDA on Linux POWER have been updated.
The config file now attempts to run nvcc to determine the
CUDA version and selects between .cuda, .cuda75, and .cuda9
arch files.

Change-Id: I352fd709f30f5e006c7497e0abbf9f4bc26e6837

19 months agoFix const correctness warnings about some string literals 32/3432/1
Phil Miller [Fri, 15 Dec 2017 17:09:13 +0000 (11:09 -0600)]
Fix const correctness warnings about some string literals

Change-Id: I27a652892d65b489e8875b2f02c23472d6fdd5ea

19 months agoFixed bug with DEBUG_PRESSURE 32/3332/1
David [Fri, 17 Nov 2017 00:49:30 +0000 (18:49 -0600)]
Fixed bug with DEBUG_PRESSURE

Fixed a bug with DEBUG_PRESSURE enabled when printing out the position
rescaling factor.

Change-Id: I727efee9dd2fa6b42848f1ae17e691fc01243751
(cherry picked from commit f5ed6836811f78a7d48054dc4eec5aeb6df6d0a5)

19 months agoRevert "Find upper bound available for integration speedup" 31/3331/1
David [Tue, 28 Nov 2017 16:45:17 +0000 (10:45 -0600)]
Revert "Find upper bound available for integration speedup"

This reverts commit 57e96ac19ded24726c2dae0f7184eea423ddca43.
Commit was intended for devel branch only, not master.

Change-Id: I01578b543e99ff7ad9700552c0582beb72cd5275

19 months agoFixed DCD file writer for billion atom systems 06/3306/4
David Hardy [Sun, 12 Nov 2017 17:21:26 +0000 (11:21 -0600)]
Fixed DCD file writer for billion atom systems

The DCD file writer had been broken for systems of size N >= 2^30 due to
representing byte counts and some of the file seeking byte counts using
variables of size int32. This patch fixes the problem by now using
size_t for the block byte sizes and OFF_T for the file seeking.

However, the DCD file format is intrinsically broken for these larger
systems, since it requires that the byte counts of these blocks of
N-floats be stored as int32. For now, we will simply write these
overflowed values into the DCD file, preserving the expected byte count
for each frame, and VMD will set a flag for systems of N >= 2^30 to
ignore the stored value of these block byte count markers.

Change-Id: I13b0fe0573be3b4b25f3504a075fdefdc3641aca

19 months agoAdded comments to ResizeArrayRaw.h 25/3325/1
David Hardy [Wed, 22 Nov 2017 18:30:07 +0000 (12:30 -0600)]
Added comments to ResizeArrayRaw.h

ResizeArrayRaw is the memory allocator for several array data structures
used by NAMD.  The arithmetic done for the resizing procedure is handling
large array sizes well enough.  The pointer manipulation performed for
allocating aligned memory is not done safely and could be parameterized
to better target different architectures.

Change-Id: Ia61bc67f9417ee8caacecbcbf3d5d987d841551d

19 months agoFind upper bound available for integration speedup 15/3315/4
David Hardy [Mon, 20 Nov 2017 23:15:45 +0000 (17:15 -0600)]
Find upper bound available for integration speedup

Define macro UPPER_BOUND to eliminate all per atom calculation performed
by Sequencer numerical integration.  The idea is to determine an upper
bound on the speedup available from moving all of these CPU computations
to the GPU.

Change-Id: I768f23faf275e54d5679534991afcff9e6a94520

20 months agoComments for SOA, array interface to Random 10/3310/1
David Hardy [Tue, 14 Nov 2017 17:33:51 +0000 (11:33 -0600)]
Comments for SOA, array interface to Random

Additional comments in Sequencer to document upcoming code revisions
toward improving performance with SOA data structure.  Also comments
showing the SOA struct and its access functions in HomePatch.

Provide an array interface to the Random class. Calls are provided for
filling an array with uniformly distributed or with standard Gaussian
random numbers.  For now, we fill an array by calling the already
provided corresponding single value routine.  Ultimately we will improve
performance by vectorizing the random number calculation.  Single
precision floating point should be sufficient for use in Langevin.

Change-Id: Ifa7b3d8022d843e56db820e7eaf2cf38f14a93de

20 months agoAdded comments outlining AOS to SOA copying 08/3308/1
David Hardy [Sun, 12 Nov 2017 21:29:31 +0000 (15:29 -0600)]
Added comments outlining AOS to SOA copying

Initial support for vectorizing the integration calculations will
involve creating a local SOA (structure of arrays) data structure for
each HomePatch that will rearrange data fields from the existing AOS
(array of structures) data layout. Since the existing data organization
is necessary for the rest of NAMD, the idea is to maintain a
synchronized SOA data structure. The comments outline where copying
between the two data structures will need to occur.

Change-Id: If19dff5eccb6684a8cc1d495906d9134638266dd

20 months agoFixed lone pair patch for memopt version 03/3303/1
David Hardy [Sat, 11 Nov 2017 23:28:55 +0000 (17:28 -0600)]
Fixed lone pair patch for memopt version

The memopt version of NAMD does not support lone pairs. Thus, the memopt
version will disable lone pairs by default.

Change-Id: I99a2d44b0230a756c906acd3dda4fd2ca0aee27c

20 months agoAutomatic detection of lonepairs 29/3129/5
David Hardy [Fri, 13 Oct 2017 20:15:49 +0000 (16:15 -0400)]
Automatic detection of lonepairs

Following the behavior in CHARMM, a lonepair section of a PSF is
now automatically detected without the lonepairs keyword being set.
In practice, all of the same keywords still exist, but now default to
TRUE and are instead toggled to FALSE if no lonepairs are present.

PSF reading in Molecule will now optionally read a lone pair hosts
section when it finds the NUMLP keyword. It will disable the "lonepairs"
flag in SimParameters if no lone pair hosts are found. An error occurs
if lone pair hosts are found with "lonepairs=false" set in config file.

Change-Id: I5f08ff37646567994d0e3df35084665858932be9

20 months agoSmall fixes for billion-atom systems. 43/3243/1
Jim Phillips [Sun, 5 Nov 2017 20:12:56 +0000 (14:12 -0600)]
Small fixes for billion-atom systems.

Change-Id: Id2a2c7cc7a363552d1f88ebc0dea557a98088420

20 months agoEnable proton transfer moves 34/3134/3
Brian Radak [Tue, 17 Oct 2017 18:56:30 +0000 (13:56 -0500)]
Enable proton transfer moves

This patch adds the (experimental, for now) ability to add proton
transfer neMD/MC moves. These do not exist by default and must be
added with the new (possibly fragile) keyword:

cphProposeProtonTransfer <segid:resid>/<segid:resid> [..[..]]

which takes psfgen style segid:resid combinations _in pairs_ and
separated by a "/". A new move is then added to the pool of MC
moves (the default move weight is always 1.0) which will propose
a proton transfer between the two residues (i.e. one residue will
lose a proton and the other will gain a proton). If no transfer is
possible, then the move is rejected.

Preliminary tests indicate that the switches for these moves need
to be longer than for single residue titrations, but validation
tests are still being run.

Change-Id: I9bbcd564504f17606908b84cf870b531ea77a7fb

20 months agoProfiling CUDA 9 with NVTX 93/3193/3
David [Thu, 19 Oct 2017 23:16:13 +0000 (18:16 -0500)]
Profiling CUDA 9 with NVTX

Added support in NAMD for building CUDA 9 and profiling using NVTX.
The NVTX API allows gathering statistics for the CPU computation,
called through macros defined in NamdTypes.h. Use is demonstrated
by tracing computation in the Sequencer "integrate" loop and to
collect timings for second level routines to show which parts of
the calculation will benefit most from GPU support. The arch files
for CUDA 9 are now fixed to support earlier GPU architectures.

Change-Id: Ic10265e7a6412a2bd4693ad286d1ce627cac567a

20 months agoFix overflows when compressing huge systems. 28/3228/4
Jim Phillips [Fri, 3 Nov 2017 20:41:05 +0000 (15:41 -0500)]
Fix overflows when compressing huge systems.

Structure compression was broken for Noah's protocell system
because it has over 2^30 but less than 2^31 atoms. Size-related
variables in the data structure have been changed from signed to
unsigned to support system sizes in the 1 to 2 billion atom ranges.

Change-Id: Iee17f5a51df500cf1777b054cb8ba066cd5740d6

20 months agoImprove const safety to conform with upcoming rvalue reference optimizations in Charm++ 31/3231/2
Phil Miller [Fri, 3 Nov 2017 22:05:05 +0000 (17:05 -0500)]
Improve const safety to conform with upcoming rvalue reference optimizations in Charm++

Change-Id: I6ce4eee2a56be0868d94add2bc69df394fe9cd15

20 months agoFixed "make depends" 54/3154/1
David [Wed, 25 Oct 2017 02:01:42 +0000 (21:01 -0500)]
Fixed "make depends"

The new versions of Charm++ require the dependency generation
to invoke g++ with updated -std=c++0x language flags. Otherwise
"make depends" fails. Also updated the Make.depends file.

Change-Id: I9321d241e41c12795171892c39185c6ad7edae61

21 months agoUpdate to Charm++ 6.8.1 43/3143/1
Jim Phillips [Fri, 20 Oct 2017 18:11:41 +0000 (13:11 -0500)]
Update to Charm++ 6.8.1

Change-Id: I404d78ec07f0e212199c9fab4657c56d3462762e

21 months agoFix integer overflow yielding 2x2x2 patch grid for huge periodic cells 42/3142/1
Jim Phillips [Fri, 20 Oct 2017 16:53:47 +0000 (11:53 -0500)]
Fix integer overflow yielding 2x2x2 patch grid for huge periodic cells

Change-Id: I705a96eb26e9932891d7fe34b9137482d7d848f1

21 months agoSpecify more clearly list of build prerequisites 36/3136/1
Giacomo Fiorin [Tue, 17 Oct 2017 19:00:28 +0000 (15:00 -0400)]
Specify more clearly list of build prerequisites

Note that csh/tcsh is NOT installed by default on many recent Linux

Change-Id: Icf007dd5db89447a7a006766ea7724ff9160fd06

21 months agoAllow autodetection of Python at compile time. 35/3135/1
Giacomo Fiorin [Tue, 17 Oct 2017 17:50:15 +0000 (13:50 -0400)]
Allow autodetection of Python at compile time.

python-config is used to find the preprocessor and linker flags; if
unavailable, the config script defaults to the previous check.

This allows compiling NAMD against Python versions other than the operating
systems's one without editing Make.config (easier automated builds).

Change-Id: I4e36a2d9febbbdf21813e159f80829b908ee60b3

21 months agoCollapsed routines for HomePatch integration loops 12/3112/1
David [Fri, 6 Oct 2017 17:26:55 +0000 (12:26 -0500)]
Collapsed routines for HomePatch integration loops

Modified the interface to HomePatch integration methods:

Now instead of simply mirroring the interface of the identically
named Sequencer methods that wrap calls to these HomePatch methods,
the new interface accepts restricted pointers to the atom and force
buffers. The improved performance routines from Sameer are now
collapsed into their respective HomePatch methods.

Change-Id: I6e755b6f35fd95835f24c550177dda212e9acbcb

21 months agoFixed some bugs introduced by POWER commit 10/3110/1
David [Thu, 5 Oct 2017 19:48:15 +0000 (14:48 -0500)]
Fixed some bugs introduced by POWER commit

The previous commit broke the build for Windows and Blue Gene Q.
These issues are addressed. Also, two identically defined macros
for rounding to nearest int have been unified.

Fixed make file

All cases of -lm have been replaced by $(MATHLIBS).

Change-Id: Idadee24a43a16af5fbf5900afbfb442b893da463

Fixed Linux POWER arch file

Removed CUDA from the default include path.
Removed -g compiler flag.

Change-Id: Ie5647e8a312e95e0375f539e4dd9057a5fe5b09e

Fix build for Windows

Protect the "noinline" function attribute from being seen by
the Windows compiler.

Change-Id: I3a561eaf1f3f4b388ee65823686425c5f8354edb

Fix Blue Gene Q build and unify macros

Fix the Blue Gene Q build by falling back to __tanint(X) whenever

Also unified the two identical round-to-nearest-int macros
mynearbyint() and latticenearbyint(). The new macro is named
namdnearbyint() and defined in common.h which is included by
Lattice.h. All calls (in three files) now use the same macro.

Change-Id: I736543f15cb45d7020b98931441c71680d4e074a

21 months agoPerformance improvements for POWER 94/3094/1
David [Tue, 3 Oct 2017 00:50:23 +0000 (19:50 -0500)]
Performance improvements for POWER

The following collection of commits combine POWER architecture
improvements from Sameer Kumar together with a new field for
precomputed reciprocal mass added to FullAtom that eliminates
repeated division instructions in several inner loops to improve
the integrator performance.

Update makefiles for POWER

Patch from Sameer updating makefiles for POWER architecture. Introduce
make file variable MATHLIBS that defaults to -lm but is overridden by
the arch file to use the POWER libraries.

Change-Id: I2eef4fae8664e5040bc3e7eed852b52c1a0f5643

Use round() for POWER

Patch from Sameer for POWER, using round() for nearest int.
We define two similarly named macros latticenearbyint() and
mynearbyint(). Why not unify?

Change-Id: I4c47caed7535617abca1a1cc4643fa57845d79b0

Increase default buffer allocation size

Patch from Sameer, setting a larger buffer size for the default
allocation. The new default size is not necessarily optimal, but
it does seem better than defaulting to 0.

Change-Id: I05d9a32c7c5a6f4f8e369d56ab3718e256bba7e4

Add reciprocal mass to FullAtom

Add reciprocal mass field to FullAtom. Calculate during set up when
first setting mass. Avoid division during the integration loops
and within a few other parts to improve performance. Also includes
Sameer's patch that passes __restrict pointers on integration loop

Change-Id: If3493859fd0ce36f0455da4829b8a997b31ef406

Fully incorporate reciprocal mass code path

Fully incorporate the reciprocal mass code path. Removed the macro
define and conditional compilation directives. Cleaned up the code.

Change-Id: Iba9fbf0262f34a88e7c59f9a8b3d8fc793c763e9

21 months agoFix for old PME GPU kernel on multi-GPU machines 71/3071/2
David [Fri, 22 Sep 2017 23:04:01 +0000 (18:04 -0500)]
Fix for old PME GPU kernel on multi-GPU machines

This patch was submitted by Sameer and Ke Li.

Change-Id: I386ee7dd2a62aa0b8064e9e57901a1b3fffaaffc

21 months agoBug Fix for NAMD Non-Uniform Grids 82/3082/1
Noah Trebesch [Thu, 28 Sep 2017 13:08:42 +0000 (08:08 -0500)]
Bug Fix for NAMD Non-Uniform Grids

When attempting to use non-uniform grids with subgrids of generation greater than one, NAMD would fail with an error message or segmentation fault, depending on the system. This result occurred because GridforceFullSubGrid objects instantiated in the readSubgridHierarchy method did not have the poten_fp attribute set. This fix ensures that this attribute is set by the relevant constructor, and testing has indicated that it allows NAMD to successfully use non-uniform grids with subgrids of generation greater than one.

Change-Id: Ib33323387f23b1be19af11c7bdf0370ef31b53e2

21 months agoBug fix for PME kernel in CUDA 9 68/3068/2
David [Wed, 20 Sep 2017 18:06:14 +0000 (13:06 -0500)]
Bug fix for PME kernel in CUDA 9

Contributed by Ke Li (NVIDIA) with assistance from software QA.
Found a CUDA 9 bug in A-P's PME kernel due to incorrect masking
of synchronized warp operations. The issue is in the gather_force
kernel, where if the number of atoms being processed by a warp is
not a multiple of 4, some threads will exit the loop early.
Using the full warp mask 0xffffffff here is incorrect and will
actually cause the warp operations to hang.

Note that for the two test cases that NVIDIA had been using,
ApoA1 and STMV, both have atom counts that are multiple of 4,
which is why the bug had not initially been triggered. The bug was
finally caught when running ApoA1 on an 8-GPU platform (DGX-1).
For finding any similar bugs, a box of water turns out to be a
worthwhile test case.

Change-Id: I7cff7cc57c5b32eb586ef5f0f874ad530f322582

22 months agoRefer to position restraints as "position restraints" in the UG 35/3035/1
Giacomo Fiorin [Tue, 19 Sep 2017 17:46:42 +0000 (13:46 -0400)]
Refer to position restraints as "position restraints" in the UG

Change-Id: I687914c06ccc0466acf787bcfdcf5c1bb3cad965

22 months agoUpdate Colvars to version 2017-09-18 (TI base class, fix compiler warnings) 32/3032/1
Giacomo Fiorin [Mon, 18 Sep 2017 15:55:50 +0000 (11:55 -0400)]
Update Colvars to version 2017-09-18 (TI base class, fix compiler warnings)

The TI base class allows an easier use of the TI infrastructure in combination with harmonic restraints (see e.g. CHARMM), compared to using ABF with applyBias = off.

Below are the relevant commits from

c050ce0 2017-09-18 Silence compiler warnings, remove Tabs [Giacomo Fiorin]
cb41905 2017-01-11 Add base class for TI estimator in other biases than ABF [Giacomo Fiorin]
dbb4af8 2017-09-18 Add credits to path CVs [Jérôme Hénin]

Change-Id: Iac15474fdd5dd293d4e298c183c180cedfe9e6e6

22 months agoUpdate Colvars to version 2017-09-14 (UI-based ABF estimator, fixes, doc updates) 29/3029/1
Giacomo Fiorin [Thu, 14 Sep 2017 23:23:08 +0000 (19:23 -0400)]
Update Colvars to version 2017-09-14 (UI-based ABF estimator, fixes, doc updates)

Below are the relevant commits from

d097612 2017-09-14 Remove spurious factor of 2 from acc_work [Jérôme Hénin]
79f7eef 2017-09-11 Add crash course to the doc [Jérôme Hénin]
03a61a4 2017-04-06 Add UI-based estimator [fhh2626]

Change-Id: Ib9f7d6de255254e3a3d35787d7d45f46cd36d5bb

22 months agoAdd cooperative groups to warp-synchronous PME offload code 22/3022/1
Jim Phillips [Wed, 13 Sep 2017 03:17:30 +0000 (22:17 -0500)]
Add cooperative groups to warp-synchronous PME offload code

Change-Id: Ide92f1c4def099906105237d0fff6d3684c472da

22 months agoAppend -ofi to NAMD platform when using Charm++ OFI libfabric layer 20/3020/1
Jim Phillips [Tue, 12 Sep 2017 20:55:47 +0000 (15:55 -0500)]
Append -ofi to NAMD platform when using Charm++ OFI libfabric layer

Change-Id: I40fe5797bc61c65cfc2907fbb08b5ca1be2b4b84