#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"
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
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;
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>
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)
}
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;
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);
}
#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"
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
+++ /dev/null
-/*
- * 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_ */
#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"
#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"
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];
{
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
}
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 =
forceWithShiftForces,
fr,
&mdatoms,
- &kernel_data,
+ kernelFlags,
+ kernelLambda,
+ kernelDvdl,
energygrp_elec,
energygrp_vdw,
nrnb);