Remove unneeded members from nb_kernel_data_t
authorejjordan <ejjordan@kth.se>
Tue, 23 Mar 2021 15:56:26 +0000 (16:56 +0100)
committerJoe Jordan <ejjordan12@gmail.com>
Wed, 24 Mar 2021 07:27:42 +0000 (07:27 +0000)
Several unused members are removed from nb_kernel_data_t. Additionally,
some members that can be passed directly from the gmx_enerdata_t
struct are removed, and instead added to the call signature of
gmx_nb_free_energy_kernel. This expansion of the call signature
is the only way to get rid of the real* members of nb_kernel_data_t.
Also, function with no implementation is removed.

src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp
src/gromacs/gmxlib/nonbonded/nb_free_energy.h
src/gromacs/gmxlib/nonbonded/nb_kernel.h
src/gromacs/mdlib/sim_util.cpp
src/gromacs/nbnxm/kerneldispatch.cpp

index 795cdbce4e16b6e2bbae6cce6c6f3a209abc89a0..d50377fa674200dea996af6906ae7d050107ba1a 100644 (file)
@@ -55,6 +55,7 @@
 #include "gromacs/mdtypes/interaction_const.h"
 #include "gromacs/mdtypes/md_enums.h"
 #include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
 #include "gromacs/simd/simd.h"
 #include "gromacs/utility/fatalerror.h"
 #include "gromacs/utility/arrayref.h"
@@ -205,6 +206,8 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist,
                                   const t_forcerec* gmx_restrict fr,
                                   const t_mdatoms* gmx_restrict mdatoms,
                                   nb_kernel_data_t* gmx_restrict kernel_data,
+                                  gmx::ArrayRef<real>            energygrp_elec,
+                                  gmx::ArrayRef<real>            energygrp_vdw,
                                   t_nrnb* gmx_restrict nrnb)
 {
 #define STATE_A 0
@@ -237,14 +240,12 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist,
     const real*               shiftvec  = fr->shift_vec[0];
     const real*               chargeA   = mdatoms->chargeA;
     const real*               chargeB   = mdatoms->chargeB;
-    real*                     Vc        = kernel_data->energygrp_elec;
     const int*                typeA     = mdatoms->typeA;
     const int*                typeB     = mdatoms->typeB;
     const int                 ntype     = fr->ntype;
     gmx::ArrayRef<const real> nbfp      = fr->nbfp;
     gmx::ArrayRef<const real> nbfp_grid = fr->ljpme_c6grid;
 
-    real*      Vv = kernel_data->energygrp_vdw;
     const real lambda_coul =
             kernel_data->lambda[static_cast<int>(FreeEnergyPerturbationCouplingType::Coul)];
     const real lambda_vdw =
@@ -834,9 +835,9 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist,
             {
                 int ggid = gid[n];
 #pragma omp atomic
-                Vc[ggid] += vCTot;
+                energygrp_elec[ggid] += vCTot;
 #pragma omp atomic
-                Vv[ggid] += vVTot;
+                energygrp_vdw[ggid] += vVTot;
             }
         }
     } // end for (int n = 0; n < nri; n++)
@@ -873,6 +874,8 @@ typedef void (*KernelFunction)(const t_nblist* gmx_restrict nlist,
                                const t_forcerec* gmx_restrict fr,
                                const t_mdatoms* gmx_restrict mdatoms,
                                nb_kernel_data_t* gmx_restrict kernel_data,
+                               gmx::ArrayRef<real>            energygrp_elec,
+                               gmx::ArrayRef<real>            energygrp_vdw,
                                t_nrnb* gmx_restrict nrnb);
 
 template<bool useSoftCore, bool scLambdasOrAlphasDiffer, bool vdwInteractionTypeIsEwald, bool elecInteractionTypeIsEwald, bool vdwModifierIsPotSwitch>
@@ -994,6 +997,8 @@ void gmx_nb_free_energy_kernel(const t_nblist*            nlist,
                                const t_forcerec*          fr,
                                const t_mdatoms*           mdatoms,
                                nb_kernel_data_t*          kernel_data,
+                               gmx::ArrayRef<real>        energygrp_elec,
+                               gmx::ArrayRef<real>        energygrp_vdw,
                                t_nrnb*                    nrnb)
 {
     const interaction_const_t& ic = *fr->ic;
@@ -1029,5 +1034,5 @@ void gmx_nb_free_energy_kernel(const t_nblist*            nlist,
                                 vdwModifierIsPotSwitch,
                                 useSimd,
                                 ic);
-    kernelFunc(nlist, xx, ff, fr, mdatoms, kernel_data, nrnb);
+    kernelFunc(nlist, xx, ff, fr, mdatoms, kernel_data, energygrp_elec, energygrp_vdw, nrnb);
 }
index ee78e7fe0241b5cb6aee7c2072402e4f07a84cba..7d559e871412074d741b9f57e386c4174fc3b03d 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
  * Copyright (c) 2001-2008, The GROMACS development team.
- * Copyright (c) 2013,2014,2015,2018,2019,2020, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015,2018,2019,2020,2021, 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.
 #ifndef _nb_free_energy_h_
 #define _nb_free_energy_h_
 
-#include "gromacs/gmxlib/nrnb.h"
 #include "gromacs/gmxlib/nonbonded/nb_kernel.h"
 #include "gromacs/math/vectypes.h"
-#include "gromacs/mdtypes/nblist.h"
+#include "gromacs/utility/basedefinitions.h"
 
 struct t_forcerec;
 struct t_mdatoms;
+struct t_nrnb;
+struct t_nblist;
 namespace gmx
 {
 class ForceWithShiftForces;
@@ -56,6 +57,8 @@ void gmx_nb_free_energy_kernel(const t_nblist* gmx_restrict nlist,
                                const t_forcerec* gmx_restrict fr,
                                const t_mdatoms* gmx_restrict mdatoms,
                                nb_kernel_data_t* gmx_restrict kernel_data,
+                               gmx::ArrayRef<real>            energygrp_elec,
+                               gmx::ArrayRef<real>            energygrp_vdw,
                                t_nrnb* gmx_restrict nrnb);
 
 #endif
index c261d2652d20d805c3450b07143ea84942fc1713..df4148feb06e60e37458a95e29dd7ee461ddff7f 100644 (file)
 #ifndef _nb_kernel_h_
 #define _nb_kernel_h_
 
-#include <stdio.h>
-
-#include "gromacs/gmxlib/nrnb.h"
-#include "gromacs/math/vectypes.h"
-#include "gromacs/mdtypes/nblist.h"
 #include "gromacs/utility/arrayref.h"
 #include "gromacs/utility/real.h"
 
-struct t_blocka;
-struct t_mdatoms;
 
 /* Structure to collect kernel data not available in forcerec or mdatoms structures.
  * This is only used inside the nonbonded module.
  */
-typedef struct
+struct nb_kernel_data_t
 {
     int                       flags;
-    const struct t_blocka*    exclusions;
     gmx::ArrayRef<const real> lambda;
     gmx::ArrayRef<real>       dvdl;
-
-    /* pointers to tables */
-    t_forcetable* table_elec;
-    t_forcetable* table_vdw;
-    t_forcetable* table_elec_vdw;
-
-    /* potentials */
-    real* energygrp_elec;
-    real* energygrp_vdw;
-} nb_kernel_data_t;
-
-
-typedef void nb_kernel_t(t_nblist* gmx_restrict nlist,
-                         rvec* gmx_restrict x,
-                         rvec* gmx_restrict f,
-                         struct t_forcerec* gmx_restrict fr,
-                         t_mdatoms* gmx_restrict mdatoms,
-                         nb_kernel_data_t* gmx_restrict kernel_data,
-                         t_nrnb* gmx_restrict nrnb);
+};
 
 #endif /* _nb_kernel_h_ */
index 30985796d99b392f5baaf7abc453b729b66ff547..7c51505a532304084321bc292175516e83700ca4 100644 (file)
@@ -60,6 +60,7 @@
 #include "gromacs/gmxlib/nonbonded/nb_free_energy.h"
 #include "gromacs/gmxlib/nonbonded/nb_kernel.h"
 #include "gromacs/gmxlib/nonbonded/nonbonded.h"
+#include "gromacs/gmxlib/nrnb.h"
 #include "gromacs/gpu_utils/gpu_utils.h"
 #include "gromacs/imd/imd.h"
 #include "gromacs/listed_forces/disre.h"
index 7cbfabfc78619d12965d6f50099ab5deb1fbb900..85e1f65b21b42ba5a6bf9824dd8e65d52d814a2a 100644 (file)
@@ -51,6 +51,7 @@
 #include "gromacs/mdtypes/interaction_const.h"
 #include "gromacs/mdtypes/md_enums.h"
 #include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
 #include "gromacs/mdtypes/simulation_workload.h"
 #include "gromacs/nbnxm/gpu_data_mgmt.h"
 #include "gromacs/nbnxm/nbnxm.h"
@@ -535,8 +536,8 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality   iLo
     kernel_data.lambda                                                      = lambda;
     kernel_data.dvdl                                                        = dvdl_nb;
 
-    kernel_data.energygrp_elec = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR].data();
-    kernel_data.energygrp_vdw = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR].data();
+    gmx::ArrayRef<real> energygrp_elec = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR];
+    gmx::ArrayRef<real> energygrp_vdw = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR];
 
     GMX_ASSERT(gmx_omp_nthreads_get(emntNonbonded) == nbl_fep.ssize(),
                "Number of lists should be same as number of NB threads");
@@ -548,7 +549,7 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality   iLo
         try
         {
             gmx_nb_free_energy_kernel(
-                    nbl_fep[th].get(), x, forceWithShiftForces, fr, &mdatoms, &kernel_data, nrnb);
+                    nbl_fep[th].get(), x, forceWithShiftForces, fr, &mdatoms, &kernel_data, energygrp_elec, energygrp_vdw, nrnb);
         }
         GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR
     }
@@ -578,10 +579,10 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality   iLo
                             | GMX_NONBONDED_DO_FOREIGNLAMBDA;
         kernel_data.lambda = lam_i;
         kernel_data.dvdl   = dvdl_nb;
-        kernel_data.energygrp_elec =
-                enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR].data();
-        kernel_data.energygrp_vdw =
-                enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR].data();
+        gmx::ArrayRef<real> energygrp_elec =
+                enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR];
+        gmx::ArrayRef<real> energygrp_vdw =
+                enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR];
 
         for (gmx::index i = 0; i < 1 + enerd->foreignLambdaTerms.numLambdas(); i++)
         {
@@ -596,8 +597,15 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality   iLo
             {
                 try
                 {
-                    gmx_nb_free_energy_kernel(
-                            nbl_fep[th].get(), x, forceWithShiftForces, fr, &mdatoms, &kernel_data, nrnb);
+                    gmx_nb_free_energy_kernel(nbl_fep[th].get(),
+                                              x,
+                                              forceWithShiftForces,
+                                              fr,
+                                              &mdatoms,
+                                              &kernel_data,
+                                              energygrp_elec,
+                                              energygrp_vdw,
+                                              nrnb);
                 }
                 GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR
             }