#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"
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
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 =
{
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++)
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>
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;
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);
}
*
* 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;
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
#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_ */
#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"
#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"
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");
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
}
| 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++)
{
{
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
}