Changes to GROMACS tools

Improved selection error messages (use exceptions)

Make all selection parsing error handling use exceptions for error reporting, and improve the understandability and context-sensitivity of the messages. Make the code in params.cpp exception-safe. issue 655

Supported more complex fixed position selections

Make it possible to create selections like [0,0,0] plus [0,1,0] to specify a fixed set of positions. This can be useful at least for gmx gangle to calculate angles from a fixed reference vector. Such selections were already understood properly by the parser, but caused various crashes elsewhere in the code. Fixed those crashes by consistently managing the memory for the involved t_block structures (always allocate one value in the index array, even if the block is empty), and by not assuming that a plus-like keyword always has a child element in the evaluation tree. issue 1619.

Fixed crash with ‘z of ...’ within a selection expression

When a z of ... construct was used within an arithmetic expression in a selection, there were out-of-bounds array writes occurring during selection compilation. Initialize the number of values produced by such constructs correctly to avoid this.

Reworked gmx solvate, gmx insert-molecules and gmx sasa

This now use a branch-new analysis-tools neighbour-search implementation. These tools are now faster and less buggy!

Converted gmx rdf to the C++ analysis framework

Convert the RDF calculation tool to the new framework. Main changed beyond mechanical conversion:

  • Remove -com and -rdf options in favor of using selections directly. Both functionality, and a lot more, is now directly supported with proper selections.
  • Remove -hq and -fade options, as both are just post-processing that can be trivially done based on the output .xvg file alone.
  • Normalization is reworked to work with dynamic selections.
  • Add an -rmax parameter that allows specifying an upper cutoff for the RDF. Combined with the use of the neighborhood search routines, this potentially makes the tool a lot faster if the RDF is not required up to half the box length.

Add basic unit/regression tests for a simple water box. The reference values are not verified in any way, so they mainly catch regression bugs.

Added basic GPU support for gmx tune-pme

New functionality

  • permits the user to specify a per-node list of eligible GPU ids (as distinct from mdrun, which permits the user to specify the array of actual GPU ids to use), which it will then map to the PP ranks in round-robin style during the optimization
  • detects whether the mdrun is GPU-aware if the user specifies GPU ids
  • handles error from mdrun when number of PP ranks does not match the GPU id string provided
  • handles error from mdrun when GPU with given id is invalid
  • runs check that a .tpr will work mdrun with -npme 0, which is less likely to run into issues at small scale with eligible partitioning issues than -npme -1

This code does not do anything active about optimizing the use of OpenMP, as current-generation gmx tune_pme is basically designed to have no ability to change the number of MPI ranks at all. However, if the MPI system is set up such that mdrun’s automatic allocation of OpenMP threads to ranks will work, then the optimization can take place over runs that actually trigger the use of OpenMP. (This was true before this patch.)

issue 1119

Required gmx tune_pme to take -mdrun parameter

The transition away from many binaries in 5.0, and the removal of symlinks in 5.1 mean there is even less chance that a sensible default command line for calling mdrun can be provided. In general, mdrun might be in either precision, with or without MPI, with or without some custom suffix, inside the wrapper binary or from an mdrun-only build, or from a custom directory. Thus, the user is now required to say what command to call to run the simulation they want to optimize.

issue 1754

Added gmx pairdist tool as partial gmx mindist replacement

Add a new tool that can compute pairwise distances from one reference selections to one or more calculation selections. The tool can do minimum or maximum distance over the whole selection, as well as between each residue/molecule pair in the selections. This should provide (nearly) all the distance outputs that gmx mindist has, and with a bit of effort also be able to replace gmx mdmat.

The tool intentionally does not compute contact counts; those should be added into a separate tool to keep things simpler.

Fixed gmx trjconv modifying frame time stamp unnecessarily

There was a bug where gmx trjconv modified the input frame time, which caused issues with seeking in XTC files. This has recently been fixed by commit 81d10b25, but it’s better not to mess with the input frame and only modify the output frame.

issue 1405, issue 1406

Reorganized analysis of and documenting correlation functions

Moved routines computing correlation functions and fitting to those in a special subdirectory not dependent on gmxana. The autocorrelation now functions as it should (previously there were issues with long-time correlations). New manual section for curve fitting.

Replaced Levenberg-Marquardt algorithm by another implementation from, under a FreeBSD license.

The routines many_auto_correl and many_cross_correl are optimized using OpenMP.

Made ‘gmx sasa’ calculation thread-safe

Made gmx sasa computation mostly thread-safe (only the Connolly surface output isn’t). This in turn gives the first analysis tool that does a non-trivial amount of computation per frame in a thread-safe manner. Once we have TBB or some other proper threading library in use, it should then be straightforward to also implement threading support for the analysis framework, and actually have a tool where the benefit could be observable.

Made ‘gmx sasa’ volume computation translation-invariant

Compute the center of the molecule also when PBC is used, instead of using the origin as the center. The center is used for volume computation, and this makes the output translation-invariant with PBC. This also makes the results of PBC and no-PBC computation match for the same structure in case there are no contacts over the PBC.

The whole volume algorithm is broken if the molecule is split across PBC in the input structure (which is likely the case if one wants to use -pbc), and that would require substantially more effort (essentially, making each continuous surface whole before computing the volume), so only added a note to gmx sasa -h to explain this for now.

Added OpenMP parallelization to gmx wham

The inner loops of gmx wham now allow OpenMP parallelization. The computed PMFs are identical up to 5 digits at different number of threads and compared to a previous version of gmx wham. Compiles also without OpenMP support. Number of threads set with option -nt.