From: Teemu Murtola Date: Wed, 20 Aug 2014 18:03:25 +0000 (+0300) Subject: Merge release-5-0 into master X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=b53fe549cf7fbb7fdd61ed5efd4e1c4e312c3879;p=alexxy%2Fgromacs.git Merge release-5-0 into master Conflicts: src/gromacs/legacyheaders/types/simple.h - applied gmx_unused change to basedefinitions.h src/gromacs/mdlib/sim_util.c - took adjacent changes from both branches Change-Id: I42071be546015ede33b03a34ef0d95a5d5a3b09e --- b53fe549cf7fbb7fdd61ed5efd4e1c4e312c3879 diff --cc src/gromacs/mdlib/sim_util.c index 0cdb28b885,a904a2ef52..07f89c5114 --- a/src/gromacs/mdlib/sim_util.c +++ b/src/gromacs/mdlib/sim_util.c @@@ -405,10 -413,17 +407,11 @@@ static void pull_potential_wrapper(t_co enerd->term[F_COM_PULL] += pull_potential(ir->ePull, ir->pull, mdatoms, &pbc, cr, t, lambda[efptRESTRAINT], x, f, vir_force, &dvdl); - if (bSepDVDL) - { - gmx_print_sepdvdl(fplog, "Com pull", enerd->term[F_COM_PULL], dvdl); - } enerd->dvdl_lin[efptRESTRAINT] += dvdl; + wallcycle_stop(wcycle, ewcPULLPOT); } -static void pme_receive_force_ener(FILE *fplog, - gmx_bool bSepDVDL, - t_commrec *cr, +static void pme_receive_force_ener(t_commrec *cr, gmx_wallcycle_t wcycle, gmx_enerdata_t *enerd, t_forcerec *fr) @@@ -1513,8 -1530,12 +1516,12 @@@ void do_force_cutsVERLET(FILE *fplog, t if (inputrec->ePull == epullUMBRELLA || inputrec->ePull == epullCONST_F) { + /* Since the COM pulling is always done mass-weighted, no forces are + * applied to vsites and this call can be done after vsite spreading. + */ - pull_potential_wrapper(fplog, bSepDVDL, cr, inputrec, box, x, + pull_potential_wrapper(cr, inputrec, box, x, - f, vir_force, mdatoms, enerd, lambda, t); + f, vir_force, mdatoms, enerd, lambda, t, + wcycle); } /* Add the forces from enforced rotation potentials (if any) */ @@@ -1985,8 -2008,9 +1992,9 @@@ void do_force_cutsGROUP(FILE *fplog, t_ if (inputrec->ePull == epullUMBRELLA || inputrec->ePull == epullCONST_F) { - pull_potential_wrapper(fplog, bSepDVDL, cr, inputrec, box, x, + pull_potential_wrapper(cr, inputrec, box, x, - f, vir_force, mdatoms, enerd, lambda, t); + f, vir_force, mdatoms, enerd, lambda, t, + wcycle); } /* Add the forces from enforced rotation potentials (if any) */ diff --cc src/gromacs/pulling/pullutil.c index 97287aa708,19e762346c..3d90b1ae9c --- a/src/gromacs/pulling/pullutil.c +++ b/src/gromacs/pulling/pullutil.c @@@ -40,22 -40,26 +40,22 @@@ #include -#include "sysstuff.h" -#include "princ.h" -#include "gromacs/fileio/futil.h" -#include "vec.h" +#include "gromacs/utility/futil.h" +#include "gromacs/math/vec.h" #include "gromacs/utility/smalloc.h" -#include "typedefs.h" -#include "types/commrec.h" -#include "names.h" -#include "gmx_fatal.h" -#include "macros.h" -#include "symtab.h" -#include "index.h" +#include "gromacs/legacyheaders/typedefs.h" +#include "gromacs/legacyheaders/types/commrec.h" +#include "gromacs/legacyheaders/names.h" +#include "gromacs/utility/fatalerror.h" +#include "gromacs/legacyheaders/macros.h" #include "gromacs/fileio/confio.h" -#include "network.h" -#include "pbc.h" +#include "gromacs/legacyheaders/network.h" +#include "gromacs/pbcutil/pbc.h" #include "pull.h" -#include "gmx_ga2la.h" +#include "gromacs/legacyheaders/gmx_ga2la.h" static void pull_set_pbcatom(t_commrec *cr, t_pull_group *pgrp, - t_mdatoms *md, rvec *x, + rvec *x, rvec x_pbc) { int a, m; diff --cc src/gromacs/selection/tests/nbsearch.cpp index 06601be1e4,177913fad1..1d89772d2a --- a/src/gromacs/selection/tests/nbsearch.cpp +++ b/src/gromacs/selection/tests/nbsearch.cpp @@@ -75,35 -71,8 +75,31 @@@ namespac class NeighborhoodSearchTestData { public: + struct RefPair + { + RefPair(int refIndex, real distance) + : refIndex(refIndex), distance(distance), bFound(false), + bExcluded(false) + { + } + + bool operator<(const RefPair &other) const + { + return refIndex < other.refIndex; + } + + int refIndex; + real distance; + // The variables below are state variables that are only used + // during the actual testing after creating a copy of the reference + // pair list, not as part of the reference data. + // Simpler to have just a single structure for both purposes. + bool bFound; + bool bExcluded; + }; + struct TestPosition { - TestPosition() : refMinDist(0.0), refNearestPoint(-1) - { - clear_rvec(x); - } explicit TestPosition(const rvec x) : refMinDist(0.0), refNearestPoint(-1) { diff --cc src/gromacs/utility/basedefinitions.h index 18a898cce5,0000000000..faa4395328 mode 100644,000000..100644 --- a/src/gromacs/utility/basedefinitions.h +++ b/src/gromacs/utility/basedefinitions.h @@@ -1,207 -1,0 +1,210 @@@ +/* + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 1991-2000, University of Groningen, The Netherlands. + * Copyright (c) 2001-2004, The GROMACS development team. + * Copyright (c) 2013,2014, 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. + */ +/*! \file + * \brief + * Basic types and macros used throughout \Gromacs. + * + * \inpublicapi + * \ingroup module_utility + */ +#ifndef GMX_UTILITY_BASEDEFINITIONS_H +#define GMX_UTILITY_BASEDEFINITIONS_H + +/* Information about integer data type sizes */ +#include +#define __STDC_LIMIT_MACROS +#include +#ifndef _MSC_VER +#define __STDC_FORMAT_MACROS +#include +#endif + +/*! \brief + * Boolean type for use in \Gromacs C code. + * + * There is no standard size for 'bool' in C++, so when + * we previously defined it to int for C code the data types + * (and structs) would have different size depending on your compiler, + * both at \Gromacs build time and when you use the library. + * The only way around this is to NOT assume anything about the C++ type, + * so we cannot use the name 'bool' in our C code anymore. + */ +typedef int gmx_bool; + +#ifndef FALSE +/** False value for ::gmx_bool. */ +# define FALSE 0 +#endif +#ifndef TRUE +/** True value for ::gmx_bool. */ +# define TRUE 1 +#endif +/** Number of gmx_bool values. */ +#define BOOL_NR 2 + +/*! \name Fixed-width integer types + * + * These types and macros provide the equivalent of 32- and 64-bit integer + * types from C99 headers `stdint.h` and `inttypes.h`. These headers are also + * there in C++11. The types and macros from here should be used instead of + * `int32_t` etc. + * MSVC doesn't support these before Visual Studio 2013. + */ +/*! \{ */ +#ifdef _MSC_VER +typedef __int32 gmx_int32_t; +#define GMX_PRId32 "I32d" +#define GMX_SCNd32 "I32d" + +typedef __int64 gmx_int64_t; +#define GMX_PRId64 "I64d" +#define GMX_SCNd64 "I64d" + +typedef unsigned __int32 gmx_uint32_t; +#define GMX_PRIu32 "I32u" +#define GMX_SCNu32 "I32u" + +typedef unsigned __int64 gmx_uint64_t; +#define GMX_PRIu64 "I64u" +#define GMX_SCNu64 "I64u" +#else +typedef int32_t gmx_int32_t; +#define GMX_PRId32 PRId32 +#define GMX_SCNd32 SCNd32 + +typedef int64_t gmx_int64_t; +#define GMX_PRId64 PRId64 +#define GMX_SCNd64 SCNd64 + +typedef uint32_t gmx_uint32_t; +#define GMX_PRIu32 PRIu32 +#define GMX_SCNu32 SCNu32 + +typedef uint64_t gmx_uint64_t; +#define GMX_PRIu64 PRIu64 +#define GMX_SCNu64 SCNu64 +#endif + +#define GMX_INT32_MAX INT32_MAX +#define GMX_INT32_MIN INT32_MIN + +#define GMX_INT64_MAX INT64_MAX +#define GMX_INT64_MIN INT64_MIN + +#define GMX_UINT32_MAX UINT32_MAX +#define GMX_UINT32_MIN UINT32_MIN + +#define GMX_UINT64_MAX UINT64_MAX +#define GMX_UINT64_MIN UINT64_MIN +/*! \} */ + +/*! \def gmx_inline + * \brief + * Keyword to use in C code instead of C99 `inline`. + * + * Some of the C compilers we support do not recognize the C99 keyword + * `inline`. This macro should be used in C code and in shared C/C++ headers + * to indicate a function is inlined. + * C++ code should use plain `inline`, as that is already in C++98. + */ +#if !defined __cplusplus && _MSC_VER +#define gmx_inline __inline +#else +/* C++ or C99 */ +#define gmx_inline inline +#endif + +/* ICC, GCC, MSVC, Pathscale, PGI, XLC support __restrict. + * Any other compiler can be added here. */ +/*! \brief + * Keyword to use in instead of C99 `restrict`. + * + * We cannot use `restrict` because it is only in C99, but not in C++. + * This macro should instead be used to allow easily supporting different + * compilers. + */ +#define gmx_restrict __restrict + +/*! \def gmx_cxx_const + * \brief + * Keyword to work around C/C++ differences in possible const keyword usage. + * + * Some functions that do not modify their input parameters cannot declare + * those parameters as `const` and compile warning/error-free on both C and C++ + * compilers because of differences in `const` semantics. This macro can be + * used in cases where C++ allows `const`, but C does not like it, to make the + * same declaration work for both. + */ +#ifdef __cplusplus +#define gmx_cxx_const const +#else +#define gmx_cxx_const +#endif + +/*! \def gmx_unused + * \brief + * Attribute to suppress compiler warnings about unused function parameters. + * + * This attribute suppresses compiler warnings about unused function arguments + * by marking them as possibly unused. Some arguments are unused but + * have to be retained to preserve a function signature + * that must match that of another function. + * Some arguments are only used in *some* conditional compilation code paths + * (e.g. MPI). + */ +#ifndef gmx_unused +#ifdef __GNUC__ +/* GCC, clang, and some ICC pretending to be GCC */ +# define gmx_unused __attribute__ ((unused)) +#elif (defined(__INTEL_COMPILER) || defined(__ECC)) && !defined(_MSC_VER) +/* ICC on *nix */ +# define gmx_unused __attribute__ ((unused)) ++#elif defined(__PGI) ++/* Portland group compilers */ ++# define gmx_unused __attribute__ ((unused)) +#elif defined _MSC_VER +/* MSVC */ +# define gmx_unused /*@unused@*/ +#elif defined(__xlC__) +/* IBM */ +# define gmx_unused __attribute__ ((unused)) +#else +# define gmx_unused +#endif +#endif + +#endif diff --cc src/programs/mdrun/md.cpp index 3bf621fe6d,2b320246b5..259484cc18 --- a/src/programs/mdrun/md.cpp +++ b/src/programs/mdrun/md.cpp @@@ -1148,8 -1161,10 +1149,9 @@@ double do_md(FILE *fplog, t_commrec *cr } } - bOK = TRUE; if (!bRerunMD || rerun_fr.bV || bForceUpdate) /* Why is rerun_fr.bV here? Unclear. */ { + wallcycle_stop(wcycle, ewcUPDATE); update_constraints(fplog, step, NULL, ir, ekind, mdatoms, state, fr->bMolPBC, graph, f, &top->idef, shake_vir,