Fixes where mdrun could return incorrect results¶
Fixed reading of bonded tables¶
Now gmx mdrun -tableb
must name all tabulated bonded interaction
table files explicitly, because the former implicit naming scheme is
incompatible with the new command-line checking code.
Fixed bug with flat-bottomed position restraints and MPI and OpenMP¶
The flat-bottom reference coodinates got mixed up when running with MPI + OpenMP.
Fixed multi-sim + DD + simple distance restraints¶
The check should not look for the existence of a multi-sim, because the user must also set GMX_DISRE_ENSEMBLE_SIZE in order to get ensemble restraints.
Fixed OpenCL error with empty domains¶
We now don’t call the force clearing when there are zero elements to clear, as can happen with an empty domain with DD. Also simplified the clearing thread count calculation.
Handled partially frozen and constrained atoms¶
Atoms frozen along some, but not all dimensions would still be moved along all dimensions by constraints. Now such dimensions are frozen. Note that the initial configuration might not obey the constraints, which leads to conflicting demands of freezing and constraining. Partially frozen atoms in the initial configuration will still be constrained along all dimensions (but will be frozen during the run).
Fixed OpenCL error with empty domains¶
We now don’t call the force clearing when there are zero elements to clear, as can happen with an empty domain with DD. Also simplified the clearing thread count calculation.
Fix compile error for IBM VMX on ppc64¶
gcc-5.1 does not provide vec_mul(), only vec_madd(). This has already been fixed in the master branch with the new implementation.
Correct nrdf for 1D/2D systems¶
With COMM removal, grompp would subtract degrees of freedom also for VCM groups with fully frozen dimensions, i.e. 1D/2D systems. Also fixed division by zero for groups with #DOF=0 with VV.
Avoid assertion failure in pme_loadbal_do¶
When ir->init_step % ir->nstlist != 0 an assertion would fail in pme_loadbal_do. If it does not fail every time, the assertion can safely be replaced by a conditional return, which is now done in this case.
Fix incorrect CMAP parsing¶
The CMAP parsing in grompp expected exactly one space between atomtypes and would silently corrupt the parameters when more than one space was present.
Also added CMAP comparison to gmx check
.
Changed norm(...) > 0 condition to norm2(...) > 0 in init_ekindata()¶
Fixes issue Issue 1856 on K computer
Fix excessive list splitting¶
Due to a possible integer overflow, the pair list splitting code could end up over-splitting pair lists and causing large performance degradation. Due to the larger processor count, runs using AMD GPUs, using 100k+ simulation systems are more prone to suffer from the issue.
Fix Ewald 3DC dipole with Verlet scheme¶
With the Verlet scheme, the dipole for the Ewald 3DC correction was summed twice over the PP-ranks at non-NS steps, leads to a correction that was a factor #PP-ranks too high.
Remove restriction on dihdraltypes order¶
Wildcards are allowed for dihedraltypes by grompp. But it was assumed, with only code and no user documentation, that wildcard types come after fully specified types. If this order was switched, grompp would silently choose the wildcard matches. Now the match with the most real atom type matches is chosen. Added a paragraph to the bonded parameter section in the manual on dihedral wildcard matching.
Fix tabulated wall potential¶
The dispersion and repulsion of the tabulated wall potential were a factor too small by a factor 6 and 12 respectively.
Correct mdrun tMPI (non-)parallel error message¶
Fixes for mdrun performance issues¶
Added support for CUDA CC 6.0/6.1¶
This change adds build-system and kernel generator support for the Pascal architectures announced so far (GP100: 6.0, GP104: 6.1) and supported by the CUDA 8.0 compiler.
By default we now generate binary as well as PTX code for both sm_60 and sm_61 and given the considerable differences between the two, we also generate PTX for both virtual arch. For now we don’t add CC 6.2 (GP102) compilation support as know nothing about it.
On the kernel generation side, given the increased register file, for CC 6.0 the “wider” 128 threads/block kernels are enabled, on 6.1 and later the 64 threads/block remains.
Some macros that were incorrectly left behind by the adbada4 fix had to be eliminated from the CUDA host code because these caused double definitions.
Re-enable LJ-PME + Lorentz-Berthelot on GPUs¶
We do have GPU kernels which were enabled in 5.1.0, but got disabled with some refactoring before 5.1.1.
Fixes for gmx
tools¶
Fixed gmx dos
index handling¶
Prevented gmx pdb2gmx
writing to unallocated memory making specbonds¶
Mark optional input/output files in gmx order
¶
Mark files that are not always read, or which are not written if the user does not ask for them, with ffOPTRD/ffOPTWR instead of using ffREAD/ffWRITE. With changes in 5.1, files marked with ffREAD are really mandatory, since we check already during command-line parsing that the file actually exists (so that we can give a good error message). This change also improves the understandability of the help.
Removed broken memory reallocation in gmx dielectric
¶
Fix non-normalization of FFT autocorr¶
The function many_auto_correl incorrectly divided by the number of
data points, leading to incorrect absolute values of autocorrelation
functions, as e.g. out by gmx analyze -ac -nonormalize
.
Also simplified the FFT size calculation.
Added a test for -nonormalize functionality.
New consistency checks¶
Added QMMM checks¶
QMMM only works with cutoff-scheme=group and dynamics. grompp and mdrun now check for this. Also fixed potential print of NULL string in init_gaussian.
Build system enhancements¶
Ignore stderr when detecting SIMD and build info¶
Cray and some other stupid compilers echo extra stuff to stderr when compiling a normal source file. Unfortunately, the standard CMake try_run cannot ignore stderr, and we need to use some. Refactored our use to work around such compilers.
Make more CMake variables advanced¶
This keeps the ccmake display down to things users are reasonably likely to want to change, including several introduced by FindCuda in recent CMake versions.
Fix SIMD detection on new AMD AVX CPUs without fma¶
We earlier assumed that all AMD CPUs had fused multiply-add support and could use AVX_128_FMA, but with this change we properly detect it and revert to AVX_256 otherwise.
Warn about OpenMPI 1.8.6¶
Improved documentation¶
Fixed constants, units and conversion factors¶
The definition of pressure was wrong, should be in bar. There’s no point in giving a standard conversion factor to other units that nobody uses.
Corrected value of electric conversion factor f in the manual¶
- As suggested by Christopher Neale
- Made a new latex command for the value so that it can appear consistently throughout all uses in the .tex manual
- changed the value to f = 138.935 458(9), which is value and standard deviation calculated from NIST 2010 CODATA, as also used by GROMACS in units.h (full value calculated from numbers in units.h is f = 138.935 457 839 ... )
- If I calculated correctly, the pre-June-2015 value of the standard deviation was correct, just the last two digits of the value itself were swapped in some places 58(9) <-> 85(9)
- I believe commit 1ee3b15530a5 accidentally overwrote the standard deviation with digits from the value itself
Fix mdp label generation¶
The extra colons meant the rst didn’t generate the label that is expected.
Spelling fixes¶
Thanks to Nicholas Breen
Improved/enlarged Fig. 4.9 in manual for better readability¶
- Made the whole figure somewhat larger
- Made the axis text larger
- Added/updated the units: - kJ mole-1 -> kJ mol-1 - added degree unit
- Changed plot type from .eps to .pdf
Re-generated EPS for figure 4.8¶
It was hard to distinguish between i and j in this figure, which turns out to be from an inappropriate bounding box in the EPS version of it. Regenerated all three EPS components of Figure 4.8, which gives a satisfactory final appearance.
Fixed typo in Fourier dihedral equation¶
This now matches the version in the preceding subsection, and seems consistent with thoses equations and the code in convparm.c.
Updated reference manual text about PME tuning¶
Also removed some junk that has long been commented out.
Documented GMX_GPU_APPLICATION_CLOCKS
¶
Added description for the use of the GMX_GPU_APPLICATION_CLOCKS environment variable.
Make both ftp and http links for source download¶
Apparently some people aren’t allowed to use ftp.
House-keeping that reduces users’ problems¶
Reverted to old behavior for handling SETTLE errors¶
SETTLE errors were changed to fatal in 5.1.2. This causes problems with minimization of some systems, since a SETTLE error is likely to occur at the beginning of the minimization. This commit reverts that such that it only issues a warning as before.
Properly reset CUDA application clocks¶
We now store the application clock values we read when starting mdrun and reset to these values, but only when clocks have not been changed (by another process) in the meantime.
Used sysconf(_SC_NPROCESSORS_ONLN) better on x86¶
If we’re not on ARM and sysconf(_SC_NPROCESSORS_ONLN) doesn’t match sysconf(_SC_NPROCESSORS_CONF), we should use the former, as that is all that’s reliable, e.g. on x86 with hyperthreading disabled in the kernel.
Prevented use of mdrun -maxh -multi
¶
This didn’t work, but can’t be fixed safely. A proper fix has been made for the 2016 release.
Ignore empty GMXLIB environment variable¶
If the GMXLIB environment variable was set, but empty, it triggered an assert (at least) in pdb2gmx. Now this case is silently handled as if the variable wasn’t set at all.
Part of Issue 1928
Fixed large file issue on 32-bit platforms¶
At some point gcc started to issue a warning instead of a fatal error for the checking code; fixed to really generate an error now.