Remove nb_kernel_data_t
authorejjordan <ejjordan@kth.se>
Wed, 24 Mar 2021 08:14:07 +0000 (09:14 +0100)
committerejjordan <ejjordan@kth.se>
Wed, 24 Mar 2021 08:14:12 +0000 (09:14 +0100)
All data was copied from gmx_enerdata_t. Now use ArrayRefs to pass
the parameters to the kernels.

src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp
src/gromacs/gmxlib/nonbonded/nb_free_energy.h
src/gromacs/gmxlib/nonbonded/nb_kernel.h [deleted file]
src/gromacs/mdlib/sim_util.cpp
src/gromacs/nbnxm/kerneldispatch.cpp

index d50377fa674200dea996af6906ae7d050107ba1a..66adc9fc3e2b182a7b0902963e760fe4b09c7b33 100644 (file)
@@ -46,7 +46,6 @@
 #include <algorithm>
 
 #include "gromacs/gmxlib/nrnb.h"
-#include "gromacs/gmxlib/nonbonded/nb_kernel.h"
 #include "gromacs/gmxlib/nonbonded/nonbonded.h"
 #include "gromacs/math/functions.h"
 #include "gromacs/math/vec.h"
@@ -205,9 +204,11 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist,
                                   gmx::ForceWithShiftForces* forceWithShiftForces,
                                   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,
+                                  int                           flags,
+                                  gmx::ArrayRef<const real>     lambda,
+                                  gmx::ArrayRef<real>           dvdl,
+                                  gmx::ArrayRef<real>           energygrp_elec,
+                                  gmx::ArrayRef<real>           energygrp_vdw,
                                   t_nrnb* gmx_restrict nrnb)
 {
 #define STATE_A 0
@@ -246,20 +247,17 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist,
     gmx::ArrayRef<const real> nbfp      = fr->nbfp;
     gmx::ArrayRef<const real> nbfp_grid = fr->ljpme_c6grid;
 
-    const real lambda_coul =
-            kernel_data->lambda[static_cast<int>(FreeEnergyPerturbationCouplingType::Coul)];
-    const real lambda_vdw =
-            kernel_data->lambda[static_cast<int>(FreeEnergyPerturbationCouplingType::Vdw)];
-    gmx::ArrayRef<real> dvdl          = kernel_data->dvdl;
-    const auto&         scParams      = *ic->softCoreParameters;
-    const real          alpha_coul    = scParams.alphaCoulomb;
-    const real          alpha_vdw     = scParams.alphaVdw;
-    const real          lam_power     = scParams.lambdaPower;
-    const real          sigma6_def    = scParams.sigma6WithInvalidSigma;
-    const real          sigma6_min    = scParams.sigma6Minimum;
-    const bool          doForces      = ((kernel_data->flags & GMX_NONBONDED_DO_FORCE) != 0);
-    const bool          doShiftForces = ((kernel_data->flags & GMX_NONBONDED_DO_SHIFTFORCE) != 0);
-    const bool          doPotential   = ((kernel_data->flags & GMX_NONBONDED_DO_POTENTIAL) != 0);
+    const real  lambda_coul   = lambda[static_cast<int>(FreeEnergyPerturbationCouplingType::Coul)];
+    const real  lambda_vdw    = lambda[static_cast<int>(FreeEnergyPerturbationCouplingType::Vdw)];
+    const auto& scParams      = *ic->softCoreParameters;
+    const real  alpha_coul    = scParams.alphaCoulomb;
+    const real  alpha_vdw     = scParams.alphaVdw;
+    const real  lam_power     = scParams.lambdaPower;
+    const real  sigma6_def    = scParams.sigma6WithInvalidSigma;
+    const real  sigma6_min    = scParams.sigma6Minimum;
+    const bool  doForces      = ((flags & GMX_NONBONDED_DO_FORCE) != 0);
+    const bool  doShiftForces = ((flags & GMX_NONBONDED_DO_SHIFTFORCE) != 0);
+    const bool  doPotential   = ((flags & GMX_NONBONDED_DO_POTENTIAL) != 0);
 
     // Extract data from interaction_const_t
     const real facel           = ic->epsfac;
@@ -873,9 +871,11 @@ typedef void (*KernelFunction)(const t_nblist* gmx_restrict nlist,
                                gmx::ForceWithShiftForces* forceWithShiftForces,
                                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,
+                               int                           flags,
+                               gmx::ArrayRef<const real>     lambda,
+                               gmx::ArrayRef<real>           dvdl,
+                               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>
@@ -996,7 +996,9 @@ void gmx_nb_free_energy_kernel(const t_nblist*            nlist,
                                gmx::ForceWithShiftForces* ff,
                                const t_forcerec*          fr,
                                const t_mdatoms*           mdatoms,
-                               nb_kernel_data_t*          kernel_data,
+                               int                        flags,
+                               gmx::ArrayRef<const real>  lambda,
+                               gmx::ArrayRef<real>        dvdl,
                                gmx::ArrayRef<real>        energygrp_elec,
                                gmx::ArrayRef<real>        energygrp_vdw,
                                t_nrnb*                    nrnb)
@@ -1019,8 +1021,8 @@ void gmx_nb_free_energy_kernel(const t_nblist*            nlist,
     }
     else
     {
-        if (kernel_data->lambda[static_cast<int>(FreeEnergyPerturbationCouplingType::Coul)]
-                    == kernel_data->lambda[static_cast<int>(FreeEnergyPerturbationCouplingType::Vdw)]
+        if (lambda[static_cast<int>(FreeEnergyPerturbationCouplingType::Coul)]
+                    == lambda[static_cast<int>(FreeEnergyPerturbationCouplingType::Vdw)]
             && scParams.alphaCoulomb == scParams.alphaVdw)
         {
             scLambdasOrAlphasDiffer = false;
@@ -1034,5 +1036,5 @@ void gmx_nb_free_energy_kernel(const t_nblist*            nlist,
                                 vdwModifierIsPotSwitch,
                                 useSimd,
                                 ic);
-    kernelFunc(nlist, xx, ff, fr, mdatoms, kernel_data, energygrp_elec, energygrp_vdw, nrnb);
+    kernelFunc(nlist, xx, ff, fr, mdatoms, flags, lambda, dvdl, energygrp_elec, energygrp_vdw, nrnb);
 }
index 7d559e871412074d741b9f57e386c4174fc3b03d..d3cf9f546ed1bdaa9dca7d04f569da0ba018a005 100644 (file)
@@ -38,7 +38,6 @@
 #ifndef _nb_free_energy_h_
 #define _nb_free_energy_h_
 
-#include "gromacs/gmxlib/nonbonded/nb_kernel.h"
 #include "gromacs/math/vectypes.h"
 #include "gromacs/utility/basedefinitions.h"
 
@@ -49,16 +48,20 @@ struct t_nblist;
 namespace gmx
 {
 class ForceWithShiftForces;
-}
+template<typename>
+class ArrayRef;
+} // namespace gmx
 
 void gmx_nb_free_energy_kernel(const t_nblist* gmx_restrict nlist,
                                rvec* gmx_restrict         xx,
                                gmx::ForceWithShiftForces* forceWithShiftForces,
                                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,
+                               int                           flags,
+                               gmx::ArrayRef<const real>     lambda,
+                               gmx::ArrayRef<real>           dvdl,
+                               gmx::ArrayRef<real>           energygrp_elec,
+                               gmx::ArrayRef<real>           energygrp_vdw,
                                t_nrnb* gmx_restrict nrnb);
 
 #endif
diff --git a/src/gromacs/gmxlib/nonbonded/nb_kernel.h b/src/gromacs/gmxlib/nonbonded/nb_kernel.h
deleted file mode 100644 (file)
index df4148f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * This file is part of the GROMACS molecular simulation package.
- *
- * Copyright (c) 2012,2014,2015,2017,2018 by the GROMACS development team.
- * Copyright (c) 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.
- *
- * 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 _nb_kernel_h_
-#define _nb_kernel_h_
-
-#include "gromacs/utility/arrayref.h"
-#include "gromacs/utility/real.h"
-
-
-/* Structure to collect kernel data not available in forcerec or mdatoms structures.
- * This is only used inside the nonbonded module.
- */
-struct nb_kernel_data_t
-{
-    int                       flags;
-    gmx::ArrayRef<const real> lambda;
-    gmx::ArrayRef<real>       dvdl;
-};
-
-#endif /* _nb_kernel_h_ */
index 7c51505a532304084321bc292175516e83700ca4..8850f06ac6a011e0035e7371c5e3528ce6eb298d 100644 (file)
@@ -58,7 +58,6 @@
 #include "gromacs/ewald/pme_pp_comm_gpu.h"
 #include "gromacs/gmxlib/network.h"
 #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"
index 85e1f65b21b42ba5a6bf9824dd8e65d52d814a2a..ca88b0a5b6834b1ab2de4bf40b6e974b413c8907 100644 (file)
@@ -38,7 +38,6 @@
 
 #include "gromacs/gmxlib/nrnb.h"
 #include "gromacs/gmxlib/nonbonded/nb_free_energy.h"
-#include "gromacs/gmxlib/nonbonded/nb_kernel.h"
 #include "gromacs/gmxlib/nonbonded/nonbonded.h"
 #include "gromacs/math/vectypes.h"
 #include "gromacs/mdlib/enerdata_utils.h"
@@ -530,11 +529,10 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality   iLo
         donb_flags |= GMX_NONBONDED_DO_POTENTIAL;
     }
 
-    nb_kernel_data_t                                                kernel_data;
-    gmx::EnumerationArray<FreeEnergyPerturbationCouplingType, real> dvdl_nb = { 0 };
-    kernel_data.flags                                                       = donb_flags;
-    kernel_data.lambda                                                      = lambda;
-    kernel_data.dvdl                                                        = dvdl_nb;
+    gmx::EnumerationArray<FreeEnergyPerturbationCouplingType, real> dvdl_nb      = { 0 };
+    int                                                             kernelFlags  = donb_flags;
+    gmx::ArrayRef<const real>                                       kernelLambda = lambda;
+    gmx::ArrayRef<real>                                             kernelDvdl   = dvdl_nb;
 
     gmx::ArrayRef<real> energygrp_elec = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR];
     gmx::ArrayRef<real> energygrp_vdw = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR];
@@ -548,8 +546,17 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality   iLo
     {
         try
         {
-            gmx_nb_free_energy_kernel(
-                    nbl_fep[th].get(), x, forceWithShiftForces, fr, &mdatoms, &kernel_data, energygrp_elec, energygrp_vdw, nrnb);
+            gmx_nb_free_energy_kernel(nbl_fep[th].get(),
+                                      x,
+                                      forceWithShiftForces,
+                                      fr,
+                                      &mdatoms,
+                                      kernelFlags,
+                                      kernelLambda,
+                                      kernelDvdl,
+                                      energygrp_elec,
+                                      energygrp_vdw,
+                                      nrnb);
         }
         GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR
     }
@@ -575,10 +582,10 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality   iLo
     if (fepvals->n_lambda > 0 && stepWork.computeDhdl && fepvals->sc_alpha != 0)
     {
         gmx::EnumerationArray<FreeEnergyPerturbationCouplingType, real> lam_i;
-        kernel_data.flags = (donb_flags & ~(GMX_NONBONDED_DO_FORCE | GMX_NONBONDED_DO_SHIFTFORCE))
-                            | GMX_NONBONDED_DO_FOREIGNLAMBDA;
-        kernel_data.lambda = lam_i;
-        kernel_data.dvdl   = dvdl_nb;
+        kernelFlags = (donb_flags & ~(GMX_NONBONDED_DO_FORCE | GMX_NONBONDED_DO_SHIFTFORCE))
+                      | GMX_NONBONDED_DO_FOREIGNLAMBDA;
+        kernelLambda = lam_i;
+        kernelDvdl   = dvdl_nb;
         gmx::ArrayRef<real> energygrp_elec =
                 enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR];
         gmx::ArrayRef<real> energygrp_vdw =
@@ -602,7 +609,9 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality   iLo
                                               forceWithShiftForces,
                                               fr,
                                               &mdatoms,
-                                              &kernel_data,
+                                              kernelFlags,
+                                              kernelLambda,
+                                              kernelDvdl,
                                               energygrp_elec,
                                               energygrp_vdw,
                                               nrnb);