#include "gromacs/math/vec.h"
#include "gromacs/mdlib/gmx_omp_nthreads.h"
#include "gromacs/mdlib/updategroupscog.h"
-#include "gromacs/mdtypes/forcerec.h" // only for GET_CGINFO_*
+#include "gromacs/mdtypes/atominfo.h"
#include "gromacs/nbnxm/atomdata.h"
#include "gromacs/simd/simd.h"
#include "gromacs/simd/vector_operations.h"
*
* Sorts atoms on LJ coefficients: !=0 first, ==0 at the end.
*/
-static void sort_cluster_on_flag(int numAtomsInCluster,
- int atomStart,
- int atomEnd,
- const int* atinfo,
- gmx::ArrayRef<int> order,
- int* flags)
+static void sort_cluster_on_flag(int numAtomsInCluster,
+ int atomStart,
+ int atomEnd,
+ gmx::ArrayRef<const int> atomInfo,
+ gmx::ArrayRef<int> order,
+ int* flags)
{
constexpr int c_maxNumAtomsInCluster = 8;
int sort1[c_maxNumAtomsInCluster];
for (int s = atomStart; s < atomEnd; s += numAtomsInCluster)
{
/* Make lists for this (sub-)cell on atoms with and without LJ */
- int n1 = 0;
- int n2 = 0;
- gmx_bool haveQ = FALSE;
- int a_lj_max = -1;
+ int n1 = 0;
+ int n2 = 0;
+ bool haveQ = false;
+ int a_lj_max = -1;
for (int a = s; a < std::min(s + numAtomsInCluster, atomEnd); a++)
{
- haveQ = haveQ || GET_CGINFO_HAS_Q(atinfo[order[a]]);
+ haveQ = haveQ || bool(atomInfo[order[a]] & gmx::sc_atomInfo_HasCharge);
- if (GET_CGINFO_HAS_VDW(atinfo[order[a]]))
+ if (atomInfo[order[a]] & (gmx::sc_atomInfo_HasVdw))
{
sort1[n1++] = order[a];
a_lj_max = a;
nbnxn_atomdata_t* nbat,
int atomStart,
int atomEnd,
- const int* atinfo,
+ gmx::ArrayRef<const int> atomInfo,
gmx::ArrayRef<const gmx::RVec> x,
BoundingBox gmx_unused* bb_work_aligned)
{
sort_cluster_on_flag(geometry_.numAtomsICluster,
atomStart,
atomEnd,
- atinfo,
+ atomInfo,
atomIndices,
flags_.data() + atomToCluster(atomStart) - cellOffset_);
}
fep_[cell] = 0;
for (int at = atomStart; at < atomEnd; at++)
{
- if (atomIndices[at] >= 0 && GET_CGINFO_FEP(atinfo[atomIndices[at]]))
+ if (atomIndices[at] >= 0 && (atomInfo[atomIndices[at]] & gmx::sc_atomInfo_FreeEnergyPerturbation))
{
fep_[cell] |= (1 << (at - atomStart));
}
void Grid::sortColumnsCpuGeometry(GridSetData* gridSetData,
int dd_zone,
- const int* atinfo,
+ gmx::ArrayRef<const int> atomInfo,
gmx::ArrayRef<const gmx::RVec> x,
nbnxn_atomdata_t* nbat,
const gmx::Range<int> columnRange,
const int numAtomsLeftInColumn = std::max(numAtoms - (atomOffsetCell - atomOffset), 0);
const int numAtomsCell = std::min(numAtomsPerCell, numAtomsLeftInColumn);
- fillCell(gridSetData, nbat, atomOffsetCell, atomOffsetCell + numAtomsCell, atinfo, x, nullptr);
+ fillCell(gridSetData, nbat, atomOffsetCell, atomOffsetCell + numAtomsCell, atomInfo, x, nullptr);
/* This copy to bbcz is not really necessary.
* But it allows to use the same grid search code
/* Spatially sort the atoms within one grid column */
void Grid::sortColumnsGpuGeometry(GridSetData* gridSetData,
int dd_zone,
- const int* atinfo,
+ gmx::ArrayRef<const int> atomInfo,
gmx::ArrayRef<const gmx::RVec> x,
nbnxn_atomdata_t* nbat,
const gmx::Range<int> columnRange,
const int numAtomsX =
std::min(subdiv_x, numAtomsInColumn - (atomOffsetX - atomOffset));
- fillCell(gridSetData, nbat, atomOffsetX, atomOffsetX + numAtomsX, atinfo, x, bb_work_aligned);
+ fillCell(gridSetData, nbat, atomOffsetX, atomOffsetX + numAtomsX, atomInfo, x, bb_work_aligned);
}
}
}
GridSetData* gridSetData,
gmx::ArrayRef<GridWork> gridWork,
const gmx::Range<int> atomRange,
- const int* atinfo,
+ gmx::ArrayRef<const int> atomInfo,
gmx::ArrayRef<const gmx::RVec> x,
const int numAtomsMoved,
nbnxn_atomdata_t* nbat)
if (geometry_.isSimple)
{
sortColumnsCpuGeometry(
- gridSetData, ddZone, atinfo, x, nbat, columnRange, gridWork[thread].sortBuffer);
+ gridSetData, ddZone, atomInfo, x, nbat, columnRange, gridWork[thread].sortBuffer);
}
else
{
sortColumnsGpuGeometry(
- gridSetData, ddZone, atinfo, x, nbat, columnRange, gridWork[thread].sortBuffer);
+ gridSetData, ddZone, atomInfo, x, nbat, columnRange, gridWork[thread].sortBuffer);
}
}
GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR