// update the coordinates in the backend
nbv_->convertCoordinates(gmx::AtomLocality::Local, coordinateInput);
- nbv_->dispatchNonbondedKernel(gmx::InteractionLocality::Local,
- *interactionConst_,
- *stepWork_,
- enbvClearFYes,
- *forcerec_,
- enerd_.get(),
- nrnb_.get());
+ nbv_->dispatchNonbondedKernel(
+ gmx::InteractionLocality::Local,
+ *interactionConst_,
+ *stepWork_,
+ enbvClearFYes,
+ forcerec_->shift_vec,
+ enerd_->grpp.energyGroupPairTerms[forcerec_->haveBuckingham ? NonBondedEnergyTerms::BuckinghamSR
+ : NonBondedEnergyTerms::LJSR],
+ enerd_->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR],
+ nrnb_.get());
nbv_->atomdata_add_nbat_f_to_f(gmx::AtomLocality::All, forceOutput);
}
}
}
- nbv->dispatchNonbondedKernel(ilocality, *ic, stepWork, clearF, *fr, enerd, nrnb);
+ nbv->dispatchNonbondedKernel(
+ ilocality,
+ *ic,
+ stepWork,
+ clearF,
+ fr->shift_vec,
+ enerd->grpp.energyGroupPairTerms[fr->haveBuckingham ? NonBondedEnergyTerms::BuckinghamSR
+ : NonBondedEnergyTerms::LJSR],
+ enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR],
+ nrnb);
}
static inline void clearRVecs(ArrayRef<RVec> v, const bool useOpenmpThreading)
#include "gromacs/gmxlib/nrnb.h"
#include "gromacs/math/units.h"
+#include "gromacs/math/vectypes.h"
#include "gromacs/mdlib/dispersioncorrection.h"
#include "gromacs/mdlib/force_flags.h"
#include "gromacs/mdlib/forcerec.h"
for (int iter = 0; iter < options.numPreIterations; iter++)
{
nbv->dispatchNonbondedKernel(
- gmx::InteractionLocality::Local, ic, stepWork, enbvClearFYes, system.forceRec, &enerd, &nrnb);
+ gmx::InteractionLocality::Local,
+ ic,
+ stepWork,
+ enbvClearFYes,
+ system.forceRec.shift_vec,
+ enerd.grpp.energyGroupPairTerms[system.forceRec.haveBuckingham ? NonBondedEnergyTerms::BuckinghamSR
+ : NonBondedEnergyTerms::LJSR],
+ enerd.grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR],
+ &nrnb);
}
const int numIterations = (doWarmup ? options.numWarmupIterations : options.numIterations);
{
// Run the kernel without force clearing
nbv->dispatchNonbondedKernel(
- gmx::InteractionLocality::Local, ic, stepWork, enbvClearFNo, system.forceRec, &enerd, &nrnb);
+ gmx::InteractionLocality::Local,
+ ic,
+ stepWork,
+ enbvClearFNo,
+ system.forceRec.shift_vec,
+ enerd.grpp.energyGroupPairTerms[system.forceRec.haveBuckingham ? NonBondedEnergyTerms::BuckinghamSR
+ : NonBondedEnergyTerms::LJSR],
+ enerd.grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR],
+ &nrnb);
}
cycles = gmx_cycles_read() - cycles;
if (!doWarmup)
}
}
-void nonbonded_verlet_t::dispatchNonbondedKernel(gmx::InteractionLocality iLocality,
- const interaction_const_t& ic,
- const gmx::StepWorkload& stepWork,
- int clearF,
- const t_forcerec& fr,
- gmx_enerdata_t* enerd,
- t_nrnb* nrnb)
+void nonbonded_verlet_t::dispatchNonbondedKernel(gmx::InteractionLocality iLocality,
+ const interaction_const_t& ic,
+ const gmx::StepWorkload& stepWork,
+ int clearF,
+ gmx::ArrayRef<const gmx::RVec> shiftvec,
+ gmx::ArrayRef<real> repulsionDispersionSR,
+ gmx::ArrayRef<real> CoulombSR,
+ t_nrnb* nrnb) const
{
const PairlistSet& pairlistSet = pairlistSets().pairlistSet(iLocality);
case Nbnxm::KernelType::Cpu4x4_PlainC:
case Nbnxm::KernelType::Cpu4xN_Simd_4xN:
case Nbnxm::KernelType::Cpu4xN_Simd_2xNN:
- nbnxn_kernel_cpu(
- pairlistSet,
- kernelSetup(),
- nbat.get(),
- ic,
- fr.shift_vec,
- stepWork,
- clearF,
- enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR].data(),
- fr.haveBuckingham
- ? enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::BuckinghamSR].data()
- : enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR].data(),
- wcycle_);
+ nbnxn_kernel_cpu(pairlistSet,
+ kernelSetup(),
+ nbat.get(),
+ ic,
+ shiftvec,
+ stepWork,
+ clearF,
+ CoulombSR.data(),
+ repulsionDispersionSR.data(),
+ wcycle_);
break;
case Nbnxm::KernelType::Gpu8x8x8:
break;
case Nbnxm::KernelType::Cpu8x8x8_PlainC:
- nbnxn_kernel_gpu_ref(
- pairlistSet.gpuList(),
- nbat.get(),
- &ic,
- fr.shift_vec,
- stepWork,
- clearF,
- nbat->out[0].f,
- nbat->out[0].fshift.data(),
- enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR].data(),
- fr.haveBuckingham
- ? enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::BuckinghamSR].data()
- : enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR].data());
+ nbnxn_kernel_gpu_ref(pairlistSet.gpuList(),
+ nbat.get(),
+ &ic,
+ shiftvec,
+ stepWork,
+ clearF,
+ nbat->out[0].f,
+ nbat->out[0].fshift.data(),
+ CoulombSR.data(),
+ repulsionDispersionSR.data());
break;
default: GMX_RELEASE_ASSERT(false, "Invalid nonbonded kernel type passed!");
void dispatchPruneKernelGpu(int64_t step);
//! \brief Executes the non-bonded kernel of the GPU or launches it on the GPU
- void dispatchNonbondedKernel(gmx::InteractionLocality iLocality,
- const interaction_const_t& ic,
- const gmx::StepWorkload& stepWork,
- int clearF,
- const t_forcerec& fr,
- gmx_enerdata_t* enerd,
- t_nrnb* nrnb);
+ void dispatchNonbondedKernel(gmx::InteractionLocality iLocality,
+ const interaction_const_t& ic,
+ const gmx::StepWorkload& stepWork,
+ int clearF,
+ gmx::ArrayRef<const gmx::RVec> shiftvec,
+ gmx::ArrayRef<real> repulsionDispersionSR,
+ gmx::ArrayRef<real> CoulombSR,
+ t_nrnb* nrnb) const;
//! Executes the non-bonded free-energy kernel, always runs on the CPU
void dispatchFreeEnergyKernel(gmx::InteractionLocality iLocality,