Merge branch release-2016
authorMark Abraham <mark.j.abraham@gmail.com>
Sat, 14 Jan 2017 20:58:57 +0000 (21:58 +0100)
committerMark Abraham <mark.j.abraham@gmail.com>
Sat, 14 Jan 2017 21:21:56 +0000 (22:21 +0100)
Retained master branch version of fixes for ICC on windows.

Preserved the fix for 2efc195a97f92 despite refactoring of init_em.

Change-Id: Iae54ac040cb2d72d38b0bf3a0a762a9384e4c02d

12 files changed:
CMakeLists.txt
cmake/FindFFTW.cmake
cmake/gmxCFlags.cmake
cmake/gmxManagePluginSupport.cmake [new file with mode: 0644]
cmake/gmxTestCXX11.cmake
src/gromacs/domdec/domdec_topology.cpp
src/gromacs/gmxana/gmx_anaeig.cpp
src/gromacs/gmxana/gmx_covar.cpp
src/gromacs/gmxana/gmx_editconf.cpp
src/gromacs/gmxana/gmx_nmeig.cpp
src/gromacs/gmxana/gmx_tune_pme.cpp
src/gromacs/mdlib/minimize.cpp

index 4f0181e0827cab82ae009e815038340e338a36ed..8aa1f796a1351daa8bc819ecb0e30ebabde3e712 100644 (file)
@@ -1,7 +1,7 @@
 #
 # This file is part of the GROMACS molecular simulation package.
 #
-# Copyright (c) 2009,2010,2011,2012,2013,2014,2015,2016, by the GROMACS development team, led by
+# Copyright (c) 2009,2010,2011,2012,2013,2014,2015,2016,2017, by the GROMACS development team, led by
 # Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
 # and including many others, as listed in the AUTHORS file in the
 # top-level source directory and at http://www.gromacs.org.
@@ -267,8 +267,6 @@ gmx_dependent_cache_variable(GMX_SIMD_REF_DOUBLE_WIDTH "Reference SIMD double pr
 
 option(GMX_BROKEN_CALLOC "Work around broken calloc()" OFF)
 mark_as_advanced(GMX_BROKEN_CALLOC)
-option(GMX_LOAD_PLUGINS "Compile with plugin support, needed to read VMD supported file formats" ON)
-mark_as_advanced(GMX_LOAD_PLUGINS)
 
 option(GMX_OPENMP "Enable OpenMP-based multithreading" ON)
 
@@ -687,32 +685,13 @@ include(gmxManageFFTLibraries)
 
 include(gmxManageLinearAlgebraLibraries)
 
-# Whether GROMACS will really try to compile support for VMD plugins
-set(GMX_USE_PLUGINS OFF)
+include(gmxManagePluginSupport)
 
-if(GMX_LOAD_PLUGINS)
-  if(NOT WIN32)
-    # Native Windows does not have, nor need dlopen
-    include(gmxTestdlopen)
-    gmx_test_dlopen(HAVE_DLOPEN)
-  endif()
-
-  # so, should we use plug-ins?
-  if(WIN32 OR (HAVE_DLOPEN AND BUILD_SHARED_LIBS))
-    if(NOT VMD_QUIETLY)
-      MESSAGE(STATUS "Using dynamic plugins (e.g VMD-supported file formats)")
-    endif()
+if (GMX_USE_PLUGINS)
     if(NOT GMX_VMD_PLUGIN_PATH)
-      find_package(VMD)
+        find_package(VMD)
     endif()
-    set(GMX_USE_PLUGINS ON)
-    list(APPEND GMX_EXTRA_LIBRARIES ${CMAKE_DL_LIBS}) # magic cross-platform pre-set variable for dlopen library
-    set(PKG_DL_LIBS "-l${CMAKE_DL_LIBS}")
-  else()
-    set(PKG_DL_LIBS)
-  endif()
 endif()
-set(VMD_QUIETLY TRUE CACHE INTERNAL "")
 
 # Link real-time library for POSIX timers. The check for clock_gettime
 # confirms the linkability of rt.
index c6058a7561ed227640e4962717fc7e14bc74a4ec..9e4620f35616c1602ed6c664b74292c739c21ffd 100644 (file)
@@ -1,7 +1,7 @@
 #
 # This file is part of the GROMACS molecular simulation package.
 #
-# Copyright (c) 2012,2013,2014,2015, by the GROMACS development team, led by
+# Copyright (c) 2012,2013,2014,2015,2016,2017, by the GROMACS development team, led by
 # Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
 # and including many others, as listed in the AUTHORS file in the
 # top-level source directory and at http://www.gromacs.org.
@@ -152,7 +152,7 @@ if (${FFTW}_FOUND)
   endif()
 
   #Verify FFTW is compiled with fPIC (necessary for shared libraries)
-  if (CMAKE_OBJDUMP AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND BUILD_SHARED_LIBS AND NOT CYGWIN)
+  if (CMAKE_OBJDUMP AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND BUILD_SHARED_LIBS AND NOT CYGWIN AND NOT APPLE)
       execute_process(COMMAND ${CMAKE_OBJDUMP} --reloc ${${FFTW}_LIBRARY} OUTPUT_VARIABLE ${FFTW}_OBJDUMP)
       if (${${FFTW}_OBJDUMP} MATCHES "R_X86_64" #Should always be true for static libraries. Checks that objdump works properly and that the library isn't dynamic
               AND NOT ${${FFTW}_OBJDUMP} MATCHES "R_X86_64_PLT32")
index 6210a2e04fe4828e6eb950ed11b7c60325d2a64c..924db05e03183a19ad7a8b1e8e0136498607e605 100644 (file)
@@ -1,7 +1,7 @@
 #
 # This file is part of the GROMACS molecular simulation package.
 #
-# Copyright (c) 2009,2010,2011,2012,2013,2014,2015,2016, by the GROMACS development team, led by
+# Copyright (c) 2009,2010,2011,2012,2013,2014,2015,2016,2017, by the GROMACS development team, led by
 # Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
 # and including many others, as listed in the AUTHORS file in the
 # top-level source directory and at http://www.gromacs.org.
@@ -213,12 +213,12 @@ GMX_TEST_CFLAG(CFLAGS_WARN "/W3 /wd177 /wd411 /wd593 /wd981 /wd1418 /wd1419 /wd1
             GMX_TEST_CXXFLAG(CXXFLAGS_DEBUG "-O0" GMXC_CXXFLAGS_DEBUG)
             GMX_TEST_CXXFLAG(CXXFLAGS_FP_RELASSERT "-fp-model except -fp-model precise" GMXC_CXXFLAGS_RELWITHASSERT)
         else()
-#809: exception specification for virtual function X is incompatible with that of overridden function
             if(NOT GMX_OPENMP)
                 GMX_TEST_CXXFLAG(CXXFLAGS_PRAGMA "/wd3180" GMXC_CFLAGS)
             endif()
             if (GMX_COMPILER_WARNINGS)
-GMX_TEST_CXXFLAG(CXXFLAGS_WARN "/W3 /wd177 /wd383 /wd411 /wd444 /wd809 /wd981 /wd1418 /wd1572 /wd1599 /wd2259 /wd3280 /wd11074 /wd11076 /wd2282" GMXC_CXXFLAGS)
+#809: exception specification for virtual function X is incompatible with that of overridden function
+                GMX_TEST_CXXFLAG(CXXFLAGS_WARN "/W3 /wd177 /wd383 /wd411 /wd444 /wd809 /wd981 /wd1418 /wd1572 /wd1599 /wd2259 /wd3280 /wd11074 /wd11076 /wd2282" GMXC_CXXFLAGS)
             endif()
             GMX_TEST_CXXFLAG(CXXFLAGS_OPT "/Qip" GMXC_CXXFLAGS_RELEASE)
         endif()
diff --git a/cmake/gmxManagePluginSupport.cmake b/cmake/gmxManagePluginSupport.cmake
new file mode 100644 (file)
index 0000000..e3af827
--- /dev/null
@@ -0,0 +1,98 @@
+#
+# This file is part of the GROMACS molecular simulation package.
+#
+# Copyright (c) 2016,2017, by the GROMACS development team, led by
+# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+# and including many others, as listed in the AUTHORS file in the
+# top-level source directory and at http://www.gromacs.org.
+#
+# GROMACS is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation; either version 2.1
+# of the License, or (at your option) any later version.
+#
+# GROMACS is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with GROMACS; if not, see
+# http://www.gnu.org/licenses, or write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+#
+# If you want to redistribute modifications to GROMACS, please
+# consider that scientific software is very special. Version
+# control is crucial - bugs must be traceable. We will be happy to
+# consider code for inclusion in the official distribution, but
+# derived work must not be called official GROMACS. Details are found
+# in the README & COPYING files - if they are missing, get the
+# official version at http://www.gromacs.org.
+#
+# To help us fund GROMACS development, we humbly ask that you cite
+# the research papers on the package. Check out http://www.gromacs.org.
+
+include(gmxOptionUtilities)
+
+# Sets GMX_USE_PLUGINS=ON in the parent scope if the toolchain and
+# user selections permit the build to support plugin loading.
+function(gmx_manage_plugin_support)
+    gmx_option_trivalue(GMX_LOAD_PLUGINS "Compile with plugin support, needed to read VMD supported file formats" AUTO)
+    mark_as_advanced(GMX_LOAD_PLUGINS)
+
+    # Find out if non-Windows builds can support plugins. Native Windows
+    # neither needs nor has library support.
+    if (NOT WIN32)
+        # TODO Make a proper find_package for dlopen to find
+        # dlfcn.h. The CMake variable CMAKE_DL_LIBS works magically
+        # for the library, however.
+        include(gmxTestdlopen)
+        gmx_test_dlopen(HAVE_DLOPEN)
+    endif()
+
+    # Keep the status line quiet unless something relevant has
+    # changed.
+    gmx_check_if_changed(EMIT_STATUS_MESSAGES GMX_LOAD_PLUGINS BUILD_SHARED_LIBS HAVE_DLOPEN)
+
+    # Whether GROMACS will really try to compile support for VMD
+    # plugins.
+    set(GMX_USE_PLUGINS OFF)
+
+    # Plugins are supported natively on Windows
+    if (WIN32 OR (BUILD_SHARED_LIBS AND HAVE_DLOPEN))
+        set(GMX_USE_PLUGINS ${GMX_LOAD_PLUGINS})
+    elseif(GMX_LOAD_PLUGINS)
+        # Can't support plugins for some reason. If the user required
+        # plugins, emit fatal errors. Otherwise, emit status messages
+        # for AUTO and be silent for OFF.
+        set(message "")
+        if (NOT HAVE_DLOPEN)
+            set(message "${message}dlopen() support for using dynamic plugins for VMD-supported file formats is missing. ")
+        endif()
+        if(NOT BUILD_SHARED_LIBS)
+            set(message "${message}GROMACS only supports plugins in a build that uses shared libraries, which can be disabled for various reasons. BUILD_SHARED_LIBS=on and a toolchain that supports dynamic linking is required. (Hint: GMX_PREFER_STATIC_LIBS and GMX_BUILD_MDRUN_ONLY can influence the default BUILD_SHARED_LIBS, so if you need plugins, reconsider those choices.) ")
+        endif()
+        if (GMX_LOAD_PLUGINS_FORCE)
+            message(FATAL_ERROR "${message}Cannot build with GMX_LOAD_PLUGINS=${GMX_LOAD_PLUGINS}.")
+        endif()
+        if (GMX_LOAD_PLUGINS_AUTO AND EMIT_STATUS_MESSAGES)
+            message(STATUS "${message}")
+        endif()
+    endif()
+
+    if(EMIT_STATUS_MESSAGES)
+        if(GMX_USE_PLUGINS)
+            MESSAGE(STATUS "Using dynamic plugins (e.g VMD-supported file formats)")
+        else()
+            MESSAGE(STATUS "Not using dynamic plugins (e.g VMD-supported file formats)")
+        endif()
+    endif()
+    set(GMX_USE_PLUGINS ${GMX_USE_PLUGINS} PARENT_SCOPE)
+endfunction()
+
+gmx_manage_plugin_support()
+
+if(GMX_USE_PLUGINS)
+    list(APPEND GMX_EXTRA_LIBRARIES ${CMAKE_DL_LIBS}) # magic cross-platform pre-set variable for dlopen library
+    set(PKG_DL_LIBS "-l${CMAKE_DL_LIBS}")
+endif()
index ea6bed874f22bf5500c1ca78e2ba70a8d55dd763..2e90358ba7863394109c9f1d4cb52b08a951042b 100644 (file)
@@ -1,7 +1,7 @@
 #
 # This file is part of the GROMACS molecular simulation package.
 #
-# Copyright (c) 2012,2013,2014,2015,2016, by the GROMACS development team, led by
+# Copyright (c) 2012,2013,2014,2015,2016,2017, by the GROMACS development team, led by
 # Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
 # and including many others, as listed in the AUTHORS file in the
 # top-level source directory and at http://www.gromacs.org.
@@ -102,6 +102,7 @@ extern template void someFunction<int>();
 int main() {
   // Test nullptr
   double *x = nullptr;
+  (void)x; // Suppressing unused variable warning
   // Test range-based for loops
   int array[5] = { 1, 2, 3, 4, 5 };
   for (int& x : array)
index d9950c7eb5b948ade529e13e5ec4aeda047e4c6e..f72368454ac20f3a8e184276cd9e3bfcfb6c5f9e 100644 (file)
@@ -1266,40 +1266,33 @@ static void combine_idef(t_idef *dest, const thread_work_t *src, int nsrc,
             /* Position restraints need an additional treatment */
             if (ftype == F_POSRES || ftype == F_FBPOSRES)
             {
-                int nposres = dest->il[ftype].nr/2;
-                if (nposres > dest->iparams_posres_nalloc)
+                int          nposres       = dest->il[ftype].nr/2;
+                // TODO: Simplify this code using std::vector
+                t_iparams * &iparams_dest  = (ftype == F_POSRES ? dest->iparams_posres : dest->iparams_fbposres);
+                int         &posres_nalloc = (ftype == F_POSRES ? dest->iparams_posres_nalloc : dest->iparams_fbposres_nalloc);
+                if (nposres > posres_nalloc)
                 {
-                    dest->iparams_posres_nalloc = over_alloc_large(nposres);
-                    srenew(dest->iparams_posres, dest->iparams_posres_nalloc);
+                    posres_nalloc = over_alloc_large(nposres);
+                    srenew(iparams_dest, posres_nalloc);
                 }
+
                 /* Set nposres to the number of original position restraints in dest */
                 for (int s = 1; s < nsrc; s++)
                 {
                     nposres -= src[s].idef.il[ftype].nr/2;
                 }
+
                 for (int s = 1; s < nsrc; s++)
                 {
-                    if (ftype == F_POSRES)
-                    {
-                        for (int i = 0; i < src[s].idef.il[ftype].nr/2; i++)
-                        {
-                            /* Correct the index into iparams_posres */
-                            dest->il[ftype].iatoms[nposres*2] = nposres;
-                            /* Copy the position restraint force parameters */
-                            dest->iparams_posres[nposres] = src[s].idef.iparams_posres[i];
-                            nposres++;
-                        }
-                    }
-                    else
+                    const t_iparams *iparams_src = (ftype == F_POSRES ? src[s].idef.iparams_posres : src[s].idef.iparams_fbposres);
+
+                    for (int i = 0; i < src[s].idef.il[ftype].nr/2; i++)
                     {
-                        for (int i = 0; i < src[s].idef.il[ftype].nr/2; i++)
-                        {
-                            /* Correct the index into iparams_fbposres */
-                            dest->il[ftype].iatoms[nposres*2] = nposres;
-                            /* Copy the position restraint force parameters */
-                            dest->iparams_fbposres[nposres] = src[s].idef.iparams_fbposres[i];
-                            nposres++;
-                        }
+                        /* Correct the index into iparams_posres */
+                        dest->il[ftype].iatoms[nposres*2] = nposres;
+                        /* Copy the position restraint force parameters */
+                        iparams_dest[nposres]             = iparams_src[i];
+                        nposres++;
                     }
                 }
             }
index 23251a08c6be14046a10b5515ff3755a96e6b549..9e4b629b5b873480b193eebdd1cf31bf5ae32520 100644 (file)
@@ -1026,9 +1026,11 @@ int gmx_anaeig(int argc, char *argv[])
         "of both files will be used unless [TT]-first[tt] and [TT]-last[tt]",
         "have been set explicitly.[PAR]",
 
-        "When [TT]-v[tt], [TT]-eig[tt], [TT]-v2[tt] and [TT]-eig2[tt] are given,",
-        "a single number for the overlap between the covariance matrices is",
-        "generated. The formulas are::",
+        "When [TT]-v[tt] and [TT]-v2[tt] are given, a single number for the",
+        "overlap between the covariance matrices is generated. Note that the",
+        "eigenvalues are by default read from the timestamp field in the",
+        "eigenvector input files, but when [TT]-eig[tt], or [TT]-eig2[tt] are",
+        "given, the corresponding eigenvalues are used instead. The formulas are::",
         "",
         "         difference = sqrt(tr((sqrt(M1) - sqrt(M2))^2))",
         " normalized overlap = 1 - difference/sqrt(tr(M1) + tr(M2))",
index 1234232ef53b8773e5410858b37ec14537af1aaf..3c0a8499156b048c9e84dd2c8323e840c1620cdd 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
  * Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014,2015,2017, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015,2016,2017, by the GROMACS development team, led by
  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
  * and including many others, as listed in the AUTHORS file in the
  * top-level source directory and at http://www.gromacs.org.
@@ -75,7 +75,8 @@ int gmx_covar(int argc, char *argv[])
         "the reference structure for the fit is written first with t=-1.",
         "The average (or reference when [TT]-ref[tt] is used) structure is",
         "written with t=0, the eigenvectors",
-        "are written as frames with the eigenvector number as timestamp.",
+        "are written as frames with the eigenvector number and eigenvalue",
+        "as step number and timestamp, respectively.",
         "[PAR]",
         "The eigenvectors can be analyzed with [gmx-anaeig].",
         "[PAR]",
index 6eb46c47f29335cc55ef77be18aade0e9b27db48..a720ff0cf39670a8401431c3c35a9b21c72adc28 100644 (file)
@@ -223,14 +223,15 @@ void set_pdb_conf_bfac(int natoms, int nres, t_atoms *atoms, int n_bfac,
     int      i, n;
     gmx_bool found;
 
+    if (n_bfac > atoms->nres)
+    {
+        peratom = TRUE;
+    }
+
     bfac_max = -1e10;
     bfac_min = 1e10;
     for (i = 0; (i < n_bfac); i++)
     {
-        if (bfac_nr[i] - 1 >= atoms->nres)
-        {
-            peratom = TRUE;
-        }
         /*    if ((bfac_nr[i]-1<0) || (bfac_nr[i]-1>=atoms->nr))
            gmx_fatal(FARGS,"Index of B-Factor %d is out of range: %d (%g)",
            i+1,bfac_nr[i],bfac[i]); */
@@ -564,7 +565,7 @@ int gmx_editconf(int argc, char *argv[])
         "from a file with with following format: first line states number of",
         "entries in the file, next lines state an index",
         "followed by a B-factor. The B-factors will be attached per residue",
-        "unless an index is larger than the number of residues or unless the",
+        "unless the number of B-factors is larger than the number of the residues or unless the",
         "[TT]-atom[tt] option is set. Obviously, any type of numeric data can",
         "be added instead of B-factors. [TT]-legend[tt] will produce",
         "a row of CA atoms with B-factors ranging from the minimum to the",
index c818723932c8c7bc5914c747441ee1b582d53cff..f29997f887690cb02468383ee8adfd7f82c634a9 100644 (file)
@@ -302,7 +302,8 @@ int gmx_nmeig(int argc, char *argv[])
         "which can be calculated with [gmx-mdrun].",
         "The eigenvectors are written to a trajectory file ([TT]-v[tt]).",
         "The structure is written first with t=0. The eigenvectors",
-        "are written as frames with the eigenvector number as timestamp.",
+        "are written as frames with the eigenvector number and eigenvalue",
+        "written as step number and timestamp, respectively.",
         "The eigenvectors can be analyzed with [gmx-anaeig].",
         "An ensemble of structures can be generated from the eigenvectors with",
         "[gmx-nmens]. When mass weighting is used, the generated eigenvectors",
index 251d81a5eae0180b72e5834f42e692b3cae3b1f0..ca8eae0e00e50f2c38f769230384b36d455814a3 100644 (file)
@@ -2202,9 +2202,9 @@ int gmx_tune_pme(int argc, char *argv[])
     real            rcoulomb       = -1.0;            /* Coulomb radius as set in .tpr file */
     gmx_bool        bScaleRvdw     = TRUE;
     gmx_int64_t     bench_nsteps   = BENCHSTEPS;
-    gmx_int64_t     new_sim_nsteps = -1;  /* -1 indicates: not set by the user */
-    gmx_int64_t     cpt_steps      = 0;   /* Step counter in .cpt input file   */
-    int             presteps       = 100; /* Do a full cycle reset after presteps steps */
+    gmx_int64_t     new_sim_nsteps = -1;   /* -1 indicates: not set by the user */
+    gmx_int64_t     cpt_steps      = 0;    /* Step counter in .cpt input file   */
+    int             presteps       = 1500; /* Do a full cycle reset after presteps steps */
     gmx_bool        bOverwrite     = FALSE, bKeepTPR;
     gmx_bool        bLaunch        = FALSE;
     char           *ExtraArgs      = nullptr;
index b3529be7ca456cbb6aebbc94146c952b06df4ea5..d959351aef40b5ae2fcc2d14a6409efc95147dcf 100644 (file)
@@ -405,14 +405,14 @@ void init_em(FILE *fplog, const char *title,
                                   graph, mdatoms,
                                   vsite, shellfc ? *shellfc : nullptr);
 
-        update_mdatoms(mdatoms, state_global->lambda[efptFEP]);
-
         if (vsite)
         {
             set_vsite_top(vsite, *top, mdatoms, cr);
         }
     }
 
+    update_mdatoms(mdatoms, state_global->lambda[efptMASS]);
+
     if (constr)
     {
         if (ir->eConstrAlg == econtSHAKE &&