Miscellaneous changes

Updated physical constants from NIST 2010 CODATA

Minor fixes (usually to the 5-6th decimal), and more constants have been derived the basic ones instead of specifying values directly. The units section in the manual has been updated accordingly. issue 1671

Hardware reporting now covers all nodes

The CPU and GPU hardware reporting and checking were only printed for the node(s) of the master rank(s) of each simulation. Now the most important CPU and GPU information is reduced over MPI_COMM_WORLD. These results are printed and checks/warnings are now based on this. OpenMP thread count now prints thread count ranges over ranks. GPU usage report adds host name with multiple MPI ranks. issue 1643

Avoided near-silent generation of zero energies during reruns

There is note printed about this case for Verlet+GPU+energy groups, and this is OK for normal simulations because the decomposition of the energy into groups is unimportant. However, a user doing such a rerun is probably seeking the energy decomposition, and in that case getting zeroes is unexpected behaviour.

Instead, default to not using GPUs with mdrun -rerun -nb auto and more than one energy group. In that case with mdrun -rerun -nb gpu, give a fatal error and suggest the probable solutions.

Added tip4pew parameters to oplsaa.ff

The parameters come from: Horn et al. (2004). J. Chem. Phys. 120, 9665-9678 http://dx.doi.org/10.1063/1.1683075

Improved and clarify mdrun behavior with nsteps<0

Instead of silently ignoring nsteps<-2 values passed on the command line, mdrun now issues fatal error for these invalid inputs only ignoring -2 (which is the default). Also clarified the use of “infinite” runs with nsteps=-1.

Updated bundled TNG version to 1.7.6

Large parts of the TNG code have been rewritten to avoid code duplication. Some bug fixes and improved test suite.

Handled integer vectors correctly in DD error message

issue 1659

Added support for MemorySanitizer checking

A new MemorySanitizer build type can be used to check correctness of code in GROMACS. (AddressSanitizer and ThreadSanitizer already had build types available)

Enabled fp-exceptions

This can help with finding errors quicker because mdrun crashes as soon as a floating point value overflows or is invalid. fp-exceptions are only enabled for builds with asserts (without NDEBUG), mainly because it isn’t always possible to avoid invalid fp operations for SIMD math without a performance penalty.

Also, fix a few places where we had 1/0 or other invalid fp operations.

issue 1582

Fixed constraints checks in grompp

This adds F_CONSTRNC to the set of interactions that should trigger checks on SHAKE and LINCS parameters, and permits the MTTK check to test also for SETTLE for its warning. The latter will also be used to prevent MTTK + any constraints in a subsequent patch.

Made mdrun print the list of compatible GPUs

This extends functionality so that the available, compatible, and actually-used GPU IDs are reported when that makes sense. This will help (e.g.) gmx tune-pme optimize resource usage by running mdrun to probe for the available hardware.

The old implementation and documentation had a few issues that have been corrected or updated. The major issue was that the list of compatible device IDs was formed and then replaced by the list of device IDs to use, so the former was no longer available during subsequent output.

Added .travis.yml

Make use of travis-ci.org once a commit is pushed to github

Added flat-bottom cylindrical restraints in x and y.

The code previously only allowed the long axis of the cylinder to be aligned along z. This patch allows the cylinder to be aligned along any axis.

Old topologies and .tpr files will still work for all geometries with g values from 2 to 5, as 2 is now just a synonym for a z-directional cylinder. The new values are g=6 for x, g=7 for y, and g=8 for z. The manual has been updated to reflect these changes.

Introduced a new static function that computes forces and energy for the flat-bottom restraint.

issue 1577

Updated template/README

Add a link to Doxygen documentation about the template, and replace outdated information about the build system with a link to a more up-to-date description in the Doxygen documentation.

The links are to the nightly Doxygen build for now and for simplicity, but in principle could be replaced by links to deployed documentation for a release once that happens.

Used native CMake mechanism for find_package(GROMACS)

Instead of various detection stuff that only worked well in the presence of pkg-config, use native CMake mechanisms: package configuration files and automatic export of library import definitions. Include directories and preprocessor macros influencing the installed headers are still propagated separately. The new mechanism also works for arbitrary suffixes, and is relocatable (as long as external libraries that GROMACS links against are not moved). A simple FindGROMACS.cmake is still there to hide some of the complexity to support multiple suffixes, but it is not strictly necessary if the using code wants to do those slightly more complex find_package() invocations directly.

Generalize the machinery that populated libgromacs.pc to use it also for this purpose.

The machinery and its current limitations are documented in the Doxygen page on using GROMACS as a library. Some of these could possibly be improved with additional effort, but the current approach is hopefully a reasonable compromise between usability, robustness, and complexity.

issue 1430, issue 1554

Added input file options that accept missing files

Add a flag to t_filenm and to FileNameOption that makes input options not fail when the user-provided file does not exist. Add tests for the functionality. Use the flag for -cpi option to support using the same command line for initial and continuation runs. issue 1672

Fixed double precision reference SIMD and gcc bug

The double precision logical operations on floats were incorrect for the reference SIMD implementation for C source, and GCC appears to be buggy with C++. This might be slower, but the reference implementation is not used for production anyway.

Changed mdrun -deffnm to append _pullx_ and _pullf to pull files

Changes mdrun -deffnm behavior for pulling so that the pullx and pullf files can only use names that don’t collide. Previously, this resulted in one being backed up and checkpoint restarts failing when mdrun -deffnm was used.

issue 942

Corrected nstcalclr/nstfep/nst_repl_ex checks

Several checks with twin-range electrostatics still checked for multiples of nstlist instead of nstcalclr, and nst_repl_ex was not checked at all. Free-energy with small nstdhdl triggered frequent, unnecessary neighbor search. It seems this can’t have caused isssues with free-energy, because nstfep needs to be a multiple of nstcalcenergy which again needs to be a multiple of nstcalclr (was nstlist).

Fixed compile issues on K computer

Fix a compiler bug in the latest K environment (1.2-17) related to a bug in the system headers.

Reenabled SIMD kernels when running without cut-offs

In 4.6, there was a bug that caused incorrect results with group scheme SIMD kernels with systems without cut-offs. This seems to have been resolved already in 5.0.

issue 1249

Changed to use MPI_THREAD_FUNNELED when available

We have never observed any problems with MPI and OpenMP, but for compliance we should call MPI_Init_thread() and try to get MPI_THREAD_FUNNELED support level.

issue 1127

Replaced hardware threads by logical cores in output

All user output now uses the term “logical cores” to report the number of hardware threads.

Updated FFTW recommendations in install-guide.

Both SSE2 and AVX should be used, and there is now info about the upcoming FFTW-3.3.5 with more SIMD support, as well as a link to an unofficial prerelease on the gmx site.

issue 1696

Automated the mdrun -gpu_id option

With the number of PP ranks <= the number of GPUs in a node, the GPU id’s were already assigned automatically. Now with the number of PP ranks a multiple of the number of GPUs, and GPU sharing is possible, the GPU id’s are assigned automatically.

Updated gmx help output

Various changes to console help output (and some to man output) based on feedback in issue 1687:

  • People seem to prefer a centered startup header with some ASCII art, so made the first output line just like that (except if running with -quiet), and center the list of authors.
  • Always start the option description at a new line.
  • Give more space to various parts of the option list so that they are more likely to align up.
  • Split the file listing based on input/output type. This causes, e.g., some logically related options (e.g., -cpi and -cpo) to get separated in the output, but this seems to be the preferred approach.
  • Add formatting to the synopsis on man pages (similar to how the options appeared in the 4.6-era man pages, except that reasonable line wrapping is still there).

Removed non-standard atom types from OPLS/AA and CHARMM27

Removed atom types Cu2+, Fe2+ and SI from oplsaa and charmm27, since they are not part of the official force fields.

issue 957

Made bond-atomtypes case sensitive

This change is needed for e.g. the GLYCAM force field to work. This change makes the bond-atomtype handling consistent with the normal atom type handling, which was already made case sensitive. Note that this only requires case matching internally within the force field files, this does not affect handling of user input.

Changed the (inconsistent) bond-atomtypes to uppercase for two dihedrals parameter lines in CHARMM27.

Removed information about obsolete .edo file format

Essential dynamics output is written to edsam.xvg file since version 4.6

Fixed PGI compiler flag

Work around compiler crashes by removing inter-procedural analysis. Removed the extra -fastsse option which is identical to the -fast option already added for release build types. Updated the warning about not recommending PGI for now.

Added more new quotes

Lots of them