alexxy/gromacs.git
3 years agoReduce artifact size
Paul Bauer [Mon, 17 Aug 2020 08:39:17 +0000 (08:39 +0000)]
Reduce artifact size

Remove object files from build archives to reduce size.

Fixes #3630

Change-Id: Id841b91b8ab31d79579685c4aebaa67dec464962

3 years agoStopped using images in biophysics Docker repository
Mark Abraham [Mon, 17 Aug 2020 04:39:09 +0000 (06:39 +0200)]
Stopped using images in biophysics Docker repository

Also avoided compiling SIMD kernels for the build that
merely produces content for the tarballs.

Fixes #3619

3 years agoAvoid builds with RelWithDebInfo
Mark Abraham [Sun, 16 Aug 2020 08:01:10 +0000 (10:01 +0200)]
Avoid builds with RelWithDebInfo

These produce object and binary files that are larger than we need. If
we need that information to diagnose an issue, we can turn it on, or
build locally using the same Docker image.

Refs #3630

3 years agoFix isHostMemoryPinned for changes in CUDA 11.0
Mark Abraham [Mon, 17 Aug 2020 07:23:55 +0000 (07:23 +0000)]
Fix isHostMemoryPinned for changes in CUDA 11.0

Improved test coverage and output

Restored some test code to compile and execute.

Fixes #3631

3 years agoModular simulator: Don't wrap std::function in unique_ptr
Pascal Merz [Sun, 16 Aug 2020 08:48:03 +0000 (08:48 +0000)]
Modular simulator: Don't wrap std::function in unique_ptr

3 years agoAdd SIMD bonded tests and improve SIMD angles()
Berk Hess [Fri, 14 Aug 2020 19:23:02 +0000 (19:23 +0000)]
Add SIMD bonded tests and improve SIMD angles()

The listed_forces module bonded tests are now also executed for the
force-only and SIMD flavor of the bonded kernels, when available.

Improved precision of SIMD angles kernel for small angles by avoiding
two invsqrt operations for computing the sin.

3 years agoFix DeviceStreamManager tests
Artem Zhmurov [Fri, 14 Aug 2020 14:16:01 +0000 (14:16 +0000)]
Fix DeviceStreamManager tests

Wrong CMake macros was used which lead to DeviceStreamManager not
running for GPU builds.

3 years agoIntroduce flexible ModularSimulatorAlgorithmBuilder: Helper structs to connect propag...
Pascal Merz [Fri, 14 Aug 2020 12:21:48 +0000 (12:21 +0000)]
Introduce flexible ModularSimulatorAlgorithmBuilder: Helper structs to connect propagators to thermo/barostats

3 years agoAdd new FEP perturbation check functions
Berk Hess [Thu, 13 Aug 2020 13:13:10 +0000 (15:13 +0200)]
Add new FEP perturbation check functions

Added functions to check whether the system has perturbed masses
and perturbed constraints. Simplified the perturbed atoms check.

3 years agoCMake SYCL & Intel OpenMP handling
Erik Lindahl [Tue, 11 Aug 2020 11:25:09 +0000 (13:25 +0200)]
CMake SYCL & Intel OpenMP handling

This enables CMake handling of SYCL support in Intel
compilers, we warn the user to use the HPC toolkit
compilers that support OpenMP instead of the default
dpcpp. We attempt to disable SYCL by default when
using dpcpp (to avoid warnings). Source files that
need SYCL support should add SYCL_CXX_FLAGS.

For now it will not work to actually compile with
GMX_GPU=SYCL, since that enables code paths that
depend on the SYCL buffer implementations in the
pipeline.

3 years agoRemove superfluous math utility functions
Christian Blau [Thu, 13 Aug 2020 07:18:13 +0000 (09:18 +0200)]
Remove superfluous math utility functions

Remove max_cutoff and gmx_greatest_common_divisor from utilities.h.

max_cutoff was never used

C++17 introduces std::gcd, replacing gmx_greatest_common_divisor

3 years agoRevert to CUDA 10 image for CI
Mark Abraham [Wed, 12 Aug 2020 15:17:57 +0000 (17:17 +0200)]
Revert to CUDA 10 image for CI

Some pinning behaviors don't work with CUDA 11.0

Refs #3609

3 years agoimplement AVX-512 second FMA detection
Jeff Hammond [Wed, 12 Aug 2020 12:47:28 +0000 (12:47 +0000)]
implement AVX-512 second FMA detection

This uses the CPUID processor name.

We use the condensed method developed for Google cpu_features:
https://github.com/jeffhammond/cpu_features/blob/avx512_fma_count/src/cpuinfo_x86.c#L119
(this link will expire when it is merged into the upstream project)

A more pedantic approach is shown here:
https://github.com/jeffhammond/vpu-count/blob/master/vpu-count.c

This code must be updated when new Intel processors are released.
The author of this commit will bear that maintenance burden as long as possible.

Signed-off-by: Hammond, Jeff R <jeff.r.hammond@intel.com>
3 years agoFix virtual site vsiten indexing bug
Berk Hess [Wed, 12 Aug 2020 06:01:26 +0000 (06:01 +0000)]
Fix virtual site vsiten indexing bug

Fix bug introduced in b16cc028.

Change-Id: I9e4421851bbb3c4bd80e2810ecbfd4a987dde020

3 years agoMove density fitting checkpointing into state
Christian Blau [Mon, 10 Aug 2020 10:52:11 +0000 (10:52 +0000)]
Move density fitting checkpointing into state

The density fitting state and the data to checkpoint are one and the
same and should be treated in the same place. Moving the checkpointing
infrastructure for density fitting code into the state and closer to the
data that is to be checkpointed makes it easier to ensure that all
necessary data is writtten to a checkpoint file.

Introduced variable names to make sure that reading and writing from the
key-value-tree is symmetric and does not include typos.

Added read/write functions in checkpoint.h to simplify checkpoint
writing for this and other modules.

Change-Id: Ie7fa5e22333251db9050bb4491e61681651aa5c2

3 years agoIntroduce GlobalCommunicationHelper
Pascal Merz [Thu, 6 Aug 2020 22:30:23 +0000 (16:30 -0600)]
Introduce GlobalCommunicationHelper

In view of #3437 (!410), this introduces a helper container to store
data related to global communication. With the upcoming builder
approach, there won't be a central location where all elements are
created, so this helper container helps grouping related data allowing
for shorter call signatures. This helper object will become obsolete
when moving to a client-based global communication (#3421,
draft implementation ready).

3 years agoFix release build warning
Mark Abraham [Thu, 6 Aug 2020 06:33:59 +0000 (08:33 +0200)]
Fix release build warning

A build with clang as the nvcc host compiler gives warnings
on the CUDA headers, which are now suppressed. There's no good
way to only give the warnings on CUDA's headers.

3 years agoRevert "Modernize STL usage" for fixedCapacityVector
Alan Gray [Fri, 7 Aug 2020 12:24:15 +0000 (05:24 -0700)]
Revert "Modernize STL usage" for fixedCapacityVector

This reverts 2f876de263efdf08daf160e7791434cd760ccd9b for
fixedCapacityVector.h only. The syntax that was added is not yet
supported by the CUDA compiler (including the latest 11.0 version),
and as such this revertion is required to allow use of
fixedCapacityVector from within CUDA files (required for an upcoming
change). This should be added back when CUDA support for the syntax
arrives.

3 years agoAdd accumulation checks to ForeignLambdaTerms
Berk Hess [Fri, 7 Aug 2020 12:51:10 +0000 (12:51 +0000)]
Add accumulation checks to ForeignLambdaTerms

Added checks that accumulation of potential terms have been finalized.
This is generally good for avoiding bugs, but is needed in particular
for passing foreign lambda energy difference to AWH.

3 years agoImprove modular simulator builders
Pascal Merz [Fri, 7 Aug 2020 10:35:28 +0000 (10:35 +0000)]
Improve modular simulator builders

3 years agoSeparate ISimulator interface and data
Pascal Merz [Fri, 7 Aug 2020 08:24:47 +0000 (08:24 +0000)]
Separate ISimulator interface and data

In fulfillment of #3566 this separates ISimulator into a pure
virtual interface (still named ISimulator) and a data object
LegacySimulatorData.

The LegacySimulator now inherits from both classes, no other
changes are needed.

ModularSimulator takes the new LegacySimulatorData as an explicit
member object. ModularSimulatorAlgorithmBuilder uses a pointer to
this new member object rather than holding a copy of the
LegacySimulatorData members.

Closes #3566

3 years agoKeep all the infra and the user happy
Mark Abraham [Thu, 6 Aug 2020 12:47:42 +0000 (14:47 +0200)]
Keep all the infra and the user happy

Refs !330

3 years agoUpdate minimum tested CUDA to 11.0
Mark Abraham [Thu, 6 Aug 2020 12:19:46 +0000 (12:19 +0000)]
Update minimum tested CUDA to 11.0

Generate code for valid compute capabilities.

Suppressed a warning about codegen for deprecated architectures.

Fixes #3609

3 years agoSimplified uniform GPU selection in CMake
Erik Lindahl [Tue, 4 Aug 2020 19:27:21 +0000 (19:27 +0000)]
Simplified uniform GPU selection in CMake

GPU selection is now done by setting GMX_GPU to either CUDA
or OpenCL, with no other variables required. As part of the
overall CMake simplification, the CMake automatic detection
of hardware and "auto" settings for GPU acceleration have
been removed. This will require the user to explicitly enable
GPU support (which is a drawback), but it leads to much
simplier and shorter CMake code, similar support for CUDA and
OpenCL, and it will make it easier to handle multiple different
APIs targeting e.g. NVIDIA GPU hardware in the near future.

3 years agoFix compilation issue: pass variable of expected type to resize
Alan Gray [Tue, 4 Aug 2020 12:30:35 +0000 (12:30 +0000)]
Fix compilation issue: pass variable of expected type to resize

Compilation was failing under certian situations since a7e51062b4
because of the line
flags->resize(sizeNeededForBufferFlags(numAtoms),0);
since the second arg is expected to be of type gmx_bitmask_t to
match the type in the flags vector. This patch fixes by explicitly
passing a zeroed variable of the correct type.

3 years agoPrevent failed commandline_operation from publishing output files.
M. Eric Irrgang [Thu, 30 Jul 2020 11:04:00 +0000 (14:04 +0300)]
Prevent failed commandline_operation from publishing output files.

Also, add more sophisticated tests for commandline_operation: Test input
and output file arguments. The first of the tests is adapted from the
acceptance tests for 2020 functional requirement 3.

Fixes #3616

3 years agoMinor additions to gmxapi install.rst
M. Eric Irrgang [Fri, 31 Jul 2020 14:35:21 +0000 (17:35 +0300)]
Minor additions to gmxapi install.rst

Document more contingencies in gmxapi install docs.
* pre-release packages at PyPI
* advice to work around a bug from old third-party package dependencies

3 years agoUse importlib_resources in Python 3.6 images.
M. Eric Irrgang [Tue, 16 Jun 2020 10:48:26 +0000 (13:48 +0300)]
Use importlib_resources in Python 3.6 images.

Python 3.7 adds importlib.resources to the standard library, which
provides an efficient built in alternative to pkg_resources.
Backported functionality is available in the importlib_resources
package. We should add it to our Docker images to allow testing new
features while we still officially support Python 3.6.

See also issue #2961

3 years agoNormalize docker image names.
M. Eric Irrgang [Fri, 31 Jul 2020 13:31:09 +0000 (16:31 +0300)]
Normalize docker image names.

Change the name of the DockerHub image repository name to include the
name of the supported branch. Leave the tag unspecified when naming the
built images and when referencing images for CI jobs to get the standard
imagePullPolicy for the `latest` tag.

See also:
https://kubernetes.io/docs/concepts/configuration/overview/#container-images

Fixes #3618

3 years agoFix some minor typesetting issues.
M. Eric Irrgang [Fri, 31 Jul 2020 11:22:18 +0000 (14:22 +0300)]
Fix some minor typesetting issues.

Formatting errors in gmxapi install.rst

3 years agoImprove install docs links.
M. Eric Irrgang [Fri, 31 Jul 2020 11:49:55 +0000 (14:49 +0300)]
Improve install docs links.

Convert some mark-up that did not generate links into explicit links to
Python package URLs. Add some additional internal links.

3 years agoMove code to prepare for multisim class
Mark Abraham [Fri, 31 Jul 2020 12:57:18 +0000 (12:57 +0000)]
Move code to prepare for multisim class

Some write_checkpoint code organizes cooperation of behavior from
multiple modules so it is too high-level to be in a low-level module
like fileio. mdoutf.cpp is the caller of write_checkpoint so is a
decent spot to put that code. Other parts of write_checkpoint are
quite low level and share implementation details with the
checkpoint-reading code, so should stay in checkpoint.cpp.

Moved misplaced multisim code from md.cpp and md_support.cpp to
the multisim.cpp file, resolving some TODOs.

Fixed some wrong declarations for vsite code.

3 years agoRelease configs were using a wrong build type
Mark Abraham [Fri, 31 Jul 2020 08:33:34 +0000 (10:33 +0200)]
Release configs were using a wrong build type

3 years agoMove foreign potential energy accumulation
Berk Hess [Fri, 31 Jul 2020 08:47:03 +0000 (08:47 +0000)]
Move foreign potential energy accumulation

The potential energy contributions to the foreign lambda
Hamiltonian differences were summed in sum_dhdl() which meant
that the foreign energy differences were not complete when
do_force() returns. Now there are summed in
accumulatePotentialEnergies() which is called instead of sum_epot().

Also consistently changed the lambda vector to ArrayRef in the force
routines and made it const.

3 years agoMove sources for libgmxapi.
M. Eric Irrgang [Thu, 30 Jul 2020 14:17:53 +0000 (17:17 +0300)]
Move sources for libgmxapi.

Sources in src/api/cpp exclusively supported the public libgmxapi
interface whose headers now live in api/include/gmxapi. The sources are
not coupled to anything in src/gromacs or src, and have been moved to
api/cpp/gmxapi to better enforce this decoupling.

Currently, the unit tests for this code still rely on infrastructure in
src/ and cannot yet be moved.

Refs #3152

3 years agoRemove disabled test for superseded feature.
M. Eric Irrgang [Thu, 30 Jul 2020 10:02:32 +0000 (13:02 +0300)]
Remove disabled test for superseded feature.

3 years agoIgnore a generated file.
M. Eric Irrgang [Thu, 30 Jul 2020 11:13:07 +0000 (14:13 +0300)]
Ignore a generated file.

When a Python package is configured in "develop" mode, the source
directory is treated as the installed directory, so generated package
files end up in the source tree. This change tells `git` to ignore a
generated package file that will be present in a developer's source tree
after `python setupy.py develop`.

3 years agoUse GMXAPI CMake option guard for gmxapi target declaration.
M. Eric Irrgang [Wed, 29 Jul 2020 12:48:17 +0000 (12:48 +0000)]
Use GMXAPI CMake option guard for gmxapi target declaration.

A recent change moved the declaration of the `gmxapi` CMake library
target outside of a conditional. This change isolates the initial
configuration of the CMake target and restores the option guard.

Fixes #3604.

3 years agoFix undefined behavior flagged by UBSAN
Kevin Boyd [Wed, 29 Jul 2020 11:42:59 +0000 (11:42 +0000)]
Fix undefined behavior flagged by UBSAN

Running under the UBSAN sanitizer pointed out a bunch of undefined
behavior - most of them were harmless issues in rarely taken branches,
but should still be avoided.

3 years agoRevert c++-17 features that are not supported by CUDA build
Artem Zhmurov [Wed, 29 Jul 2020 10:48:30 +0000 (10:48 +0000)]
Revert c++-17 features that are not supported by CUDA build

C++-17 is fully supported only starting from CUDA 11, which is not
required currently. This rolls back some of the changes made in
2f876de263efdf08daf160e7791434cd760ccd9b and
106b2d8ded04dbc51031022e9b11d147dccb76a3 that broke the CUDA build.
The change should be reverted once c++17 is fully supported.

Fixes #3608
Refs #3609

3 years agoRevert c++-17 features that are not supported by CUDA build
Artem Zhmurov [Wed, 29 Jul 2020 03:46:11 +0000 (03:46 +0000)]
Revert c++-17 features that are not supported by CUDA build

C++-17 is fully supported only starting from CUDA 11, which is not
required currently. This rolls back some of the changes made in
2f876de263efdf08daf160e7791434cd760ccd9b and
106b2d8ded04dbc51031022e9b11d147dccb76a3 that broke the CUDA build.
The change should be reverted once c++17 is fully supported.

Fixes #3608
Refs #3609

3 years agoFix warnings in release builds
Mark Abraham [Wed, 22 Jul 2020 11:41:55 +0000 (13:41 +0200)]
Fix warnings in release builds

These suppressions need to be issued whether or not we are adding
developer warnings.

Change-Id: I34f4353a9172674b792488e86bf001dd2e8b917c

3 years agoFix clang-tidy warning
Artem Zhmurov [Mon, 27 Jul 2020 10:38:11 +0000 (13:38 +0300)]
Fix clang-tidy warning

clang-tidy complains about comparison of int and gmx::index,
since they are of different type.

3 years agoFix RDTSCP handling
Mark Abraham [Mon, 27 Jul 2020 12:16:56 +0000 (12:16 +0000)]
Fix RDTSCP handling

Commit 13def2872ae5311d tried to make all builds default to using
RDTSCP, which would have broken non-x86 builds. But it also
deactivated the implementation of RDTSCP support because HAVE_RDTSCP
was left undefined. So all it did was make timing on x86 less
efficient (plus e.g. DLB effects from that).

Used GMX_RDTSCP everywhere. Only the GROMACS project depends on
thread-MPI, so it's reasonable to let a GMX symbol leak in there (and
it's easily fixed if ever needed).

3 years agoAssertion string and typo fix
Simon Christ [Fri, 24 Jul 2020 09:52:32 +0000 (09:52 +0000)]
Assertion string and typo fix

3 years agoTwo sets of coefficients for Coulomb FEP PME on GPU
Magnus Lundborg [Mon, 20 Jul 2020 10:17:02 +0000 (10:17 +0000)]
Two sets of coefficients for Coulomb FEP PME on GPU

The first patch in a series to enable running Coulomb FEP PME on GPU.
Use two sets of coefficients to store atom charges.

Refs #2054, #3117

Change-Id: Iab6eb7ac766800f7c045dc5a00069e77509d391f

3 years agoFollow up to "Separate StatePropagatorData element" (!363)
Pascal Merz [Sat, 18 Jul 2020 06:27:10 +0000 (06:27 +0000)]
Follow up to "Separate StatePropagatorData element" (!363)

StatePropagatorData, EnergyData, and FreeEnergyPerturbationData
have all been separated into a pure data class and an Element
member object. The three were intended to be following the same
design principles, but were merged in three separate MR. The
design was improved in reviews of the EnergyData and
FreeEnergyPerturbationData MRs, leaving StatePropagatorData
with some of the design flaws ironed out in the other two.
This commit adapts StatepropagatorData and its member Element
to the improved design. Specifically:

* Build the Element in the constructor of StatepropagatorData.
  To this end, the change in signature of the constructor is
  partially rolled back to have all required data available.
* The element is accessed using a simple getter method, doing
  away with building at first invocation or throwing exceptions
  when accessed more than once.

3 years agoIntroduce modular simulator exceptions
Pascal Merz [Thu, 16 Jul 2020 16:38:23 +0000 (10:38 -0600)]
Introduce modular simulator exceptions

This introduces a new base exception for modular simulator, and a
few exceptions inheriting from this base exception. Having a
modular simulator base class allows to easily add exceptions without
touching (4!) files outside the module. The introduced derived
exceptions are all used in the fulfillment of #3437. Introducing them
in a separate commit allows to keep the final commit smaller.

3 years agoBegin moving installed interface to `api/`
M. Eric Irrgang [Wed, 15 Jul 2020 13:29:47 +0000 (16:29 +0300)]
Begin moving installed interface to `api/`

Create `api/` directory outside of `src/` to decouple the public
interface from the internal and build tree infrastructure.

Move the `gmxapi` installed headers to `api/include/gmxapi`.
The public header maintenance (once managed with custom CMake functions)
is now reduced to filesystem layout and `install` commands in
`api/CMakeLists.txt`

Deferred to future changes:
* Split public and developer doxygen builds.
* Move remaining libgmxapi public interface details to `api/gmxapi`
* Re-expose essential public facilities from libgromacs to allow
  (re-)deprecation of ENABLE_LEGACY_API.

Refs #3288

3 years agoSeparate Element from FreeEnergyPerturbationData
Pascal Merz [Thu, 11 Jun 2020 06:48:11 +0000 (00:48 -0600)]
Separate Element from FreeEnergyPerturbationData

Mirroring the StatePropagatorData and EnergyData, the free energy
element is split up into a data part that is accessed by other
elements, and a member class which implements the ISimulatorElement
to allow for updating and checkpointing of lambda values.

Refs #3437

3 years agoDivide default communicator from DD communicators
Mark Abraham [Wed, 15 Jul 2020 17:09:31 +0000 (17:09 +0000)]
Divide default communicator from DD communicators

The communicators mpi_comm_mysim and mpi_comm_mygroup inside
t_commrec got initialized in init_commrec (to MPI_COMM_WORLD
if no multisim, to a subset otherwise). These communicators
were then used in subsequent setup work, before they got
reassigned during the construction of the DDBuilder object
and the construction of the actual domain decomposition object.
Effectively, this means that the same communicators (and, hence,
identical function calls) do very different things depending on
whether they get used before or after the setup of domain
decomposition. It also means that before DD set up, mpi_comm_mysim
and mpi_comm_mygroup are *identical*.

This change introduces an additional communicator within
t_commrec, mpiDefaulCommunicator, which helps to make these
implicit assumptions explicit. Consequently, this also redefines
PAR(cr), MASTER(cr), and SIMMASTER(cr).

This change will allow to move the sim and group communicators,
which are now only created at DD time, into the DD object,
logically separating the DD object from t_commrec.

Refs #2395

3 years agoFix the suspicious string literal error in GPU status description
Artem Zhmurov [Wed, 15 Jul 2020 16:05:08 +0000 (16:05 +0000)]
Fix the suspicious string literal error in GPU status description

Fixes clang-tidy error, introduced by broken string in
d2ba568ac6d5d3b6a1ef996618a1367307872d03

3 years agoSeparate energy data and element
Pascal Merz [Tue, 14 Jul 2020 13:27:20 +0000 (13:27 +0000)]
Separate energy data and element

The EnergyElement was both holding data which is accessed by
a majority of the elements, and was an element itself. The element
part is needed to update the energy records and save data for
trajectory writing.
The double nature of the EnergyElement created some difficulty in
initializing the elements, however - the EnergyElement
has a well defined place within the simulator loop, but has to be
created ahead of time so that other elements can get a pointer to it
to query for or save energy data during the simulation run.

This change separates the ISimulatorElement implementation which
allows EnergyElement to take part in the simulation loop
into a member object. The data part of the EnergyElement is renamed
to EnergyData, the element is EnergyData::Element. The EnergyData
can now be created ahead of element construction time, while an
object of the member class can be created later. This will make the
implementation of a builder approach significantly easier.
The life time of the element is managed by the EnergyData object to
avoid problematic life time dependencies between the two.

Refs #3437

3 years agocmake: export cxx standard
Christoph Junghans [Sat, 11 Jul 2020 16:32:07 +0000 (16:32 +0000)]
cmake: export cxx standard

3 years agoFix libgromacs CMake target install syntax.
M. Eric Irrgang [Fri, 10 Jul 2020 12:34:03 +0000 (15:34 +0300)]
Fix libgromacs CMake target install syntax.

Make `install(TARGETS libgromacs...` conform to the documented usage at
https://cmake.org/cmake/help/v3.13/command/install.html#programs

Refs #3592

3 years agoDivide default communicator from DD communicators
Pascal Merz [Thu, 9 Jul 2020 12:08:59 +0000 (12:08 +0000)]
Divide default communicator from DD communicators

The communicators mpi_comm_mysim and mpi_comm_mygroup inside
t_commrec got initialized in init_commrec (to MPI_COMM_WORLD
if no multisim, to a subset otherwise). These communicators
were then used in subsequent setup work, before they got
reassigned during the construction of the DDBuilder object
and the construction of the actual domain decomposition object.
Effectively, this means that the same communicators (and, hence,
identical function calls) do very different things depending on
whether they get used before or after the setup of domain
decomposition. It also means that before DD set up, mpi_comm_mysim
and mpi_comm_mygroup are *identical*.

This change introduces an additional communicator within
t_commrec, mpiDefaulCommunicator, which helps to make these
implicit assumptions explicit. Consequently, this also redefines
PAR(cr), MASTER(cr), and SIMMASTER(cr).

This change will allow to move the sim and group communicators,
which are now only created at DD time, into the DD object,
logically separating the DD object from t_commrec.

Refs #2395

3 years agoFix issues found with clang-tidy
Mark Abraham [Wed, 8 Jul 2020 14:00:40 +0000 (16:00 +0200)]
Fix issues found with clang-tidy

3 years agoUse signed arithmetic in enumeration helper
Kevin Boyd [Wed, 8 Jul 2020 13:44:30 +0000 (13:44 +0000)]
Use signed arithmetic in enumeration helper

With a signed enum and the unsigned step, implicit conversion to unsigned
could change the value in the subtraction operator. Note that errors could
also occur with negative results in pure unsigned operations.

A negative result isn't expected for increasing enumerators, but the boost
iterator implementation does an == comparison that invokes the diff operator
and compares it to 0, and this error actually occurs there in unit tests,
and is caught by UBSAN.

Added some SFINAE to disable accidental instantiation of non-enum
types - before C++ 20 std::underlying_type on a non-enum is undefined.

3 years agoEnforce unsigned type in flags.
Kevin Boyd [Wed, 8 Jul 2020 11:31:20 +0000 (11:31 +0000)]
Enforce unsigned type in flags.

Flag enums could be signed types - since the only operations performed
by the flags were bit ops, this was harmless, but the implicit signed/
unsigned conversions are caught in analysis tools like UBSAN that can
also catch real issues.

Added a compile-time enforcement of underlying unsigned type to the
flags class, and specified uint64_t for underlying type of the class
and the various flags that are passed to it.

Added some SFINAE to disable accidental instantiation of non-enum
types - before C++ 20 std::underlying_type on a non-enum is undefined.

3 years agoSeparate StatePropagatorData element
Pascal Merz [Wed, 8 Jul 2020 10:24:48 +0000 (10:24 +0000)]
Separate StatePropagatorData element

The StatePropagatorData was both holding data which is accessed by
a majority of the elements, and was an element itself. The element
part is needed to save state information for printout and checkpointing.
The double nature of StatePropagatorData created some difficulty in
initializing the elements, however - the StatePropagatorData
has a well defined place within the simulator loop, but has to be
created ahead of time so that other elements can get a pointer to it
to query for state data during the simulation run.

This change separates the ISimulatorElement implementation which
allows StatePropagatorData to take part in the simulation loop
into a member object. The StatePropagatorData can now be created
ahead of element construction time, while an object of the member
class can be created any time later. This will make the implementation
of a builder approach significantly easier.

Refs #3437

3 years agoMove finalising routine into mtop
Christian Blau [Tue, 7 Jul 2020 18:33:21 +0000 (18:33 +0000)]
Move finalising routine into mtop

Change-Id: I383ceb3b48e5eddafc3f8ea96fc3b326d34602ef

3 years agoMove densityfitting to its own directory
Paul Bauer [Tue, 7 Jul 2020 16:10:13 +0000 (16:10 +0000)]
Move densityfitting to its own directory

Preparing for adding more applied_forces modules

Change-Id: Ieec20d1f0752a369d26352ec6b0997812decd21e

3 years agoFix unsigned integer overflow bug in spline tables
Kevin Boyd [Tue, 7 Jul 2020 15:07:07 +0000 (15:07 +0000)]
Fix unsigned integer overflow bug in spline tables

Subtraction of two uints could lead to a huge positive rather than
a correct negative number. Found by UBSAN integer check (though
not technically undefined behavior)

3 years agoAdd stricter ASAN checks
Kevin Boyd [Sun, 5 Jul 2020 20:55:53 +0000 (13:55 -0700)]
Add stricter ASAN checks

ASAN supports some checks that are turned off by default. Enabling
these adds ~30-40% overhead.

3 years agoAnnotate modular simulator headers with exposure level
Pascal Merz [Tue, 7 Jul 2020 10:46:53 +0000 (10:46 +0000)]
Annotate modular simulator headers with exposure level

This change adds comments to the doxygen commen on top of each header file
to describe which files are exposed outside the modular simulator module.

3 years agoMake cl_nbparam into a struct
Artem Zhmurov [Tue, 7 Jul 2020 09:50:45 +0000 (09:50 +0000)]
Make cl_nbparam into a struct

This is needed to unify with CUDA path

3 years agoMove foreign potential energy accumulation
Berk Hess [Mon, 6 Jul 2020 15:14:31 +0000 (15:14 +0000)]
Move foreign potential energy accumulation

The potential energy contributions to the foreign lambda
Hamiltonian differences were summed in sum_dhdl() which meant
that the foreign energy differences were not complete when
do_force() returns. Now there are summed in
accumulatePotentialEnergies() which is called instead of sum_epot().

Also consistently changed the lambda vector to ArrayRef in the force
routines and made it const.

3 years agoModernize STL usage
Roland Schulz [Mon, 6 Jul 2020 14:19:37 +0000 (14:19 +0000)]
Modernize STL usage

3 years agoAvoid overflow in RNG
Kevin Boyd [Mon, 6 Jul 2020 01:37:21 +0000 (18:37 -0700)]
Avoid overflow in RNG

Instead of checking for overflow, get necessary information about
number of bits from type attributes.

This technically wasn't undefined behavior but with strict UBSAN
settings got tagged in tests.

3 years agoFix cycle counters for "comm.coord" and "Wait + Comm. F" to support GPU halo exchange...
Gaurav Garg [Mon, 22 Jun 2020 16:31:13 +0000 (22:01 +0530)]
Fix cycle counters for "comm.coord" and "Wait + Comm. F" to support GPU halo exchange path
Replace buffer ops counters with GPU launch counters for GPU backend.

3 years agoUse vector in atoms2md instead of pointer
Joe Jordan [Fri, 3 Jul 2020 09:55:37 +0000 (09:55 +0000)]
Use vector in atoms2md instead of pointer

At all call sites for atoms2md the underlying vector was cast to an int pointer.
This change makes it easier to inspect the values passed to atoms2md in a
debugger while incurring no performance penalty.

3 years agoSeparate ModularSimulator and ModularSimulatorAlgorithm
Pascal Merz [Fri, 3 Jul 2020 08:02:09 +0000 (08:02 +0000)]
Separate ModularSimulator and ModularSimulatorAlgorithm

This introduces the ModularSimulatorAlgorithm, which takes over some
responsibilities from ModularSimulator. The ModularSimulatorAlgorithm
owns the elements, and allows ModularSimulator to run a simulation
following the prescribed algorithm. This change is only refactoring -
no functionality is added or removed, but separating the algorithm and
its builder from the simulator allows to develop the two independently.

The ModularSimulatorAlgorithm is built by ModularSimulatorAlgorithmBuilder.
In a first approach, ModularSimulatorAlgorithmBuilder creates an appropriate
algorithm based on the input passed from the runner level (md or md-vv, thermo-
and / or barostat, constraining, FEP, etc).

Eventually, the builder will not need to know about all possible algorithms,
but offer an interface for its user to creat algorithms. Currently, the only
planned user of the ModularSimulatorAlgorithm is the ModularSimulator itself.
In view of this, two "hacks" were used to reduce unnecessary line changes
to simplify review: The builder mirrors all protected members of ISimulator,
and some of its member function implementations were left in modularsimulator.cpp.
Note that both of these "hacks" will disappear in subsequent changes.

Refs #3437

3 years agoCoordinate transformation on single RVecs
Christian Blau [Mon, 17 Feb 2020 15:22:36 +0000 (16:22 +0100)]
Coordinate transformation on single RVecs

So far, coordinate transforamtions of TranslateAndScale and Scale
classes could only performed on ArrayRefs. This meant that
transformations of single RVecs had to be done by first constructing an
ArrayRef on a single RVec x with the unintuitive and cumbersome
transform({&x,&x+1}).

Now this call is reduced to transform(&x) and respective calls.

Change-Id: I0d1f9d2f5ba90a46b1afc9b617af606995e0df59

3 years agoSimplify Iterators
Roland Schulz [Wed, 1 Jul 2020 16:27:30 +0000 (16:27 +0000)]
Simplify Iterators

3 years agoRevert "Make everything run on Gitlab infrastructure."
Paul Bauer [Tue, 30 Jun 2020 14:30:04 +0000 (16:30 +0200)]
Revert "Make everything run on Gitlab infrastructure."

This reverts commit af3b2782f26d6bde2975a581de7b3fc8bf69b954.

3 years agoUpdated the change management documentation
Christian Blau [Wed, 1 Jul 2020 14:29:05 +0000 (14:29 +0000)]
Updated the change management documentation

Describe how to upload and review code on gitlab.
Introduce merge-requests and approvals.

3 years agoClean up simulatorbuilder.h
M. Eric Irrgang [Wed, 1 Jul 2020 11:44:24 +0000 (11:44 +0000)]
Clean up simulatorbuilder.h

Sort forward declarations to improve readability.
Reduce unnecessary `#include`s.

3 years agoDisable failing builds for master branch
Paul Bauer [Wed, 1 Jul 2020 08:45:02 +0000 (10:45 +0200)]
Disable failing builds for master branch

Change builds that use failing docker containers

Changes builds away from the
gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
and gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi:master images
that have failed over the recent days.

For now set to use
gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
and gromacs/cmake-3.15.7-llvm-9-openmpi:master images.

Change-Id: I92ad04c65021005345668262be1eccecb149a694

3 years agoMake everything run on Gitlab infrastructure.
Paul Bauer [Mon, 29 Jun 2020 20:18:36 +0000 (20:18 +0000)]
Make everything run on Gitlab infrastructure.

Change-Id: I0cfbc2e287641d9f9e9e1cf3a54c9237a6d6c8e2

3 years agoAdd missing ABI header.
M. Eric Irrgang [Fri, 26 Jun 2020 15:41:21 +0000 (18:41 +0300)]
Add missing ABI header.

simulatorbuilder.cpp did not include "gmxpre.h"

3 years agoIncrease BD ulp tolerance to avoid spurious test failures
ejjordan [Fri, 26 Jun 2020 11:53:03 +0000 (13:53 +0200)]
Increase BD ulp tolerance to avoid spurious test failures

3 years agoChange ArrayRef to use a proper iterator
Roland Schulz [Fri, 26 Jun 2020 16:03:46 +0000 (16:03 +0000)]
Change ArrayRef to use a proper iterator

Fixes #2859

3 years agoMinor cleanup in gmx bar
Paul Bauer [Thu, 25 Jun 2020 17:06:28 +0000 (19:06 +0200)]
Minor cleanup in gmx bar

Just to make static analyser happy in dependent change.

Change-Id: I3e590b8ee7e6fa81ed334556dec86c2f7e7f4425

3 years agoImplement SimulatorBuilder.add() for BoxDeformationHandle.
M. Eric Irrgang [Thu, 23 Apr 2020 15:34:32 +0000 (18:34 +0300)]
Implement SimulatorBuilder.add() for BoxDeformationHandle.

Refs #3567

3 years agoUse TopologyData.
M. Eric Irrgang [Thu, 23 Apr 2020 15:16:21 +0000 (18:16 +0300)]
Use TopologyData.

Refs #3567

3 years agoUse IonSwapping parameter.
M. Eric Irrgang [Thu, 25 Jun 2020 12:03:27 +0000 (15:03 +0300)]
Use IonSwapping parameter.

Refs #3567

3 years agoUse CenterOfMassPulling
M. Eric Irrgang [Thu, 23 Apr 2020 15:06:30 +0000 (18:06 +0300)]
Use CenterOfMassPulling

Refs #3567

3 years agoUse ReplicaExchange member instead of build() argument.
M. Eric Irrgang [Thu, 23 Apr 2020 15:03:05 +0000 (18:03 +0300)]
Use ReplicaExchange member instead of build() argument.

Refs #3567

3 years agoUse SimulatorModules parameter.
M. Eric Irrgang [Thu, 23 Apr 2020 14:58:11 +0000 (17:58 +0300)]
Use SimulatorModules parameter.

Refs #3567

3 years agoUse InteractiveMD SimulatorBuilder parameter.
M. Eric Irrgang [Thu, 23 Apr 2020 14:54:19 +0000 (17:54 +0300)]
Use InteractiveMD SimulatorBuilder parameter.

Refs #3567

3 years agoUse LegacyInput.
M. Eric Irrgang [Thu, 23 Apr 2020 14:52:08 +0000 (17:52 +0300)]
Use LegacyInput.

Refs #3567

3 years agoUse ConstraintsParam.
M. Eric Irrgang [Thu, 23 Apr 2020 14:37:02 +0000 (17:37 +0300)]
Use ConstraintsParam.

Refs #3567

3 years agoMove Profiling parameter out of simulatorbuilder.build()
M. Eric Irrgang [Thu, 23 Apr 2020 14:29:25 +0000 (17:29 +0300)]
Move Profiling parameter out of simulatorbuilder.build()

Refs #3567

3 years agoUse SimulatorEnv
M. Eric Irrgang [Thu, 23 Apr 2020 14:21:51 +0000 (17:21 +0300)]
Use SimulatorEnv

Refs #3567

3 years agoImplement remaining SimulatorBuilder.add() methods.
M. Eric Irrgang [Thu, 23 Apr 2020 13:22:03 +0000 (16:22 +0300)]
Implement remaining SimulatorBuilder.add() methods.

Refs #3567

3 years agoInterface for remaining SimulatorBuilder.add() methods.
M. Eric Irrgang [Thu, 23 Apr 2020 13:03:20 +0000 (16:03 +0300)]
Interface for remaining SimulatorBuilder.add() methods.

Refs #3567

3 years agoCompletely encapsulate membed logic in MembedHolder
ejjordan [Thu, 23 Apr 2020 09:08:50 +0000 (12:08 +0300)]
Completely encapsulate membed logic in MembedHolder

Refs #3567

3 years agoMake holder for simulation configuration
Artem Zhmurov [Tue, 21 Apr 2020 14:30:03 +0000 (17:30 +0300)]
Make holder for simulation configuration

Make a class that holds values of:

useModularSimulator
mdrunOptions
startingBehavior
doRerun
runScheduleWork

inside the SimulatorBuilder.

Refs #3567

3 years agoUse SimulatorStateData.
Prashanth Kanduri [Mon, 22 Jun 2020 14:59:57 +0000 (17:59 +0300)]
Use SimulatorStateData.

Implement `SimulatorBuilder.add(SimulatorStateData&&)`

Refs #3567

3 years agoAdd MembedHolder for SimulatorBuilder.
ejjordan [Tue, 21 Apr 2020 14:23:38 +0000 (17:23 +0300)]
Add MembedHolder for SimulatorBuilder.

Implement SimulatorBuilder.add(MembedHolder&&)

Refs #3567