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.)
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.
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.
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 http://apps.jcns.fz-juelich.de/doku/sc/lmfit, 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
.