portability aspects in install guide + minor tweaks

Added information on portability aspects related to CPU instruction
sets, related to #1428.

Additionally, made several minor updates and tweaks related to
compilers, platforms, cmake, etc.

Change-Id: I621262c939c119e5bdd5e7c91dda0ae3ffc60b7b
Removed deprecated Encad FF.

Change-Id: Ib7f5c3d9920307a808dde9ef13b0f042827eb8ca
Suppress icc warning for Boost 1.55 use of #pragma once

Change-Id: Ib187cf34ba2c72a2c57fc55cfd26154508e9543b
Permit warning-free use of Andersen thermostat

Simulations using Andersen thermostat don't need to remove center of
mass motion, because that is intrinsic to the algorithm. Using it with
nstcomm > 1 generated a warning that center-of-mass removal is
unnecessary. Using it with nstcomm == 0 generated a warning that
ice-cube artifacts might be generated. Resolved by suppressing the
latter warning for both Andersen thermostats.

Change-Id: I6b2c1594cabd81964b3ba1ebc5dd61e0f1debb5e
Fixed bug with LJ pot-switch in 4xN kernels

The recent commit of LJ switch functions in the nbnxn kernels
contained a bug in the 4xN kernels which caused the force on some
pairs not to be switched.

Change-Id: Ib4303223924e92d7e84641071a4a56955de70274
Implemented LJ-PME nbnxn kernels

Implemented nbnxn SIMD and C kernels for LJ-PME. CUDA kernels will
follow later.
The nbnxn LJ-PME kernels subtract the full mesh contribution, using
the mesh C6 coefficients (usually geometrically combined). This gives
much higher accuracy for non-geometric force-fields.
The group kernels will soon be changed to use the same setup.

Change-Id: Ibbc6eef1c62a97ff6b2e3013f19594946581e44e
Clean up options for domain decomposition

Documented mdrun options better. Documented the environment variables.
Renamed the environment variables to better describe their function.
Renamed the helper function because not all of these environment
variables relate to numbers of steps.

Change-Id: I12dba40f8cdf489ea23c3f4dd8810efde54a4aaf
Keep compilers happy on BG/Q

Change-Id: I99439b002f95145504c359fddc61dc701431d8f0
Fixes seperate PME nodes without LJ-PME

The very recent LJ-PME nbnxn patch dereferenced a NULL pointer
with seperate PME nodes without LJ-PME. Also LJ parameters were
communicated when not needed.

Change-Id: I40bd0c8f96294b54599afee6021139b71cc8c860
Add ThreadSanitizer build type

This might be useful for helping detect misuse of thread
operations.

It does run quite slowly, so use in an automatic per-patch Jenkins
build is probably not a good idea. In any case, it should be run
on a real workload, as well as toy examples.

As discussed in the CMake file that manages the new build type, using
TSan requires that CMake can demand that atomic operations are not
used. Accordingly, the atomic.h functionality and the CMake atomics
testing that uses it have some changes so all the ways atomic.h is
used work correctly. Documentation of how and why things work is
expanded.

A benign race condition with the (unused) return value of
mdrunner_start_threads is fixed.

Change-Id: I0da01c0bedeec2e49d4456d757c54fbe58c56ef4
Fix GMX_PRIu32 and GMX_PRIu64 for MSVC

Change-Id: Ib7490c66687d98a135338d51de41bfda35b8938d
Replace all mdrun rngs with cycle based rng

The stateful random rumber generator (rng) used previously doesn't
produce reproducible results in parallel for sd/bd and doesn't
produce reproducible results for continutation for replica exchange.
The rng state has been removed from the checkpoint file.

Fixes #995

Change-Id: Id2a5d064cf363c54db3c16a0675cfeba553feeaa
Redesigned SIMD module and unit tests.

Second part of the commit (after renaming), which contains
the actual functionality changes. This new version
implements a complete interface layer that
is architecture-agnostic, while each architecture has a
separate implementation file with both single, double and
simd4 versions (that can be used simultaneously). simd.h
contains a number of defines that describe the capabilities
of the instruction set, and there is a new documentation
module for Doxygen. This will be used in a later patch
for modularized verlet kernels. With that, we hope to remove
all architecture-specific SIMD code from the rest of Gromacs.
All SIMD math functions have been redesigned so they work even
with instruction sets that do not support integers (and even
on sets that do not support logical operations), and
accuracy has been improved for double precision sincos() by
removing the table implementation. To try to reduce
the size of this relatively large patch I have kept a few
header files (in particular the math files in gromacs/simd)
to avoid touching all the group kernels. With this new kernel
module, 256-bit AVX2 SIMD acceleration will now automatically be
enabled for the verlet kernels. Group kernels will use AVX_256
in this case. Also incorporates changes from Teemu to make
static and gmx_inline library functions appear correctly in
the Doxygen documentation.
Relocation of nbnxn SIMD setup from nb_verlet.h to nbnxn_simd.h
in mdlib by Berk. Now the nbnxn SIMD setup is completely internal.
Replaced the pr4 functions in the nbnxn kernels by simd4.
The nbnxn kernel selection is now nearly architecture agnostic.
Also enabled FMA again for pmecorr SIMD functions in double.

Change-Id: I643da75f346f120500682bcc4bcc1333a635db70
Use reduce in pme

Use the reduce added to the simd module. Also fixes that
aligned store was used for possible unaligned stack buffer.

Change-Id: I5e08b0a0998fe5371148d1af9668fd6f2ecd5934
ICC aliasing optimization flags

GCC already uses -fstrict-aliasing (-ansi-alias). Thus it is safe
to also use this for optimization in ICC. const/non-const aliasing
shouldn't be used anywhere either and should be safe too.

Change-Id: I6a1b10c3d00bc2473a25a15e26934f61c046157d
Updating and improving Andersen thermostat documentation

Added mdp options for andersen thermostat, and updated to
reflect changes in 5.0, plus add a citation for one of the assertions.

Change-Id: Ia713a4f2dd39dd5224952be334d8953b6613a66e
Added message to warn that group kernels are deprecated.

Nothing will change for now, but both grompp and mdrun now
warn that we will remove the support for group kernels in
a future version when all interaction forms are supported by
the verlet cutoff scheme (tentatively a year from now).

Change-Id: Id00a67e44e60818cb0e6f1897d6939f53ea01540
Misc. Doxygen build system improvements

- Check Doxygen version when running one of the Doxygen targets, and
  produce a note that states the expected version if there is a
  mismatch.
- Check the result of the Doxygen process and fail the build if the
  program returns an error code.
- Add a tag to all warnings that identify the type of documentation that
  produces them.  This should make it easier to understand the Jenkins
  warnings in the case not all documentation types produce a certain
  warning.

Change-Id: I030c0b2c69958fe41f0b964399cb1c2e1b250e77
Fix -Wmaybe-uninitialized warnings in some files

Also clean-up and clarification of clean_vsite_dihs.

Change-Id: Ica4b1d17039e23bc2274a20fe5abca18295a7593
Signed-off-by: Alexey Shvetsov <alexxy@omrb.pnpi.spb.ru>
Free-energy now works with the Verlet scheme

Implemented perturbed non-bonded interactions with the Verlet
by masking them from the nbnxn pair lists and storing them in an
old-fashioned group neighbor list. This way we keep a single
free energy kernel.
The free energy kernel uses OpenMP atomic for reductions.

Also fixed grompp setting nstcalcenergy=0 with nstenergy=0.

Change-Id: I5a6a7e84b46e06250d141e2e08cb3a11077cddab