NAMD
Functions
SortAtoms.h File Reference

Go to the source code of this file.

Functions

void sortAtomsForCUDA (int *order, const FullAtom *atoms, int nfree, int n)
 
void sortAtomsForPatches (int *order, int *breaks, const FullAtom *atoms, int nmgrps, int natoms, int ni, int nj, int nk)
 
void sortAtomsForCUDA_SOA (int *__restrict order, int *__restrict unorder, const double *__restrict ax, const double *__restrict ay, const double *__restrict az, int nfree, int n)
 

Function Documentation

◆ sortAtomsForCUDA()

void sortAtomsForCUDA ( int *  order,
const FullAtom atoms,
int  nfree,
int  n 
)

Definition at line 123 of file SortAtoms.C.

References order, and partition().

Referenced by HomePatch::positionsReady().

123  {
124 
125  // partition free atoms
126  // CkPrintf("%d %d\n", 0, nfree);
127  partition(order, atoms, 0, nfree);
128 
129  // partition fixed atoms
130  // CkPrintf("%d %d\n", nfree, n);
131  partition(order, atoms, nfree, n);
132 
133 }
static void partition(int *order, const FullAtom *atoms, int begin, int end)
Definition: SortAtoms.C:45
#define order
Definition: PmeRealSpace.C:235

◆ sortAtomsForCUDA_SOA()

void sortAtomsForCUDA_SOA ( int *__restrict  order,
int *__restrict  unorder,
const double *__restrict  ax,
const double *__restrict  ay,
const double *__restrict  az,
int  nfree,
int  n 
)

Definition at line 317 of file SortAtoms.C.

References order, and partition_SOA().

Referenced by HomePatch::positionsReady_SOA().

324  {
325 
326  // partition free atoms
327  // CkPrintf("%d %d\n", 0, nfree);
328  partition_SOA(order, ax, ay, az, 0, nfree);
329 
330  // partition fixed atoms
331  // CkPrintf("%d %d\n", nfree, n);
332  partition_SOA(order, ax, ay, az, nfree, n);
333 
334  // determine mapping to unsort atoms
335  for (int i=0; i < n; i++) {
336  unorder[order[i]] = i;
337  }
338 }
static void partition_SOA(int *__restrict order, const double *__restrict ax, const double *__restrict ay, const double *__restrict az, int begin, int end)
Definition: SortAtoms.C:210
#define order
Definition: PmeRealSpace.C:235

◆ sortAtomsForPatches()

void sortAtomsForPatches ( int *  order,
int *  breaks,
const FullAtom atoms,
int  nmgrps,
int  natoms,
int  ni,
int  nj,
int  nk 
)

Definition at line 135 of file SortAtoms.C.

References FullAtom::migrationGroupSize, and order.

Referenced by WorkDistrib::createAtomLists().

137  {
138 
139 //CkPrintf("sorting %d atoms in %d groups to %d x %d x %d\n",
140 // natoms, nmgrps, nk, nj, ni);
141  std::sort(order, order+nmgrps, sortop_z(atoms));
142  int pid = 0;
143  int ibegin = 0;
144  int nai = 0;
145  for ( int ip=0; ip < ni; ++ip ) {
146  int naj = nai;
147  int targi = nai + (natoms - nai - 1) / (ni - ip) + 1;
148  int iend;
149  for ( iend=ibegin; iend<nmgrps; ++iend ) {
150  int mgs = atoms[order[iend]].migrationGroupSize;
151  if (nai + mgs <= targi) nai += mgs;
152  else break;
153  }
154 //CkPrintf(" Z %d %d (%d) %d\n", ibegin, iend, iend-ibegin, nai);
155  std::sort(order+ibegin, order+iend, sortop_y(atoms));
156  int jbegin = ibegin;
157  for ( int jp=0; jp < nj; ++jp ) {
158  int nak = naj;
159  int targj = naj + (nai - naj - 1) / (nj - jp) + 1;
160  int jend;
161  for ( jend=jbegin; jend<iend; ++jend ) {
162  int mgs = atoms[order[jend]].migrationGroupSize;
163  if (naj + mgs <= targj) naj += mgs;
164  else break;
165  }
166 
167 //CkPrintf(" Y %d %d (%d) %d\n", jbegin, jend, jend-jbegin, naj);
168  std::sort(order+jbegin, order+jend, sortop_x(atoms));
169  int kbegin = jbegin;
170  for ( int kp=0; kp < nk; ++kp ) {
171  int targk = nak + (naj - nak - 1) / (nk - kp) + 1;
172  int kend;
173  for ( kend=kbegin; kend<jend; ++kend ) {
174  int mgs = atoms[order[kend]].migrationGroupSize;
175  if (nak + mgs <= targk) nak += mgs;
176  else break;
177 //CkPrintf(" atom %d %d %.2f\n", atoms[order[kend]].id, mgs,
178 // atoms[order[kend]].position.x);
179  }
180 //CkPrintf(" X %d %d (%d) %d\n", kbegin, kend, kend-kbegin, nak);
181  breaks[pid++] = kend;
182  kbegin = kend;
183  }
184  jbegin = jend;
185  }
186  ibegin = iend;
187  }
188 
189 }
#define order
Definition: PmeRealSpace.C:235
int32 migrationGroupSize
Definition: NamdTypes.h:220