Merge branch 'origin/release-2020' into master
authorPaul Bauer <paul.bauer.q@gmail.com>
Wed, 6 May 2020 12:31:38 +0000 (14:31 +0200)
committerPaul Bauer <paul.bauer.q@gmail.com>
Wed, 6 May 2020 12:31:38 +0000 (14:31 +0200)
Resolved Conflicts:
admin/clang-tidy.sh
admin/containers/buildall.sh
admin/containers/utility.py
admin/dockerfiles/buildall.sh
admin/dockerfiles/ci-clang/Dockerfile
admin/dockerfiles/ci-docs-clang/Dockerfile
admin/dockerfiles/ci-docs-gcc/Dockerfile
admin/dockerfiles/ci-gcc/Dockerfile
admin/gitlab-ci/archive.gitlab-ci.yml
admin/gitlab-ci/documentation.gitlab-ci.yml
admin/gitlab-ci/global.gitlab-ci.yml
admin/gitlab-ci/gromacs.gitlab-ci.yml
admin/gitlab-ci/lint.gitlab-ci.yml
cmake/gmxManageSimd.cmake
cmake/gmxVersionInfo.cmake
docs/dev-manual/containers.rst
src/CMakeLists.txt
src/api/cpp/tests/testingconfiguration.h
src/buildinfo.h.cmakein
src/gromacs/CMakeLists.txt
src/gromacs/ewald/pme_only.cpp
src/gromacs/fileio/matio.cpp
src/gromacs/fileio/oenv.cpp
src/gromacs/gmxana/gmx_do_dssp.cpp
src/gromacs/gmxana/nrama.cpp
src/gromacs/gmxlib/network.cpp
src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp
src/gromacs/listed_forces/bonded.cpp
src/gromacs/mdlib/forcerec.cpp
src/gromacs/mdtypes/interaction_const.h
src/gromacs/nbnxm/pairlist.h
src/gromacs/selection/CMakeLists.txt
src/gromacs/simd/impl_x86_avx_256/impl_x86_avx_256_simd_double.h
src/gromacs/simd/impl_x86_avx_256/impl_x86_avx_256_simd_float.h
src/gromacs/simd/simd.h
src/gromacs/utility/basedefinitions.h
src/gromacs/utility/binaryinformation.cpp
src/testutils/CMakeLists.txt
src/testutils/TestMacros.cmake
src/testutils/testasserts.h

Change-Id: Ie157786299ca8f2d8c77a148b3bf1b1061f44b8a

36 files changed:
1  2 
admin/containers/buildall.sh
admin/containers/utility.py
cmake/gmxManageSimd.cmake
cmake/gmxVersionInfo.cmake
docs/CMakeLists.txt
docs/release-notes/2020/2020.2.rst
docs/release-notes/index.rst
src/CMakeLists.txt
src/api/cpp/CMakeLists.txt
src/api/cpp/tests/testingconfiguration.h
src/buildinfo.h.cmakein
src/gromacs/CMakeLists.txt
src/gromacs/domdec/domdec.cpp
src/gromacs/fileio/matio.cpp
src/gromacs/gmxana/gmx_do_dssp.cpp
src/gromacs/gmxana/nrama.cpp
src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp
src/gromacs/listed_forces/bonded.cpp
src/gromacs/mdlib/forcerec.cpp
src/gromacs/mdlib/sim_util.cpp
src/gromacs/mdrun/isimulator.h
src/gromacs/mdrun/md.cpp
src/gromacs/mdtypes/interaction_const.h
src/gromacs/nbnxm/grid.h
src/gromacs/nbnxm/nbnxm_setup.cpp
src/gromacs/nbnxm/pairlist.h
src/gromacs/options/optionstoragetemplate.h
src/gromacs/selection/CMakeLists.txt
src/gromacs/simd/impl_x86_avx_256/impl_x86_avx_256_simd_double.h
src/gromacs/simd/impl_x86_avx_256/impl_x86_avx_256_simd_float.h
src/gromacs/simd/simd.h
src/gromacs/topology/block.h
src/gromacs/utility/basedefinitions.h
src/gromacs/utility/binaryinformation.cpp
src/testutils/CMakeLists.txt
src/testutils/TestMacros.cmake

Simple merge
Simple merge
Simple merge
index 136b8893c8fbfb82df19c3762ac59fdb9a62a5e5,7ca2bff88208c52b04209629c0cdeae2d50fc81a..58f3ff6efc8389ca82ee090cc010f03057a7e155
@@@ -333,10 -331,13 +333,10 @@@ set(VERSION_INFO_DEPS         ${VERSION
  set(VERSION_INFO_CMAKEIN_FILE     ${CMAKE_CURRENT_LIST_DIR}/VersionInfo.cmake.cmakein)
  set(VERSION_INFO_CONFIGURE_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/gmxConfigureVersionInfo.cmake)
  # A set of directories to scan for calculating the hash of source files.
- set(SET_OF_DIRECTORIES_TO_CHECKSUM  "${PROJECT_SOURCE_DIR}/src")
- list(APPEND SET_OF_DIRECTORIES_TO_CHECKSUM "${PROJECT_SOURCE_DIR}/python_packaging")
+ set(SET_OF_DIRECTORIES_TO_CHECKSUM  "src")
+ list(APPEND SET_OF_DIRECTORIES_TO_CHECKSUM "python_packaging")
  # Due to the limitations for passing a list as arguments, we make the directories a string here
  string(REPLACE ";" ":" DIRECTORIES_TO_CHECKSUM_STRING "${SET_OF_DIRECTORIES_TO_CHECKSUM}")
 -# Try to find python for the checksumming script
 -set(PythonInterp_FIND_QUIETLY ON)
 -find_package(PythonInterp 3.5)
  
  # Rules to create the VersionInfo.cmake file.
  # For git info, the sequence is:
index 3d8ce9b2e0dea083010a4501d2473abaced3c19d,ca252f6648f3e40d3c02833331b21b822501fa6a..f5503ad2b0f3e50fc5e427d19ebdce3a81e8c779
@@@ -363,17 -361,9 +363,18 @@@ if (SPHINX_FOUND
          how-to/visualize.rst
          install-guide/index.rst
          release-notes/index.rst
 +        release-notes/2021/major/highlights.rst
 +        release-notes/2021/major/features.rst
 +        release-notes/2021/major/performance.rst
 +        release-notes/2021/major/tools.rst
 +        release-notes/2021/major/bugs-fixed.rst
 +        release-notes/2021/major/removed-functionality.rst
 +        release-notes/2021/major/deprecated-functionality.rst
 +        release-notes/2021/major/portability.rst
 +        release-notes/2021/major/miscellaneous.rst
          release-notes/2020/2020.1.rst
          release-notes/2020/2020.2.rst
+         release-notes/2020/2020.3.rst
          release-notes/2020/major/highlights.rst
          release-notes/2020/major/features.rst
          release-notes/2020/major/performance.rst
Simple merge
Simple merge
Simple merge
Simple merge
index 4e050d75b3e3e871ad30509a62d301d65fe66c09,2d4cf147f013d884bf1f21b690682fb55e955db4..3d160d7e1419e267e16f44da833fd62a7331546b
  #include <string>
  #include <vector>
  
+ #include "config.h"
 +#include <gtest/gtest.h>
 +
  #include "gromacs/gmxpreprocess/grompp.h"
  #include "gromacs/math/vec.h"
  #include "gromacs/utility/stringutil.h"
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 592c73ffa33f434847904de59051da6de5c14ca6,19e5c660dd26bf9e9eaa0a07b502f15d26b376d0..e23eef5bacac81b46820d97095190cd3f8cfbf02
@@@ -680,12 -721,12 +691,12 @@@ static void nb_free_energy_kernel(cons
                   */
                  real v_lr, f_lr;
  
-                 const RealType ewrt   = r * ewtabscale;
 -                const real ewrt   = r * coulombTableScale;
 -                int        ewitab = static_cast<int>(ewrt);
 -                const real eweps  = ewrt - ewitab;
 -                ewitab            = 4 * ewitab;
 -                f_lr              = ewtab[ewitab] + eweps * ewtab[ewitab + 1];
++                const RealType ewrt   = r * coulombTableScale;
 +                IntType        ewitab = static_cast<IntType>(ewrt);
 +                const RealType eweps  = ewrt - ewitab;
 +                ewitab                = 4 * ewitab;
 +                f_lr                  = ewtab[ewitab] + eweps * ewtab[ewitab + 1];
-                 v_lr = (ewtab[ewitab + 2] - ewtabhalfspace * eweps * (ewtab[ewitab] + f_lr));
+                 v_lr = (ewtab[ewitab + 2] - coulombTableScaleInvHalf * eweps * (ewtab[ewitab] + f_lr));
                  f_lr *= rinv;
  
                  /* Note that any possible Ewald shift has already been applied in
                   * r close to 0 for non-interacting pairs.
                   */
  
-                 const RealType rs   = rsq * rinv * ewtabscale;
 -                const real rs   = rsq * rinv * vdwTableScale;
 -                const int  ri   = static_cast<int>(rs);
 -                const real frac = rs - ri;
 -                const real f_lr = (1 - frac) * tab_ewald_F_lj[ri] + frac * tab_ewald_F_lj[ri + 1];
++                const RealType rs   = rsq * rinv * vdwTableScale;
 +                const IntType  ri   = static_cast<IntType>(rs);
 +                const RealType frac = rs - ri;
 +                const RealType f_lr = (1 - frac) * tab_ewald_F_lj[ri] + frac * tab_ewald_F_lj[ri + 1];
                  /* TODO: Currently the Ewald LJ table does not contain
                   * the factor 1/6, we should add this.
                   */
 -                const real FF = f_lr * rinv / six;
 -                real VV = (tab_ewald_V_lj[ri] - vdwTableScaleInvHalf * frac * (tab_ewald_F_lj[ri] + f_lr))
 -                          / six;
 +                const RealType FF = f_lr * rinv / six;
 +                RealType       VV =
-                         (tab_ewald_V_lj[ri] - ewtabhalfspace * frac * (tab_ewald_F_lj[ri] + f_lr)) / six;
++                        (tab_ewald_V_lj[ri] - vdwTableScaleInvHalf * frac * (tab_ewald_F_lj[ri] + f_lr))
++                        / six;
  
                  if (ii == jnr)
                  {
Simple merge
index c8725816b3814318f76b905cd49b5e480971d2c4,c7aeca1a8b7b1379716bda636cc67bf04cfb697d..3cb7e40a93c6e173f20f7a9fd45c712063f55d92
@@@ -749,14 -758,14 +749,15 @@@ static void init_ewald_f_table(const in
      }
  }
  
 -void init_interaction_const_tables(FILE* fp, interaction_const_t* ic)
 +void init_interaction_const_tables(FILE* fp, interaction_const_t* ic, const real tableExtensionLength)
  {
-     if (EEL_PME_EWALD(ic->eeltype))
+     if (EEL_PME_EWALD(ic->eeltype) || EVDW_PME(ic->vdwtype))
      {
-         init_ewald_f_table(*ic, tableExtensionLength, ic->coulombEwaldTables.get(), nullptr);
 -        init_ewald_f_table(*ic, ic->coulombEwaldTables.get(), ic->vdwEwaldTables.get());
++        init_ewald_f_table(*ic, tableExtensionLength, ic->coulombEwaldTables.get(),
++                           ic->vdwEwaldTables.get());
          if (fp != nullptr)
          {
-             fprintf(fp, "Initialized non-bonded Coulomb Ewald tables, spacing: %.2e size: %zu\n\n",
+             fprintf(fp, "Initialized non-bonded Ewald tables, spacing: %.2e size: %zu\n\n",
                      1 / ic->coulombEwaldTables->scale, ic->coulombEwaldTables->tableF.size());
          }
      }
index 5ff92d9e19401a2ee8f26246cd52f18c96521275,f2528d78b43e643e34847d67e543ac819a8dcf02..179e3116e525860395178d1cd60ebde5df26bead
@@@ -1099,11 -1104,16 +1099,11 @@@ void do_force(FILE
          haveCopiedXFromGpu = true;
      }
  
 -#if GMX_MPI
      // If coordinates are to be sent to PME task from GPU memory, perform that send here.
      // Otherwise the send will occur before the H2D coordinate transfer.
-     if (pmeSendCoordinatesFromGpu)
+     if (!thisRankHasDuty(cr, DUTY_PME) && pmeSendCoordinatesFromGpu)
      {
 -        /* Send particle coordinates to the pme nodes.
 -         * Since this is only implemented for domain decomposition
 -         * and domain decomposition does not use the graph,
 -         * we do not need to worry about shifting.
 -         */
 +        /* Send particle coordinates to the pme nodes */
          gmx_pme_send_coordinates(fr, cr, box, as_rvec_array(x.unpaddedArrayRef().data()), lambda[efptCOUL],
                                   lambda[efptVDW], (stepWork.computeVirial || stepWork.computeEnergy),
                                   step, simulationWork.useGpuPmePpCommunication, reinitGpuPmePpComms,
Simple merge
Simple merge
Simple merge
Simple merge
index 97805f7f1b5a615ab051922d41a9851858b35d16,162954c89d0fc87871208fb7e09c548d14ac5ab1..04f33159905bdc48ef3400306e01ba907f826352
@@@ -195,19 -146,17 +195,20 @@@ struct nbnxn_im_ei_
      int excl_ind = 0;
  };
  
 +//! Four-way j-cluster lists
  typedef struct
  {
 -    int           cj[c_nbnxnGpuJgroupSize];         /* The 4 j-clusters */
 -    nbnxn_im_ei_t imei[c_nbnxnGpuClusterpairSplit]; /* The i-cluster mask data       for 2 warps */
 +    //! The 4 j-clusters
 +    int cj[c_nbnxnGpuJgroupSize];
 +    //! The i-cluster mask data for 2 warps
 +    nbnxn_im_ei_t imei[c_nbnxnGpuClusterpairSplit];
  } nbnxn_cj4_t;
  
 -/* Struct for storing the atom-pair interaction bits for a cluster pair in a GPU pairlist */
 +//! Struct for storing the atom-pair interaction bits for a cluster pair in a GPU pairlist
  struct nbnxn_excl_t
  {
 -    /* Constructor, sets no exclusions, so all atom pairs interacting */
 +    //! Constructor, sets no exclusions, so all atom pairs interacting
+     MSVC_DIAGNOSTIC_IGNORE(26495) // pair is not being initialized!
      nbnxn_excl_t()
      {
          for (unsigned int& pairEntry : pair)
              pairEntry = NBNXN_INTERACTION_MASK_ALL;
          }
      }
+     MSVC_DIAGNOSTIC_RESET
  
 -    /* Topology exclusion interaction bits per warp */
 +    //! Topology exclusion interaction bits per warp
      unsigned int pair[c_nbnxnGpuExclSize];
  };
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index c17ce34641794eb71f4aa37eb87bc2122674eecf,1c4e0d71af97a5f7708fe24e4bf0ed80df9a5021..d668cb5d9c92e091fea6daa099d8cf130aee9de1
@@@ -166,9 -98,15 +166,15 @@@ function (gmx_add_gtest_executable EXEN
              set_target_properties(${EXENAME} PROPERTIES CXX_CLANG_TIDY
                  "${CLANG_TIDY_EXE};-warnings-as-errors=*;-header-filter=.*")
          endif()
 -        if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION MATCHES "^6\.0")
 +        if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "7")
              target_compile_options(${EXENAME} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Weverything ${IGNORED_CLANG_ALL_WARNINGS} -Wno-gnu-zero-variadic-macro-arguments -Wno-zero-as-null-pointer-constant -Wno-missing-variable-declarations>)
          endif()
+         # clang-3.6 warns about a number of issues that are not reported by more modern compilers
+         # and we know they are not real issues. So we only check that it can compile without error
+         # but ignore all warnings.
+         if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION MATCHES "^3\.6")
+             target_compile_options(${EXENAME} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-w>)
+         endif()
      endif()
  endfunction()