Move around PairSearch code
authorBerk Hess <hess@kth.se>
Fri, 15 Mar 2019 09:36:13 +0000 (10:36 +0100)
committerMark Abraham <mark.j.abraham@gmail.com>
Wed, 20 Mar 2019 17:23:10 +0000 (18:23 +0100)
Renamed internal.h to pairsearch.h.
Moved PairSearch member functions to new file pairsearch.cpp.

TODO: Remove dependencies of pairlist.cpp on Pairsearch.
TODO: Make all PairSearch functions in pairlist.cpp members.

Change-Id: I21e3f93fa69a5ee0ffd00faf01a7d0267d7e79b9

src/gromacs/nbnxm/nbnxm.cpp
src/gromacs/nbnxm/nbnxm_setup.cpp
src/gromacs/nbnxm/pairlist.cpp
src/gromacs/nbnxm/pairlist.h
src/gromacs/nbnxm/pairsearch.cpp [new file with mode: 0644]
src/gromacs/nbnxm/pairsearch.h [moved from src/gromacs/nbnxm/internal.h with 95% similarity]

index 4010a7520e9a15bfcd9e83bdb64f2718b9b768fe..0aeb3d8d63164f07f1f99c0f4d8eb157b36300cc 100644 (file)
@@ -49,7 +49,7 @@
 #include "gromacs/nbnxm/atomdata.h"
 #include "gromacs/timing/wallcycle.h"
 
-#include "internal.h"
+#include "pairsearch.h"
 
 /*! \cond INTERNAL */
 
index 2c5f31716c8895da65b57a58d7e74d39b22da4b8..023f78c6852614ac3af89177907eb45d53144cea 100644 (file)
@@ -63,7 +63,7 @@
 
 #include "gpu_types.h"
 #include "grid.h"
-#include "internal.h"
+#include "pairsearch.h"
 
 namespace Nbnxm
 {
index d7b4e483a17799fd0ae4e6959de8c6cbadf1ac0a..8469c409bad92a82f97dcee530f45bec10b19ca2 100644 (file)
@@ -70,9 +70,9 @@
 #include "gromacs/utility/gmxomp.h"
 #include "gromacs/utility/smalloc.h"
 
-#include "grid.h"
-#include "internal.h"
+#include "gridset.h"
 #include "pairlistwork.h"
+#include "pairsearch.h"
 
 using namespace gmx;                        // TODO: Remove when this file is moved into gmx namespace
 
@@ -90,33 +90,6 @@ using InteractionLocality = Nbnxm::InteractionLocality;
  */
 constexpr bool c_pbcShiftBackward = true;
 
-
-void PairSearch::SearchCycleCounting::printCycles(FILE                               *fp,
-                                                  gmx::ArrayRef<const PairsearchWork> work) const
-{
-    fprintf(fp, "\n");
-    fprintf(fp, "ns %4d grid %4.1f search %4.1f",
-            cc_[enbsCCgrid].count(),
-            cc_[enbsCCgrid].averageMCycles(),
-            cc_[enbsCCsearch].averageMCycles());
-
-    if (work.size() > 1)
-    {
-        if (cc_[enbsCCcombine].count() > 0)
-        {
-            fprintf(fp, " comb %5.2f",
-                    cc_[enbsCCcombine].averageMCycles());
-        }
-        fprintf(fp, " s. th");
-        for (const PairsearchWork &workEntry : work)
-        {
-            fprintf(fp, " %4.1f",
-                    workEntry.cycleCounter.averageMCycles());
-        }
-    }
-    fprintf(fp, "\n");
-}
-
 /* Layout for the nonbonded NxN pair lists */
 enum class NbnxnLayout
 {
@@ -231,8 +204,8 @@ static inline int xIndexFromCj(int cj)
 }
 #endif //GMX_SIMD
 
-/* Initializes a single nbnxn_pairlist_t data structure */
-static void nbnxn_init_pairlist_fep(t_nblist *nl)
+
+void nbnxn_init_pairlist_fep(t_nblist *nl)
 {
     nl->type        = GMX_NBLIST_INTERACTION_FREE_ENERGY;
     nl->igeometry   = GMX_NBLIST_GEOMETRY_PARTICLE_PARTICLE;
@@ -255,62 +228,6 @@ static void nbnxn_init_pairlist_fep(t_nblist *nl)
 
 }
 
-static void free_nblist(t_nblist *nl)
-{
-    sfree(nl->iinr);
-    sfree(nl->gid);
-    sfree(nl->shift);
-    sfree(nl->jindex);
-    sfree(nl->jjnr);
-    sfree(nl->excl_fep);
-}
-
-PairsearchWork::PairsearchWork() :
-    cp0({{0}}
-        ),
-    buffer_flags({0, nullptr, 0}),
-    ndistc(0),
-    nbl_fep(new t_nblist),
-    cp1({{0}})
-{
-    nbnxn_init_pairlist_fep(nbl_fep.get());
-}
-
-PairsearchWork::~PairsearchWork()
-{
-    sfree(buffer_flags.flag);
-
-    free_nblist(nbl_fep.get());
-}
-
-// TODO: Move to pairsearch.cpp
-PairSearch::DomainSetup::DomainSetup(const int                 ePBC,
-                                     const ivec               *numDDCells,
-                                     const gmx_domdec_zones_t *ddZones) :
-    ePBC(ePBC),
-    haveDomDec(numDDCells != nullptr),
-    zones(ddZones)
-{
-    for (int d = 0; d < DIM; d++)
-    {
-        haveDomDecPerDim[d] = (numDDCells != nullptr && (*numDDCells)[d] > 1);
-    }
-}
-
-// TODO: Move to pairsearch.cpp
-PairSearch::PairSearch(const int                 ePBC,
-                       const ivec               *numDDCells,
-                       const gmx_domdec_zones_t *ddZones,
-                       const PairlistType        pairlistType,
-                       const bool                haveFep,
-                       const int                 maxNumThreads) :
-    domainSetup_(ePBC, numDDCells, ddZones),
-    gridSet_(domainSetup_.haveDomDecPerDim, pairlistType, haveFep, maxNumThreads),
-    work_(maxNumThreads)
-{
-    cycleCounting_.recordCycles_ = (getenv("GMX_NBNXN_CYCLE") != nullptr);
-}
-
 static void init_buffer_flags(nbnxn_buffer_flags_t *flags,
                               int                   natoms)
 {
index 98a138ec7498db17ed64a65b804d3bba04dda942..b4bbc52c92c3ba894b450ef6e6040896311a9adf 100644 (file)
@@ -285,4 +285,7 @@ struct nbnxn_pairlist_set_t
     std::vector<t_nblist *> nbl_fep;               /* List of free-energy atom pair interactions */
 };
 
+//! Initializes a free-energy pair-list
+void nbnxn_init_pairlist_fep(t_nblist *nl);
+
 #endif
diff --git a/src/gromacs/nbnxm/pairsearch.cpp b/src/gromacs/nbnxm/pairsearch.cpp
new file mode 100644 (file)
index 0000000..5ddd0d2
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * This file is part of the GROMACS molecular simulation package.
+ *
+ * Copyright (c) 2019, 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.
+ */
+
+/*! \internal \file
+ * \brief
+ * Implements the PairSearch class
+ *
+ * \author Berk Hess <hess@kth.se>
+ * \ingroup module_nbnxm
+ */
+
+#include "gmxpre.h"
+
+#include "pairsearch.h"
+
+#include "gromacs/nbnxm/pairlist.h"
+#include "gromacs/utility/smalloc.h"
+
+
+void PairSearch::SearchCycleCounting::printCycles(FILE                               *fp,
+                                                  gmx::ArrayRef<const PairsearchWork> work) const
+{
+    fprintf(fp, "\n");
+    fprintf(fp, "ns %4d grid %4.1f search %4.1f",
+            cc_[enbsCCgrid].count(),
+            cc_[enbsCCgrid].averageMCycles(),
+            cc_[enbsCCsearch].averageMCycles());
+
+    if (work.size() > 1)
+    {
+        if (cc_[enbsCCcombine].count() > 0)
+        {
+            fprintf(fp, " comb %5.2f",
+                    cc_[enbsCCcombine].averageMCycles());
+        }
+        fprintf(fp, " s. th");
+        for (const PairsearchWork &workEntry : work)
+        {
+            fprintf(fp, " %4.1f",
+                    workEntry.cycleCounter.averageMCycles());
+        }
+    }
+    fprintf(fp, "\n");
+}
+
+/*! \brief Frees the contents of a legacy t_nblist struct */
+static void free_nblist(t_nblist *nl)
+{
+    sfree(nl->iinr);
+    sfree(nl->gid);
+    sfree(nl->shift);
+    sfree(nl->jindex);
+    sfree(nl->jjnr);
+    sfree(nl->excl_fep);
+}
+
+#ifndef DOXYGEN
+
+PairsearchWork::PairsearchWork() :
+    cp0({{0}}
+        ),
+    buffer_flags({0, nullptr, 0}),
+    ndistc(0),
+    nbl_fep(new t_nblist),
+    cp1({{0}})
+{
+    nbnxn_init_pairlist_fep(nbl_fep.get());
+}
+
+#endif // !DOXYGEN
+
+PairsearchWork::~PairsearchWork()
+{
+    sfree(buffer_flags.flag);
+
+    free_nblist(nbl_fep.get());
+}
+
+PairSearch::DomainSetup::DomainSetup(const int                 ePBC,
+                                     const ivec               *numDDCells,
+                                     const gmx_domdec_zones_t *ddZones) :
+    ePBC(ePBC),
+    haveDomDec(numDDCells != nullptr),
+    zones(ddZones)
+{
+    for (int d = 0; d < DIM; d++)
+    {
+        haveDomDecPerDim[d] = (numDDCells != nullptr && (*numDDCells)[d] > 1);
+    }
+}
+
+PairSearch::PairSearch(const int                 ePBC,
+                       const ivec               *numDDCells,
+                       const gmx_domdec_zones_t *ddZones,
+                       const PairlistType        pairlistType,
+                       const bool                haveFep,
+                       const int                 maxNumThreads) :
+    domainSetup_(ePBC, numDDCells, ddZones),
+    gridSet_(domainSetup_.haveDomDecPerDim, pairlistType, haveFep, maxNumThreads),
+    work_(maxNumThreads)
+{
+    cycleCounting_.recordCycles_ = (getenv("GMX_NBNXN_CYCLE") != nullptr);
+}
similarity index 95%
rename from src/gromacs/nbnxm/internal.h
rename to src/gromacs/nbnxm/pairsearch.h
index 368ebcf34fa412eff11815bbf54b17a31c209e15..4baeed6d798074a70bc147f1b6376486fa3acc84 100644 (file)
 
 /*! \internal \file
  *
- * \brief Declares internal nbnxm module details
+ * \brief Declares the PairSearch class and helper structs
+ *
+ * The PairSearch class holds the domain setup, the search grids
+ * and helper object for the pair search. It manages the search work.
+ * The actual gridding and pairlist generation is performeed by the
+ * GridSet/Grid and PairlistSet/Pairlist classes, respectively.
  *
  * \author Berk Hess <hess@kth.se>
  *
  * \ingroup module_nbnxm
  */
 
-#ifndef GMX_NBNXM_INTERNAL_H
-#define GMX_NBNXM_INTERNAL_H
+#ifndef GMX_NBNXM_PAIRSEARCH_H
+#define GMX_NBNXM_PAIRSEARCH_H
 
 #include <memory>
 #include <vector>