From: Carsten Kutzner Date: Tue, 7 Jan 2014 17:48:38 +0000 (+0100) Subject: Move essential dynamics / flooding code to separate directory X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=fdbd0916e2fe8201642105a7c12fe234df836406;p=alexxy%2Fgromacs.git Move essential dynamics / flooding code to separate directory Part of #1415 Get rid of legacyheaders. Additional changes: - provided doxygen-style documentation for functions in edsam.h (partly copied over from edsam.c and removed there to avoid duplication) - uncrustified edsam.c and edsam.h Change-Id: If4af498470c5200d50ac1d1b5537917c873380b5 --- diff --git a/src/gromacs/CMakeLists.txt b/src/gromacs/CMakeLists.txt index 1eb7d8c09a..cae997f4e6 100644 --- a/src/gromacs/CMakeLists.txt +++ b/src/gromacs/CMakeLists.txt @@ -57,6 +57,7 @@ add_subdirectory(options) add_subdirectory(timing) add_subdirectory(utility) add_subdirectory(fileio) +add_subdirectory(essentialdynamics) if (NOT GMX_BUILD_MDRUN_ONLY) add_subdirectory(legacyheaders) add_subdirectory(gmxana) diff --git a/src/gromacs/essentialdynamics/CMakeLists.txt b/src/gromacs/essentialdynamics/CMakeLists.txt new file mode 100644 index 0000000000..3e8b453f94 --- /dev/null +++ b/src/gromacs/essentialdynamics/CMakeLists.txt @@ -0,0 +1,40 @@ +# +# This file is part of the GROMACS molecular simulation package. +# +# Copyright (c) 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(GLOB ESSENTIALDYNAMICS_SOURCES *.cpp *.c) +set(LIBGROMACS_SOURCES ${LIBGROMACS_SOURCES} ${ESSENTIALDYNAMICS_SOURCES} PARENT_SCOPE) + +if (BUILD_TESTING) +# add_subdirectory(tests) +endif (BUILD_TESTING) diff --git a/src/gromacs/mdlib/edsam.c b/src/gromacs/essentialdynamics/edsam.c similarity index 98% rename from src/gromacs/mdlib/edsam.c rename to src/gromacs/essentialdynamics/edsam.c index d85d598195..f862b6db92 100644 --- a/src/gromacs/mdlib/edsam.c +++ b/src/gromacs/essentialdynamics/edsam.c @@ -56,10 +56,10 @@ #include "physics.h" #include "nrjac.h" #include "mtop_util.h" -#include "edsam.h" +#include "gromacs/essentialdynamics/edsam.h" #include "gromacs/fileio/gmxfio.h" #include "xvgr.h" -#include "groupcoord.h" +#include "gromacs/mdlib/groupcoord.h" /* We use the same defines as in mvdata.c here */ @@ -238,12 +238,12 @@ static void write_edo_legend(gmx_edsam_t ed, int nED, const output_env_t oenv); * for any of the ED groups? */ static gmx_bool bNeedDoEdsam(t_edpar *edi) { - return edi->vecs.mon.neig - || edi->vecs.linfix.neig - || edi->vecs.linacc.neig - || edi->vecs.radfix.neig - || edi->vecs.radacc.neig - || edi->vecs.radcon.neig; + return edi->vecs.mon.neig + || edi->vecs.linfix.neig + || edi->vecs.linacc.neig + || edi->vecs.radfix.neig + || edi->vecs.radacc.neig + || edi->vecs.radcon.neig; } @@ -1054,14 +1054,14 @@ static void do_single_flood( /* Main flooding routine, called from do_force */ extern void do_flood( - t_commrec *cr, /* Communication record */ - t_inputrec *ir, /* Input record */ - rvec x[], /* Positions on the local processor */ - rvec force[], /* forcefield forces, to these the flooding forces are added */ - gmx_edsam_t ed, /* ed data structure contains all ED and flooding groups */ - matrix box, /* the box */ - gmx_int64_t step, /* The relative time step since ir->init_step is already subtracted */ - gmx_bool bNS) /* Are we in a neighbor searching step? */ + t_commrec *cr, + t_inputrec *ir, + rvec x[], + rvec force[], + gmx_edsam_t ed, + matrix box, + gmx_int64_t step, + gmx_bool bNS) { t_edpar *edi; @@ -2606,7 +2606,7 @@ static void write_edo_legend(gmx_edsam_t ed, int nED, const output_env_t oenv) edi = ed->edpar; for (nr_edi = 1; nr_edi <= nED; nr_edi++) { - if ( bNeedDoEdsam(edi) ) /* Only print ED legend if at least one ED option is on */ + if (bNeedDoEdsam(edi)) /* Only print ED legend if at least one ED option is on */ { nice_legend(&setname, &nsets, &LegendStr, "RMSD to ref", "nm", get_EDgroupChar(nr_edi, nED) ); @@ -2648,12 +2648,14 @@ static void write_edo_legend(gmx_edsam_t ed, int nED, const output_env_t oenv) } -void init_edsam(gmx_mtop_t *mtop, /* global topology */ - t_inputrec *ir, /* input record */ - t_commrec *cr, /* communication record */ - gmx_edsam_t ed, /* contains all ED data */ - rvec x[], /* positions of the whole MD system */ - matrix box, /* the box */ +/* Init routine for ED and flooding. Calls init_edi in a loop for every .edi-cycle + * contained in the input file, creates a NULL terminated list of t_edpar structures */ +void init_edsam(gmx_mtop_t *mtop, + t_inputrec *ir, + t_commrec *cr, + gmx_edsam_t ed, + rvec x[], + matrix box, edsamstate_t *EDstate) { t_edpar *edi = NULL; /* points to a single edi data set */ @@ -3004,8 +3006,8 @@ void init_edsam(gmx_mtop_t *mtop, /* global topology */ void do_edsam(t_inputrec *ir, gmx_int64_t step, t_commrec *cr, - rvec xs[], /* The local current positions on this processor */ - rvec v[], /* The velocities */ + rvec xs[], + rvec v[], matrix box, gmx_edsam_t ed) { @@ -3041,7 +3043,7 @@ void do_edsam(t_inputrec *ir, while (edi != NULL) { edinr++; - if ( bNeedDoEdsam(edi) ) + if (bNeedDoEdsam(edi)) { buf = edi->buf->do_edsam; diff --git a/src/gromacs/essentialdynamics/edsam.h b/src/gromacs/essentialdynamics/edsam.h new file mode 100644 index 0000000000..9a1c410ba5 --- /dev/null +++ b/src/gromacs/essentialdynamics/edsam.h @@ -0,0 +1,136 @@ +/* + * 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, 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. + */ +/*! \libinternal \file + * + * \brief + * Declares functions to calculate both essential dynamics constraints + * as well as flooding potentials and forces. + * + * \authors Bert de Groot , Oliver Lange , + * Carsten Kutzner + * + * \inlibraryapi + */ +#ifndef GMX_ESSENTIALDYNAMICS_EDSAM_H +#define GMX_ESSENTIALDYNAMICS_EDSAM_H + +#include "typedefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*! \brief Applies essential dynamics constrains as defined in the .edi input file. + * + * \param ir MD input parameter record. + * \param step Number of the time step. + * \param cr Data needed for MPI communication. + * \param xs The local positions on this processor. + * \param v The local velocities. + * \param box The simulation box. + * \param ed The essential dynamics data. + */ +void do_edsam(t_inputrec *ir, gmx_int64_t step, + t_commrec *cr, rvec xs[], rvec v[], matrix box, gmx_edsam_t ed); + + +/*! \brief Reads in the .edi file containing the essential dynamics and flooding data. + * + * This function opens the ED input and output files, reads in all datasets it finds + * in the input file, and cross-checks whether the .edi file information is consistent + * with the essential dynamics data found in the checkpoint file (if present). + * gmx make_edi can be used to create an .edi input file. + * + * \param natoms Number of atoms of the whole MD system. + * \param EDstate Essential dynamics and flooding data stored in the checkpoint file. + * \param nfile Number of entries (files) in the fnm structure. + * \param fnm The filenames struct; it contains also the names of the + * essential dynamics and flooding in + output files. + * \param Flags Flags passed over from main, used to determine + * whether we are appending. + * \param oenv Needed to open the output xvgr file. + * \param cr Data needed for MPI communication. + * \returns Pointer to the initialized essential dynamics / flooding data. + */ +gmx_edsam_t ed_open(int natoms, edsamstate_t *EDstate, int nfile, const t_filenm fnm[], + unsigned long Flags, const output_env_t oenv, t_commrec *cr); + + +/*! \brief Initializes the essential dynamics and flooding module. + * + * \param mtop Molecular topology. + * \param ir MD input parameter record. + * \param cr Data needed for MPI communication. + * \param ed The essential dynamics data. + * \param x Positions of the whole MD system. + * \param box The simulation box. + * \param EDstate ED data stored in the checkpoint file. + */ +void init_edsam(gmx_mtop_t *mtop, t_inputrec *ir, t_commrec *cr, + gmx_edsam_t ed, rvec x[], matrix box, edsamstate_t *EDstate); + + +/*! \brief Make a selection of the home atoms for the ED groups. + * + * Should be called at every domain decomposition. + * + * \param dd Domain decomposition data. + * \param ed Essential dynamics and flooding data. + */ +void dd_make_local_ed_indices(gmx_domdec_t *dd, gmx_edsam_t ed); + + +/*! \brief Evaluate the flooding potential(s) and forces as requested in the .edi input file. + * + * \param cr Data needed for MPI communication. + * \param ir MD input parameter record. + * \param x Positions on the local processor. + * \param force Forcefield forces to which the flooding forces are added. + * \param ed The essential dynamics data. + * \param box The simulation box. + * \param step Number of the time step. + * \param bNS Are we in a neighbor searching step? + */ +void do_flood(t_commrec *cr, t_inputrec *ir, rvec x[], rvec force[], gmx_edsam_t ed, + matrix box, gmx_int64_t step, gmx_bool bNS); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/gromacs/legacyheaders/edsam.h b/src/gromacs/legacyheaders/edsam.h deleted file mode 100644 index f4bd76dacd..0000000000 --- a/src/gromacs/legacyheaders/edsam.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * 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, 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. - */ - -#ifndef _edsam_h -#define _edsam_h - -#include "typedefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void do_edsam(t_inputrec *ir, gmx_int64_t step, - t_commrec *cr, rvec xs[], rvec v[], matrix box, gmx_edsam_t ed); -/* Essential dynamics constraints, called from constrain() */ - -gmx_edsam_t ed_open(int natoms, edsamstate_t *EDstate, int nfile, const t_filenm fnm[], - unsigned long Flags, const output_env_t oenv, t_commrec *cr); -/* Sets the ED input/output filenames, opens output file */ - -void init_edsam(gmx_mtop_t *mtop, t_inputrec *ir, t_commrec *cr, - gmx_edsam_t ed, rvec x[], matrix box, edsamstate_t *edsamstate); -/* Init routine for ED and flooding. Calls init_edi in a loop for every .edi-cycle - * contained in the input file, creates a NULL terminated list of t_edpar structures */ - -void dd_make_local_ed_indices(gmx_domdec_t *dd, gmx_edsam_t ed); -/* Make a selection of the home atoms for the ED groups. - * Should be called at every domain decomposition. */ - -void do_flood(t_commrec *cr, t_inputrec *ir, rvec x[], rvec force[], gmx_edsam_t ed, - matrix box, gmx_int64_t step, gmx_bool bNS); -/* Flooding - called from do_force() */ - -#ifdef __cplusplus -} -#endif - -#endif /* _edsam_h */ diff --git a/src/gromacs/legacyheaders/mdrun.h b/src/gromacs/legacyheaders/mdrun.h index 40c108cc67..51c370f08a 100644 --- a/src/gromacs/legacyheaders/mdrun.h +++ b/src/gromacs/legacyheaders/mdrun.h @@ -46,7 +46,6 @@ #include "tgroup.h" #include "../fileio/filenm.h" #include "mshift.h" -#include "edsam.h" #include "mdebin.h" #include "vcm.h" #include "vsite.h" diff --git a/src/gromacs/mdlib/constr.c b/src/gromacs/mdlib/constr.c index 469ef5b968..e73e77d274 100644 --- a/src/gromacs/mdlib/constr.c +++ b/src/gromacs/mdlib/constr.c @@ -58,6 +58,8 @@ #include "gromacs/fileio/gmxfio.h" #include "macros.h" #include "gmx_omp_nthreads.h" +#include "gromacs/essentialdynamics/edsam.h" + typedef struct gmx_constr { int ncon_tot; /* The total number of constraints */ diff --git a/src/gromacs/mdlib/sim_util.c b/src/gromacs/mdlib/sim_util.c index b76cfcc948..3ae2e92c55 100644 --- a/src/gromacs/mdlib/sim_util.c +++ b/src/gromacs/mdlib/sim_util.c @@ -85,6 +85,7 @@ #include "gromacs/timing/wallcycle.h" #include "gromacs/timing/walltime_accounting.h" #include "gromacs/utility/gmxmpi.h" +#include "gromacs/essentialdynamics/edsam.h" #include "adress.h" #include "qmmm.h" diff --git a/src/gromacs/mdlib/update.c b/src/gromacs/mdlib/update.c index 2297ec1e06..06ea1fec25 100644 --- a/src/gromacs/mdlib/update.c +++ b/src/gromacs/mdlib/update.c @@ -60,7 +60,6 @@ #include "txtdump.h" #include "mdrun.h" #include "constr.h" -#include "edsam.h" #include "pull.h" #include "disre.h" #include "orires.h" diff --git a/src/programs/mdrun/membed.c b/src/programs/mdrun/membed.c index 1b46fb3e60..738cb3fe30 100644 --- a/src/programs/mdrun/membed.c +++ b/src/programs/mdrun/membed.c @@ -45,7 +45,7 @@ #include "macros.h" #include "main.h" #include "gromacs/fileio/futil.h" -#include "edsam.h" +#include "gromacs/essentialdynamics/edsam.h" #include "index.h" #include "physics.h" #include "names.h" diff --git a/src/programs/mdrun/runner.c b/src/programs/mdrun/runner.c index ed32d5f099..6452f78850 100644 --- a/src/programs/mdrun/runner.c +++ b/src/programs/mdrun/runner.c @@ -87,6 +87,7 @@ #include "gromacs/timing/wallcycle.h" #include "gromacs/utility/gmxmpi.h" #include "gromacs/utility/gmxomp.h" +#include "gromacs/essentialdynamics/edsam.h" #ifdef GMX_FAHCORE #include "corewrap.h"