Move nbnxm domainSetup to GridSet
authorBerk Hess <hess@kth.se>
Mon, 18 Mar 2019 10:13:56 +0000 (11:13 +0100)
committerMark Abraham <mark.j.abraham@gmail.com>
Thu, 28 Mar 2019 09:11:46 +0000 (10:11 +0100)
The domain setup belongs with GridSet and moving it there reduces
the dependency of the pairlist construction function on PairSearch.
Removed PairSearch as an argument to those constuction functions.
Also moved SearchCycleCounting out of PairSearch.

Change-Id: I764868f5e7a002cf435ce74d428c95cf1e9dac23

src/gromacs/nbnxm/gridset.cpp
src/gromacs/nbnxm/gridset.h
src/gromacs/nbnxm/pairlist.cpp
src/gromacs/nbnxm/pairlist.h
src/gromacs/nbnxm/pairsearch.cpp
src/gromacs/nbnxm/pairsearch.h

index f2dbaf4c1badf37f056e950aba1802af7d585242..b4685a94a182dae76057735f1cc850457957a8a6 100644 (file)
@@ -55,10 +55,10 @@ namespace Nbnxm
 {
 
 //! Returns the number of DD zones
-static int numDDZones(const std::array<bool, DIM> &haveDomDecPerDim)
+static int numDDZones(const std::array<bool, DIM> &haveMultipleDomainsPerDim)
 {
     int  numDDZones = 1;
-    for (auto haveDD : haveDomDecPerDim)
+    for (auto haveDD : haveMultipleDomainsPerDim)
     {
         if (haveDD)
         {
@@ -69,11 +69,27 @@ static int numDDZones(const std::array<bool, DIM> &haveDomDecPerDim)
     return numDDZones;
 }
 
-GridSet::GridSet(const std::array<bool, DIM> &haveDomDecPerDim,
-                 const PairlistType           pairlistType,
-                 const bool                   haveFep,
-                 const int                    numThreads) :
-    grids_(numDDZones(haveDomDecPerDim), pairlistType),
+GridSet::DomainSetup::DomainSetup(const int                 ePBC,
+                                  const ivec               *numDDCells,
+                                  const gmx_domdec_zones_t *ddZones) :
+    ePBC(ePBC),
+    haveMultipleDomains(numDDCells != nullptr),
+    zones(ddZones)
+{
+    for (int d = 0; d < DIM; d++)
+    {
+        haveMultipleDomainsPerDim[d] = (numDDCells != nullptr && (*numDDCells)[d] > 1);
+    }
+}
+
+GridSet::GridSet(const int                 ePBC,
+                 const ivec               *numDDCells,
+                 const gmx_domdec_zones_t *ddZones,
+                 const PairlistType        pairlistType,
+                 const bool                haveFep,
+                 const int                 numThreads) :
+    domainSetup_(ePBC, numDDCells, ddZones),
+    grids_(numDDZones(domainSetup_.haveMultipleDomainsPerDim), pairlistType),
     haveFep_(haveFep),
     numRealAtomsLocal_(0),
     numRealAtomsTotal_(0),
index a9abb38c455181a02aafd301e54853af86291b8c..4c3056d6ca230110c8b9c89331d471f9d2e3b445 100644 (file)
@@ -71,16 +71,38 @@ namespace Nbnxm
 {
 
 /*! \internal
- * \brief An object holding a set of search grids for the local + non-local DD zones
+ * \brief Holds a set of search grids for the local + non-local DD zones
  */
 class GridSet
 {
     public:
+        /*! \internal
+         * \brief Description of the domain setup: PBC and the connections between domains
+         */
+        struct DomainSetup
+        {
+            //! Constructor, without DD \p numDDCells and \p ddZones should be nullptr
+            DomainSetup(int                       ePBC,
+                        const ivec               *numDDCells,
+                        const gmx_domdec_zones_t *ddZones);
+
+            //! The type of PBC
+            int                       ePBC;
+            //! Are there multiple domains?
+            bool                      haveMultipleDomains;
+            //! Are there multiple domains along each dimension?
+            std::array<bool, DIM>     haveMultipleDomainsPerDim;
+            //! The domain decomposition zone setup
+            const gmx_domdec_zones_t *zones;
+        };
+
         //! Constructs a grid set for 1 or multiple DD zones, when numDDCells!=nullptr
-        GridSet(const std::array<bool, DIM> &haveDomDecPerDim,
-                PairlistType                 pairlistType,
-                bool                         haveFep,
-                int                          numThreads);
+        GridSet(int                       ePBC,
+                const ivec               *numDDCells,
+                const gmx_domdec_zones_t *ddZones,
+                PairlistType              pairlistType,
+                bool                      haveFep,
+                int                       numThreads);
 
         //! Puts the atoms in \p ddZone on the grid and copies the coordinates to \p nbat
         void putOnGrid(const matrix                    box,
@@ -97,6 +119,12 @@ class GridSet
                        const int                      *move,
                        nbnxn_atomdata_t               *nbat);
 
+        //! Returns the domain setup
+        const DomainSetup domainSetup() const
+        {
+            return domainSetup_;
+        }
+
         //! Returns the number of cells along x and y for the local grid
         void getLocalNumCells(int *numCellsX,
                               int *numCellsY) const
@@ -175,6 +203,8 @@ class GridSet
         }
 
         /* Data members */
+        //! The domain setup
+        DomainSetup           domainSetup_;
         //! The search grids
         std::vector<Grid>     grids_;
         //! The actual cell indices for all atoms, covering all grids
index aba3775eb93a5a58d2ded242bb06c1416eacfc39..847cf591d8832c9a3a20dc18fad56ba4ba74b162 100644 (file)
@@ -750,10 +750,10 @@ PairlistSet::PairlistSet(const Nbnxm::InteractionLocality  locality,
 /* Print statistics of a pair list, used for debug output */
 static void print_nblist_statistics(FILE                   *fp,
                                     const NbnxnPairlistCpu &nbl,
-                                    const PairSearch       &pairSearch,
+                                    const Nbnxm::GridSet   &gridSet,
                                     const real              rl)
 {
-    const Grid             &grid = pairSearch.gridSet().grids()[0];
+    const Grid             &grid = gridSet.grids()[0];
     const Grid::Dimensions &dims = grid.dimensions();
 
     fprintf(fp, "nbl nci %zu ncj %d\n",
@@ -797,10 +797,10 @@ static void print_nblist_statistics(FILE                   *fp,
 /* Print statistics of a pair lists, used for debug output */
 static void print_nblist_statistics(FILE                   *fp,
                                     const NbnxnPairlistGpu &nbl,
-                                    const PairSearch       &pairSearch,
+                                    const Nbnxm::GridSet   &gridSet,
                                     const real              rl)
 {
-    const Grid             &grid = pairSearch.gridSet().grids()[0];
+    const Grid             &grid = gridSet.grids()[0];
     const Grid::Dimensions &dims = grid.dimensions();
 
     fprintf(fp, "nbl nsci %zu ncj4 %zu nsi %d excl4 %zu\n",
@@ -2489,7 +2489,7 @@ static real nonlocal_vol2(const struct gmx_domdec_zones_t *zones, const rvec ls,
 }
 
 /* Estimates the average size of a full j-list for super/sub setup */
-static void get_nsubpair_target(const PairSearch          &pairSearch,
+static void get_nsubpair_target(const Nbnxm::GridSet      &gridSet,
                                 const InteractionLocality  iloc,
                                 const real                 rlist,
                                 const int                  min_ci_balanced,
@@ -2502,7 +2502,7 @@ static void get_nsubpair_target(const PairSearch          &pairSearch,
     const int           nsubpair_target_min = 36;
     real                r_eff_sup, vol_est, nsp_est, nsp_est_nl;
 
-    const Grid         &grid = pairSearch.gridSet().grids()[0];
+    const Grid         &grid = gridSet.grids()[0];
 
     /* We don't need to balance list sizes if:
      * - We didn't request balancing.
@@ -2530,8 +2530,8 @@ static void get_nsubpair_target(const PairSearch          &pairSearch,
     /* The formulas below are a heuristic estimate of the average nsj per si*/
     r_eff_sup = rlist + nbnxn_get_rlist_effective_inc(numAtomsCluster, ls);
 
-    if (!pairSearch.domainSetup().haveDomDec ||
-        pairSearch.domainSetup().zones->n == 1)
+    if (!gridSet.domainSetup().haveMultipleDomains ||
+        gridSet.domainSetup().zones->n == 1)
     {
         nsp_est_nl = 0;
     }
@@ -2539,7 +2539,7 @@ static void get_nsubpair_target(const PairSearch          &pairSearch,
     {
         nsp_est_nl =
             gmx::square(dims.atomDensity/numAtomsCluster)*
-            nonlocal_vol2(pairSearch.domainSetup().zones, ls, r_eff_sup);
+            nonlocal_vol2(gridSet.domainSetup().zones, ls, r_eff_sup);
     }
 
     if (iloc == InteractionLocality::Local)
@@ -2912,7 +2912,7 @@ static float boundingbox_only_distance2(const Grid::Dimensions &iGridDims,
 }
 
 static int get_ci_block_size(const Grid &iGrid,
-                             const bool  haveDomDec,
+                             const bool  haveMultipleDomains,
                              const int   numLists)
 {
     const int ci_block_enum      = 5;
@@ -2946,7 +2946,7 @@ static int get_ci_block_size(const Grid &iGrid,
     /* Without domain decomposition
      * or with less than 3 blocks per task, divide in nth blocks.
      */
-    if (!haveDomDec || numLists*3*ci_block > iGrid.numCells())
+    if (!haveMultipleDomains || numLists*3*ci_block > iGrid.numCells())
     {
         ci_block = (iGrid.numCells() + numLists - 1)/numLists;
     }
@@ -3128,7 +3128,7 @@ static void setBufferFlags(const NbnxnPairlistGpu gmx_unused &nbl,
 
 /* Generates the part of pair-list nbl assigned to our thread */
 template <typename T>
-static void nbnxn_make_pairlist_part(const PairSearch &pairSearch,
+static void nbnxn_make_pairlist_part(const Nbnxm::GridSet &gridSet,
                                      const Grid &iGrid,
                                      const Grid &jGrid,
                                      PairsearchWork *work,
@@ -3183,8 +3183,6 @@ static void nbnxn_make_pairlist_part(const PairSearch &pairSearch,
         gridj_flag       = work->buffer_flags.flag;
     }
 
-    const Nbnxm::GridSet &gridSet = pairSearch.gridSet();
-
     gridSet.getBox(box);
 
     const bool            haveFep = gridSet.haveFep();
@@ -3226,8 +3224,8 @@ static void nbnxn_make_pairlist_part(const PairSearch &pairSearch,
         /* Check if we need periodicity shifts.
          * Without PBC or with domain decomposition we don't need them.
          */
-        if (d >= ePBC2npbcdim(pairSearch.domainSetup().ePBC) ||
-            pairSearch.domainSetup().haveDomDecPerDim[d])
+        if (d >= ePBC2npbcdim(gridSet.domainSetup().ePBC) ||
+            gridSet.domainSetup().haveMultipleDomainsPerDim[d])
         {
             shp[d] = 0;
         }
@@ -3638,7 +3636,7 @@ static void nbnxn_make_pairlist_part(const PairSearch &pairSearch,
     {
         fprintf(debug, "number of distance checks %d\n", numDistanceChecks);
 
-        print_nblist_statistics(debug, *nbl, pairSearch, rlist);
+        print_nblist_statistics(debug, *nbl, gridSet, rlist);
 
         if (haveFep)
         {
@@ -3647,13 +3645,13 @@ static void nbnxn_make_pairlist_part(const PairSearch &pairSearch,
     }
 }
 
-static void reduce_buffer_flags(const PairSearch           &pairSearch,
-                                int                         nsrc,
-                                const nbnxn_buffer_flags_t *dest)
+static void reduce_buffer_flags(gmx::ArrayRef<PairsearchWork>  searchWork,
+                                int                            nsrc,
+                                const nbnxn_buffer_flags_t    *dest)
 {
     for (int s = 0; s < nsrc; s++)
     {
-        gmx_bitmask_t * flag = pairSearch.work()[s].buffer_flags.flag;
+        gmx_bitmask_t * flag = searchWork[s].buffer_flags.flag;
 
         for (int b = 0; b < dest->nflag; b++)
         {
@@ -3929,12 +3927,14 @@ static void sort_sci(NbnxnPairlistGpu *nbl)
 static void prepareListsForDynamicPruning(gmx::ArrayRef<NbnxnPairlistCpu> lists);
 
 void
-PairlistSet::constructPairlists(PairSearch                *pairSearch,
-                                nbnxn_atomdata_t          *nbat,
-                                const t_blocka            *excl,
-                                const Nbnxm::KernelType    kernelType,
-                                const int                  minimumIlistCountForGpuBalancing,
-                                t_nrnb                    *nrnb)
+PairlistSet::constructPairlists(const Nbnxm::GridSet          &gridSet,
+                                gmx::ArrayRef<PairsearchWork>  searchWork,
+                                nbnxn_atomdata_t              *nbat,
+                                const t_blocka                *excl,
+                                const Nbnxm::KernelType        kernelType,
+                                const int                      minimumIlistCountForGpuBalancing,
+                                t_nrnb                        *nrnb,
+                                SearchCycleCounting           *searchCycleCounting)
 {
     const real         rlist    = params_.rlistOuter;
 
@@ -3966,12 +3966,12 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
     }
     else
     {
-        nzi = pairSearch->domainSetup().zones->nizone;
+        nzi = gridSet.domainSetup().zones->nizone;
     }
 
     if (!isCpuType_ && minimumIlistCountForGpuBalancing > 0)
     {
-        get_nsubpair_target(*pairSearch, locality_, rlist, minimumIlistCountForGpuBalancing,
+        get_nsubpair_target(gridSet, locality_, rlist, minimumIlistCountForGpuBalancing,
                             &nsubpair_target, &nsubpair_tot_est);
     }
     else
@@ -3998,11 +3998,11 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
         }
     }
 
-    const gmx_domdec_zones_t *ddZones = pairSearch->domainSetup().zones;
+    const gmx_domdec_zones_t *ddZones = gridSet.domainSetup().zones;
 
     for (int zi = 0; zi < nzi; zi++)
     {
-        const Grid &iGrid = pairSearch->gridSet().grids()[zi];
+        const Grid &iGrid = gridSet.grids()[zi];
 
         int                 zj0;
         int                 zj1;
@@ -4022,16 +4022,16 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
         }
         for (int zj = zj0; zj < zj1; zj++)
         {
-            const Grid &jGrid = pairSearch->gridSet().grids()[zj];
+            const Grid &jGrid = gridSet.grids()[zj];
 
             if (debug)
             {
                 fprintf(debug, "ns search grid %d vs %d\n", zi, zj);
             }
 
-            pairSearch->cycleCounting_.start(PairSearch::enbsCCsearch);
+            searchCycleCounting->start(enbsCCsearch);
 
-            ci_block = get_ci_block_size(iGrid, pairSearch->domainSetup().haveDomDec, numLists);
+            ci_block = get_ci_block_size(iGrid, gridSet.domainSetup().haveMultipleDomains, numLists);
 
             /* With GPU: generate progressively smaller lists for
              * load balancing for local only or non-local with 2 zones.
@@ -4048,7 +4048,7 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
                      */
                     if (nbat->bUseBufferFlags && ((zi == 0 && zj == 0)))
                     {
-                        init_buffer_flags(&pairSearch->work()[th].buffer_flags, nbat->numAtoms());
+                        init_buffer_flags(&searchWork[th].buffer_flags, nbat->numAtoms());
                     }
 
                     if (combineLists_ && th > 0)
@@ -4058,17 +4058,17 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
                         clear_pairlist(&gpuLists_[th]);
                     }
 
-                    PairsearchWork *searchWork = &pairSearch->work()[th];
+                    PairsearchWork &work = searchWork[th];
 
-                    searchWork->cycleCounter.start();
+                    work.cycleCounter.start();
 
                     t_nblist *fepListPtr = (fepLists_.empty() ? nullptr : fepLists_[th]);
 
                     /* Divide the i cells equally over the pairlists */
                     if (isCpuType_)
                     {
-                        nbnxn_make_pairlist_part(*pairSearch, iGrid, jGrid,
-                                                 searchWork, nbat, *excl,
+                        nbnxn_make_pairlist_part(gridSet, iGrid, jGrid,
+                                                 &work, nbat, *excl,
                                                  rlist,
                                                  kernelType,
                                                  ci_block,
@@ -4081,8 +4081,8 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
                     }
                     else
                     {
-                        nbnxn_make_pairlist_part(*pairSearch, iGrid, jGrid,
-                                                 searchWork, nbat, *excl,
+                        nbnxn_make_pairlist_part(gridSet, iGrid, jGrid,
+                                                 &work, nbat, *excl,
                                                  rlist,
                                                  kernelType,
                                                  ci_block,
@@ -4094,18 +4094,18 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
                                                  fepListPtr);
                     }
 
-                    searchWork->cycleCounter.stop();
+                    work.cycleCounter.stop();
                 }
                 GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR;
             }
-            pairSearch->cycleCounting_.stop(PairSearch::enbsCCsearch);
+            searchCycleCounting->stop(enbsCCsearch);
 
             np_tot = 0;
             np_noq = 0;
             np_hlj = 0;
             for (int th = 0; th < numLists; th++)
             {
-                inc_nrnb(nrnb, eNR_NBNXN_DIST2, pairSearch->work()[th].ndistc);
+                inc_nrnb(nrnb, eNR_NBNXN_DIST2, searchWork[th].ndistc);
 
                 if (isCpuType_)
                 {
@@ -4137,12 +4137,12 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
             {
                 GMX_ASSERT(!isCpuType_, "Can only combine GPU lists");
 
-                pairSearch->cycleCounting_.start(PairSearch::enbsCCcombine);
+                searchCycleCounting->start(enbsCCcombine);
 
                 combine_nblists(gmx::constArrayRefFromArray(&gpuLists_[1], numLists - 1),
                                 &gpuLists_[0]);
 
-                pairSearch->cycleCounting_.stop(PairSearch::enbsCCcombine);
+                searchCycleCounting->stop(enbsCCcombine);
             }
         }
     }
@@ -4151,7 +4151,7 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
     {
         if (numLists > 1 && checkRebalanceSimpleLists(cpuLists_))
         {
-            rebalanceSimpleLists(cpuLists_, cpuListsWork_, pairSearch->work());
+            rebalanceSimpleLists(cpuLists_, cpuListsWork_, searchWork);
 
             /* Swap the sets of pair lists */
             cpuLists_.swap(cpuListsWork_);
@@ -4180,13 +4180,13 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
 
     if (nbat->bUseBufferFlags)
     {
-        reduce_buffer_flags(*pairSearch, numLists, &nbat->buffer_flags);
+        reduce_buffer_flags(searchWork, numLists, &nbat->buffer_flags);
     }
 
-    if (pairSearch->gridSet().haveFep())
+    if (gridSet.haveFep())
     {
         /* Balance the free-energy lists over all the threads */
-        balance_fep_lists(fepLists_, pairSearch->work());
+        balance_fep_lists(fepLists_, searchWork);
     }
 
     if (isCpuType_)
@@ -4206,12 +4206,12 @@ PairlistSet::constructPairlists(PairSearch                *pairSearch,
         {
             for (auto &cpuList : cpuLists_)
             {
-                print_nblist_statistics(debug, cpuList, *pairSearch, rlist);
+                print_nblist_statistics(debug, cpuList, gridSet, rlist);
             }
         }
         else if (!isCpuType_ && gpuLists_.size() > 1)
         {
-            print_nblist_statistics(debug, gpuLists_[0], *pairSearch, rlist);
+            print_nblist_statistics(debug, gpuLists_[0], gridSet, rlist);
         }
     }
 
@@ -4253,7 +4253,9 @@ PairlistSets::construct(const InteractionLocality  iLocality,
                         const int64_t              step,
                         t_nrnb                    *nrnb)
 {
-    pairlistSet(iLocality).constructPairlists(pairSearch, nbat, excl, kernelType, minimumIlistCountForGpuBalancing_, nrnb);
+    pairlistSet(iLocality).constructPairlists(pairSearch->gridSet(), pairSearch->work(),
+                                              nbat, excl, kernelType, minimumIlistCountForGpuBalancing_,
+                                              nrnb, &pairSearch->cycleCounting_);
 
     if (iLocality == Nbnxm::InteractionLocality::Local)
     {
@@ -4271,7 +4273,7 @@ PairlistSets::construct(const InteractionLocality  iLocality,
         pairSearch->cycleCounting_.searchCount_++;
     }
     if (pairSearch->cycleCounting_.recordCycles_ &&
-        (!pairSearch->domainSetup().haveDomDec || iLocality == InteractionLocality::NonLocal) &&
+        (!pairSearch->gridSet().domainSetup().haveMultipleDomains || iLocality == InteractionLocality::NonLocal) &&
         pairSearch->cycleCounting_.searchCount_ % 100 == 0)
     {
         pairSearch->cycleCounting_.printCycles(stderr, pairSearch->work());
index 20ef2a4bbcdedc0fb4eb10cd8d2a995f5955700e..5ef25591193c532d466305c01e87c95cb4991da2 100644 (file)
@@ -58,12 +58,14 @@ struct NbnxnPairlistCpuWork;
 struct NbnxnPairlistGpuWork;
 struct nbnxn_atomdata_t;
 struct PairlistParams;
-class PairSearch;
+struct PairsearchWork;
+struct SearchCycleCounting;
 struct t_blocka;
 struct t_nrnb;
 
 namespace Nbnxm
 {
+class GridSet;
 enum class KernelType;
 }
 
@@ -303,12 +305,14 @@ class PairlistSet
         ~PairlistSet();
 
         //! Constructs the pairlists in the set using the coordinates in \p nbat
-        void constructPairlists(PairSearch        *pairSearch,
-                                nbnxn_atomdata_t  *nbat,
-                                const t_blocka    *excl,
-                                Nbnxm::KernelType  kernelType,
-                                int                minimumIlistCountForGpuBalancing,
-                                t_nrnb            *nrnb);
+        void constructPairlists(const Nbnxm::GridSet          &gridSet,
+                                gmx::ArrayRef<PairsearchWork>  searchWork,
+                                nbnxn_atomdata_t              *nbat,
+                                const t_blocka                *excl,
+                                Nbnxm::KernelType              kernelType,
+                                int                            minimumIlistCountForGpuBalancing,
+                                t_nrnb                        *nrnb,
+                                SearchCycleCounting           *searchCycleCounting);
 
         //! Dispatch the kernel for dynamic pairlist pruning
         void dispatchPruneKernel(const nbnxn_atomdata_t *nbat,
index 5ddd0d2d490354c4e9bd9661f90eebc384ef59ab..d43e39be253cfd4fe459da597a58c66b778b6644 100644 (file)
@@ -49,8 +49,8 @@
 #include "gromacs/utility/smalloc.h"
 
 
-void PairSearch::SearchCycleCounting::printCycles(FILE                               *fp,
-                                                  gmx::ArrayRef<const PairsearchWork> work) const
+void SearchCycleCounting::printCycles(FILE                               *fp,
+                                      gmx::ArrayRef<const PairsearchWork> work) const
 {
     fprintf(fp, "\n");
     fprintf(fp, "ns %4d grid %4.1f search %4.1f",
@@ -108,27 +108,13 @@ PairsearchWork::~PairsearchWork()
     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),
+    gridSet_(ePBC, numDDCells, ddZones, pairlistType, haveFep, maxNumThreads),
     work_(maxNumThreads)
 {
     cycleCounting_.recordCycles_ = (getenv("GMX_NBNXN_CYCLE") != nullptr);
index 4baeed6d798074a70bc147f1b6376486fa3acc84..7dcf54712d8dece1bc6c3fdf8237865d51a54924 100644 (file)
@@ -110,6 +110,40 @@ class nbnxn_cycle_t
         gmx_cycles_t start_  = 0;
 };
 
+//! Local cycle count enum for profiling different parts of search
+enum {
+    enbsCCgrid, enbsCCsearch, enbsCCcombine, enbsCCnr
+};
+
+/*! \internal
+ * \brief Struct for collecting detailed cycle counts for the search
+ */
+struct SearchCycleCounting
+{
+    //! Start a pair search cycle counter
+    void start(const int enbsCC)
+    {
+        cc_[enbsCC].start();
+    }
+
+    //! Stop a pair search cycle counter
+    void stop(const int enbsCC)
+    {
+        cc_[enbsCC].stop();
+    }
+
+    //! Print the cycle counts to \p fp
+    void printCycles(FILE                               *fp,
+                     gmx::ArrayRef<const PairsearchWork> work) const;
+
+    //! Tells whether we record cycles
+    bool          recordCycles_ = false;
+    //! The number of times pairsearching has been performed, local+non-local count as 1
+    int           searchCount_  = 0;
+    //! The set of cycle counters
+    nbnxn_cycle_t cc_[enbsCCnr];
+};
+
 // TODO: Move nbnxn_search_work_t definition to its own file
 
 /* Thread-local work struct, contains working data for Grid */
@@ -139,57 +173,6 @@ struct PairsearchWork
 class PairSearch
 {
     public:
-        /*! \internal
-         * \brief Description of the domain setup: PBC and the connections between domains
-         */
-        struct DomainSetup
-        {
-            /*! \internal
-             * \brief Description of the domain setup: PBC and the connections between domains
-             */
-            //! Constructor, without DD \p numDDCells and \p ddZones should be nullptr
-            DomainSetup(int                       ePBC,
-                        const ivec               *numDDCells,
-                        const gmx_domdec_zones_t *ddZones);
-
-            //! The type of PBC
-            int                       ePBC;
-            //! Tells whether we are using domain decomposition
-            bool                      haveDomDec;
-            //! Tells whether we are using domain decomposition per dimension
-            std::array<bool, DIM>     haveDomDecPerDim;
-            //! The domain decomposition zone setup
-            const gmx_domdec_zones_t *zones;
-        };
-
-        //! Local cycle count enum for profiling different parts of search
-        enum {
-            enbsCCgrid, enbsCCsearch, enbsCCcombine, enbsCCnr
-        };
-
-        struct SearchCycleCounting
-        {
-            //! Start a pair search cycle counter
-            void start(const int enbsCC)
-            {
-                cc_[enbsCC].start();
-            }
-
-            //! Stop a pair search cycle counter
-            void stop(const int enbsCC)
-            {
-                cc_[enbsCC].stop();
-            }
-
-            //! Print the cycle counts to \p fp
-            void printCycles(FILE                               *fp,
-                             gmx::ArrayRef<const PairsearchWork> work) const;
-
-            bool          recordCycles_ = false;
-            int           searchCount_  = 0;
-            nbnxn_cycle_t cc_[enbsCCnr];
-        };
-
         //! Puts the atoms in \p ddZone on the grid and copies the coordinates to \p nbat
         void putOnGrid(const matrix                    box,
                        int                             ddZone,
@@ -235,11 +218,6 @@ class PairSearch
             gridSet_.setLocalAtomOrder();
         }
 
-        const DomainSetup domainSetup() const
-        {
-            return domainSetup_;
-        }
-
         //! Returns the set of search grids
         const Nbnxm::GridSet &gridSet() const
         {
@@ -259,8 +237,6 @@ class PairSearch
         }
 
     private:
-        //! The domain setup
-        DomainSetup                 domainSetup_;
         //! The set of search grids
         Nbnxm::GridSet              gridSet_;
         //! Work objects, one entry for each thread
@@ -268,7 +244,7 @@ class PairSearch
 
     public:
         //! Cycle counting for measuring components of the search
-        SearchCycleCounting  cycleCounting_;
+        SearchCycleCounting         cycleCounting_;
 };
 
 #endif