#include "gromacs/math/vec.h"
#include "gromacs/mdlib/gmx_omp_nthreads.h"
#include "gromacs/mdtypes/forcerec.h" // only for GET_CGINFO_*
-#include "gromacs/mdtypes/mdatom.h"
#include "gromacs/nbnxm/nbnxm.h"
#include "gromacs/pbcutil/ishift.h"
#include "gromacs/simd/simd.h"
/* Sets the atom type in nbnxn_atomdata_t */
static void nbnxn_atomdata_set_atomtypes(nbnxn_atomdata_t::Params* params,
const Nbnxm::GridSet& gridSet,
- const int* type)
+ ArrayRef<const int> atomTypes)
{
params->type.resize(gridSet.numGridAtomsTotal());
const int numAtoms = grid.paddedNumAtomsInColumn(i);
const int atomOffset = grid.firstAtomInColumn(i);
- copy_int_to_nbat_int(gridSet.atomIndices().data() + atomOffset, grid.numAtomsInColumn(i),
- numAtoms, type, params->numTypes - 1, params->type.data() + atomOffset);
+ copy_int_to_nbat_int(gridSet.atomIndices().data() + atomOffset,
+ grid.numAtomsInColumn(i), numAtoms, atomTypes.data(),
+ params->numTypes - 1, params->type.data() + atomOffset);
}
}
}
}
/* Sets the charges in nbnxn_atomdata_t *nbat */
-static void nbnxn_atomdata_set_charges(nbnxn_atomdata_t* nbat, const Nbnxm::GridSet& gridSet, const real* charge)
+static void nbnxn_atomdata_set_charges(nbnxn_atomdata_t* nbat,
+ const Nbnxm::GridSet& gridSet,
+ ArrayRef<const real> charges)
{
if (nbat->XFormat != nbatXYZQ)
{
int i;
for (i = 0; i < numAtoms; i++)
{
- *q = charge[gridSet.atomIndices()[atomOffset + i]];
+ *q = charges[gridSet.atomIndices()[atomOffset + i]];
q += STRIDE_XYZQ;
}
/* Complete the partially filled last cell with zeros */
int i;
for (i = 0; i < numAtoms; i++)
{
- *q = charge[gridSet.atomIndices()[atomOffset + i]];
+ *q = charges[gridSet.atomIndices()[atomOffset + i]];
q++;
}
/* Complete the partially filled last cell with zeros */
/* Set the energy group indices for atoms in nbnxn_atomdata_t */
static void nbnxn_atomdata_set_energygroups(nbnxn_atomdata_t::Params* params,
const Nbnxm::GridSet& gridSet,
- const int* atinfo)
+ ArrayRef<const int> atomInfo)
{
if (params->nenergrp == 1)
{
const int atomOffset = grid.firstAtomInColumn(i);
copy_egp_to_nbat_egps(gridSet.atomIndices().data() + atomOffset, grid.numAtomsInColumn(i),
- numAtoms, c_nbnxnCpuIClusterSize, params->neg_2log, atinfo,
+ numAtoms, c_nbnxnCpuIClusterSize, params->neg_2log, atomInfo.data(),
params->energrp.data() + grid.atomToCluster(atomOffset));
}
}
/* Sets all required atom parameter data in nbnxn_atomdata_t */
void nbnxn_atomdata_set(nbnxn_atomdata_t* nbat,
const Nbnxm::GridSet& gridSet,
- const t_mdatoms* mdatoms,
- const int* atinfo)
+ ArrayRef<const int> atomTypes,
+ ArrayRef<const real> atomCharges,
+ ArrayRef<const int> atomInfo)
{
nbnxn_atomdata_t::Params& params = nbat->paramsDeprecated();
- nbnxn_atomdata_set_atomtypes(¶ms, gridSet, mdatoms->typeA);
+ nbnxn_atomdata_set_atomtypes(¶ms, gridSet, atomTypes);
- nbnxn_atomdata_set_charges(nbat, gridSet, mdatoms->chargeA);
+ nbnxn_atomdata_set_charges(nbat, gridSet, atomCharges);
if (gridSet.haveFep())
{
/* This must be done after masking types for FEP */
nbnxn_atomdata_set_ljcombparams(¶ms, nbat->XFormat, gridSet);
- nbnxn_atomdata_set_energygroups(¶ms, gridSet, atinfo);
+ nbnxn_atomdata_set_energygroups(¶ms, gridSet, atomInfo);
}
/* Copies the shift vector array to nbnxn_atomdata_t */
struct NbnxmGpu;
struct nbnxn_atomdata_t;
struct nonbonded_verlet_t;
-struct t_mdatoms;
struct tMPI_Atomic;
class GpuEventSynchronizer;
int nout);
//! Sets the atomdata after pair search
-void nbnxn_atomdata_set(nbnxn_atomdata_t* nbat,
- const Nbnxm::GridSet& gridSet,
- const t_mdatoms* mdatoms,
- const int* atinfo);
+void nbnxn_atomdata_set(nbnxn_atomdata_t* nbat,
+ const Nbnxm::GridSet& gridSet,
+ gmx::ArrayRef<const int> atomTypes,
+ gmx::ArrayRef<const real> atomCharges,
+ gmx::ArrayRef<const int> atomInfo);
//! Copy the shift vectors to nbat
void nbnxn_atomdata_copy_shiftvec(gmx_bool dynamic_box, rvec* shift_vec, nbnxn_atomdata_t* nbat);