NAMD
ComputeNonbondedPair.C
Go to the documentation of this file.
1 
7 #include "ComputeNonbondedPair.h"
8 #include "ReductionMgr.h"
9 #include "Patch.h"
10 #include "LdbCoordinator.h"
11 #include "PatchMap.h"
12 #include "ComputeMgr.h"
13 #include "Molecule.h"
14 
15 #include "Node.h"
16 #include "SimParameters.h"
17 
18 #include "Parameters.h"
19 #include "LJTable.h"
20 
21 #define MIN_DEBUG_LEVEL 4
22 // #define DEBUGM
23 #include "Debug.h"
24 
26  ComputeNonbondedWorkArrays* _workArrays,
27  int minPartition, int maxPartition, int numPartitions)
28  : ComputePatchPair(c,pid,trans), workArrays(_workArrays),
29  minPart(minPartition), maxPart(maxPartition), numParts(numPartitions)
30 {
32  if (pressureProfileOn) {
33  int n = pressureProfileAtomTypes;
37  } else {
39  pressureProfileData = NULL;
40  }
41  pairlistsValid = 0;
42  pairlistTolerance = 0.;
46 }
47 
48 #ifdef NAMD_AVXTILES
51 
52  if (avxTilesMode) {
53  tileLists.setSimParams(scaling, scale14, c1, c3, switchOn2,
54  knl_fast_grad_table, knl_fast_ener_table,
55  knl_scor_grad_table, knl_scor_ener_table,
56  avx_tiles_eps4_sigma, avx_tiles_eps4_sigma_14,
57  (float *)ljTable->table_val(0,0),
58  ljTable->get_table_dim(), knl_slow_grad_table,
59  knl_slow_ener_table, knl_excl_grad_table,
60  knl_excl_ener_table, avxTilesMode);
61  tileLists.atomUpdate(patch[0]->getTiles(), patch[1]->getTiles());
62  }
63 }
64 #endif
65 
68  for (int i=0; i<2; i++) {
70  // BEGIN LA
72  // END LA
73 
74  psiSumBox[i] = patch[i]->registerPsiSumDeposit(this);
75  intRadBox[i] = patch[i]->registerIntRadPickup(this);
76  bornRadBox[i] = patch[i]->registerBornRadPickup(this);
79  }
80 }
81 
83 {
84  delete reduction;
86  delete [] pressureProfileData;
87  for (int i=0; i<2; i++) {
88  if (avgPositionBox[i] != NULL) {
90  }
91  // BEGIN LA
92  if (velocityBox[i] != NULL) {
94  }
95  // END LA
96 
97  if (psiSumBox[i] != NULL) {
99  }
100  if (intRadBox[i] != NULL) {
101  patch[i]->unregisterIntRadPickup(this,&intRadBox[i]);
102  }
103  if (bornRadBox[i] != NULL) {
105  }
106  if (dEdaSumBox[i] != NULL) {
108  }
109  if (dHdrPrefixBox[i] != NULL) {
111  }
112  }
113 }
114 
116 
117  if (patch[0]->flags.doGBIS) {
118  gbisPhase = 1 + (gbisPhase % 3);//1->2->3->1...
119  }
120 
121 #if !(defined(NAMD_CUDA) || defined(NAMD_HIP))
122  if ( patch[0]->flags.doNonbonded && (numAtoms[0] && numAtoms[1]) ) {
123  return 0; // work to do, enqueue as usual
124  } else {
125 #else
126  {
127 #endif
128 
129  if (patch[0]->flags.doGBIS) {
130  if (gbisPhase == 1) {
131  for (int i=0; i<2; i++) {
132  psiSumBox[i]->skip();
133  intRadBox[i]->skip();
134  }
135  if (patch[0]->flags.doNonbonded) return 1;
136  else gbisPhase = 2;
137  }
138  if (gbisPhase == 2) {
139  for (int i=0; i<2; i++) {
140  bornRadBox[i]->skip();
141  dEdaSumBox[i]->skip();
142  }
143  if (patch[0]->flags.doNonbonded) return 1;
144  else gbisPhase = 3;
145  }
146  if (gbisPhase == 3) {
147  for (int i=0; i<2; i++) {
148  dHdrPrefixBox[i]->skip();
149  }
150  }
151  }
152 
153  // skip all boxes
154  for (int i=0; i<2; i++) {
155  positionBox[i]->skip();
156  forceBox[i]->skip();
157  if ( patch[0]->flags.doMolly ) avgPositionBox[i]->skip();
158  // BEGIN LA
159  if (patch[0]->flags.doLoweAndersen) velocityBox[i]->skip();
160  // END LA
161  }
162 
164  reduction->submit();
165  if (pressureProfileOn)
167 
168 #if !(defined(NAMD_CUDA) || defined(NAMD_HIP))
169  // Inform load balancer
171 #endif
172 
173  return 1; // no work to do, do not enqueue
174  }
175 }
176 
178 {
179  #ifdef NAMD_AVXTILES
180  if (avxTilesMode) {
181  doForceTiles(p, pExt, r);
182  return;
183  }
184  #endif
185 
186  // Inform load balancer.
187  // I assume no threads will suspend until endWork is called
188 
189  //single phase declarations
190  int doEnergy = patch[0]->flags.doEnergy;
191  int a = 0; int b = 1;
192  // swap to place more atoms in inner loop (second patch)
193  if ( numAtoms[0] > numAtoms[1] ) { a = 1; b = 0; }
194  CompAtom* v[2];
195 
196 
197 /*******************************************************************************
198  * Prepare Parameters
199 *******************************************************************************/
200  if (!patch[0]->flags.doGBIS || gbisPhase == 1) {
201 
202 #ifdef TRACE_COMPUTE_OBJECTS
203  double traceObjStartTime = CmiWallTimer();
204 #endif
205 
206  DebugM(2,"doForce() called.\n");
207  DebugM(2, numAtoms[0] << " patch #1 atoms and " <<
208  numAtoms[1] << " patch #2 atoms\n");
209 
210 
211  for ( int i = 0; i < reductionDataSize; ++i )
212  reductionData[i] = 0;
213  if (pressureProfileOn) {
214  int n = pressureProfileAtomTypes;
215  memset(pressureProfileData, 0, 3*n*n*pressureProfileSlabs*sizeof(BigReal));
216  // adjust lattice dimensions to allow constant pressure
217  const Lattice &lattice = patch[0]->lattice;
219  pressureProfileMin = lattice.origin().z - 0.5*lattice.c().z;
220  }
221 
224 
228 
230 
232  params.savePairlists = 0;
233  params.usePairlists = 0;
234  if ( patch[0]->flags.savePairlists ) {
235  params.savePairlists = 1;
236  params.usePairlists = 1;
237  } else if ( patch[0]->flags.usePairlists && patch[1]->flags.usePairlists ) {
238  if ( ! pairlistsValid ||
239  ( patch[0]->flags.maxAtomMovement +
242  } else {
243  params.usePairlists = 1;
244  }
245  }
246  if ( ! params.usePairlists ) {
247  pairlistsValid = 0;
248  }
252  if ( params.savePairlists ) {
253  pairlistsValid = 1;
258  }
259 
260 
261  const Lattice &lattice = patch[0]->lattice;
262  params.offset = lattice.offset(trans[a]) - lattice.offset(trans[b]);
263 
264  PatchMap* patchMap = PatchMap::Object();
265  params.offset_f = params.offset + lattice.unscale(patchMap->center(patchID[a]))
266  - lattice.unscale(patchMap->center(patchID[b]));
267 
268  // Atom Sorting : If we are sorting the atoms along the line connecting
269  // the patch centers, then calculate a normalized vector pointing from
270  // patch a to patch b (i.e. outer loop patch to inner loop patch).
271  #if NAMD_ComputeNonbonded_SortAtoms != 0
272 
274 
275  #endif
276 
277  params.p[0] = p[a];
278  params.p[1] = p[b];
279  params.pExt[0] = pExt[a];
280  params.pExt[1] = pExt[b];
281 #ifdef NAMD_KNL
282  params.pFlt[0] = patch[a]->getCompAtomFlt();
283  params.pFlt[1] = patch[b]->getCompAtomFlt();
284 #endif
285  // BEGIN LA
287  if (params.doLoweAndersen) {
288  DebugM(4, "opening velocity boxes\n");
289  v[0] = velocityBox[0]->open();
290  v[1] = velocityBox[1]->open();
291  params.v[0] = v[a];
292  params.v[1] = v[b];
293  }
294  // END LA
295 #if !(defined(NAMD_CUDA) || defined(NAMD_HIP))
296  params.ff[0] = r[a]->f[Results::nbond_virial];
297  params.ff[1] = r[b]->f[Results::nbond_virial];
298 #endif
299  params.numAtoms[0] = numAtoms[a];
300  params.numAtoms[1] = numAtoms[b];
301  params.step = patch[0]->flags.step;
302 
303  // DMK - Atom Separation (water vs. non-water)
304  #if NAMD_SeparateWaters != 0
305  params.numWaterAtoms[0] = numWaterAtoms[a];
306  params.numWaterAtoms[1] = numWaterAtoms[b];
307  #endif
308 
309 
310 /*******************************************************************************
311  * Call Nonbonded Functions
312 *******************************************************************************/
313  if (numAtoms[0] && numAtoms[1]) {//only do if has atoms since gbis noWork doesn't account for no atoms
314 
315  //force calculation calls
316  if ( patch[0]->flags.doFullElectrostatics )
317  {
318 #if !(defined(NAMD_CUDA) || defined(NAMD_HIP))
319  params.fullf[0] = r[a]->f[Results::slow_virial];
320  params.fullf[1] = r[b]->f[Results::slow_virial];
321 #endif
322  if ( patch[0]->flags.doMolly ) {
323  if ( doEnergy )
325  else calcPair(&params);
326  CompAtom *p_avg[2];
327  p_avg[0] = avgPositionBox[0]->open();
328  p_avg[1] = avgPositionBox[1]->open();
329  params.p[0] = p_avg[a];
330  params.p[1] = p_avg[b];
331  if ( doEnergy ) calcSlowPairEnergy(&params);
332  else calcSlowPair(&params);
333  avgPositionBox[0]->close(&p_avg[0]);
334  avgPositionBox[1]->close(&p_avg[1]);
335  } else if ( patch[0]->flags.maxForceMerged == Results::slow ) {
336  if ( doEnergy ) calcMergePairEnergy(&params);
337  else calcMergePair(&params);
338  } else {
339  if ( doEnergy ) calcFullPairEnergy(&params);
340  else calcFullPair(&params);
341  }
342  }
343  else
344  if ( doEnergy ) calcPairEnergy(&params);
345  else calcPair(&params);
346 
347  }//end if has atoms
348 
349  // BEGIN LA
350  if (params.doLoweAndersen) {
351  DebugM(4, "closing velocity boxes\n");
352  velocityBox[0]->close(&v[0]);
353  velocityBox[1]->close(&v[1]);
354  }
355  // END LA
356  }// end not gbis
357 
358 /*******************************************************************************
359  * gbis Loop
360 *******************************************************************************/
361 if (patch[0]->flags.doGBIS) {
365  gbisParams.numPatches = 2;//pair
368  gbisParams.epsilon_s = simParams->solvent_dielectric;
369  gbisParams.epsilon_p = simParams->dielectric;
370  gbisParams.rho_0 = simParams->coulomb_radius_offset;
371  gbisParams.kappa = simParams->kappa;
372  gbisParams.cutoff = simParams->cutoff;
373  gbisParams.doSmoothing = simParams->switchingActive;
374  gbisParams.a_cut = simParams->alpha_cutoff;
375  gbisParams.delta = simParams->gbis_delta;
376  gbisParams.beta = simParams->gbis_beta;
377  gbisParams.gamma = simParams->gbis_gamma;
378  gbisParams.alpha_max = simParams->alpha_max;
379  gbisParams.cid = cid;
380  gbisParams.patchID[0] = patch[a]->getPatchID();
381  gbisParams.patchID[1] = patch[b]->getPatchID();
383  if (patch[1]->flags.maxGroupRadius > gbisParams.maxGroupRadius)
385  gbisParams.doEnergy = doEnergy;
386  gbisParams.fsMax = simParams->fsMax;
387  for (int i = 0; i < numGBISPairlists; i++)
389 
390  //open boxes
391  if (gbisPhase == 1) {
392  gbisParams.intRad[0] = intRadBox[a]->open();
393  gbisParams.intRad[1] = intRadBox[b]->open();
394  gbisParams.psiSum[0] = psiSumBox[a]->open();
395  gbisParams.psiSum[1] = psiSumBox[b]->open();
398 
399  } else if (gbisPhase == 2) {
400  gbisParams.bornRad[0] = bornRadBox[a]->open();
401  gbisParams.bornRad[1] = bornRadBox[b]->open();
402  gbisParams.dEdaSum[0] = dEdaSumBox[a]->open();
403  gbisParams.dEdaSum[1] = dEdaSumBox[b]->open();
404  } else if (gbisPhase == 3) {
407  }
408 
409  //make call to calculate GBIS
412  }
413 
414  //close boxes
415  if (gbisPhase == 1) {
416  psiSumBox[0]->close(&(gbisParams.psiSum[a]));
417  psiSumBox[1]->close(&(gbisParams.psiSum[b]));
418  } else if (gbisPhase == 2) {
419  dEdaSumBox[0]->close(&(gbisParams.dEdaSum[a]));
420  dEdaSumBox[1]->close(&(gbisParams.dEdaSum[b]));
421 
422 
423  } else if (gbisPhase == 3) {
424  bornRadBox[0]->close(&(gbisParams.bornRad[a]));
425  bornRadBox[1]->close(&(gbisParams.bornRad[b]));
428  intRadBox[0]->close(&(gbisParams.intRad[a]));
429  intRadBox[1]->close(&(gbisParams.intRad[b]));
432  }
433 
434 }//end if doGBIS
435 
436  if (!patch[0]->flags.doGBIS || gbisPhase == 3) {
438  if (pressureProfileOn)
440 
441 #ifdef TRACE_COMPUTE_OBJECTS
442  traceUserBracketEvent(TRACE_COMPOBJ_IDOFFSET+cid, traceObjStartTime, CmiWallTimer());
443 #endif
444 
445 
446  reduction->submit();
447  if (pressureProfileOn)
449  }//end gbis end phase
450 
451 }//end do Force
452 
453 #ifdef NAMD_AVXTILES
454 void ComputeNonbondedPair::doForceTiles(CompAtom* p[2], CompAtomExt* pExt[2],
455  Results* r[2])
456 {
457  const int doEnergy = patch[0]->flags.doEnergy;
458  const int doVirial = patch[0]->flags.doVirial;
459  const int doFull = patch[0]->flags.doFullElectrostatics;
460  const int pid0 = tileLists.patchOrder0();
461  const int pid1 = tileLists.patchOrder1();
462 
463 #ifdef TRACE_COMPUTE_OBJECTS
464  double traceObjStartTime = CmiWallTimer();
465 #endif
466 
467  DebugM(2,"doForceTiles() called.\n");
468  DebugM(2, numAtoms[0] << " patch #1 atoms and " <<
469  numAtoms[1] << " patch #2 atoms\n");
470 
471  const Lattice &lattice = patch[pid0]->lattice;
472  for ( int i = 0; i < reductionDataSize; ++i )
473  reductionData[i] = 0;
474 
475  int doList = false;
476  if ( patch[0]->flags.savePairlists ) {
477  doList = 1;
478  pairlistsValid = 1;
481  } else if ( patch[0]->flags.usePairlists && patch[1]->flags.usePairlists ) {
482  if (!pairlistsValid || (patch[0]->flags.maxAtomMovement +
486  pairlistsValid = 0;
487  doList = 1;
488  }
489  } else
490  doList = 1;
491 
492  if (doList) {
493  double plcutoff = cutoff;
494  if (patch[0]->flags.savePairlists)
495  plcutoff += patch[0]->flags.pairlistTolerance +
497 
498  tileLists.updateBuildInfo(patch[0]->flags.step, minPart, maxPart,
499  numParts, plcutoff);
500  }
501 
502  const PatchMap* patchMap = PatchMap::Object();
503  Vector offset = patchMap->center(patchID[pid0]) -
504  patchMap->center(patchID[pid1]);
505  const int t1 = trans[pid0];
506  const int t2 = trans[pid1];
507  offset.x += (t1%3-1) - (t2%3-1);
508  offset.y += ((t1/3)%3-1) - ((t2/3)%3-1);
509  offset.z += (t1/9-1) - (t2/9-1);
510  tileLists.updateParams(lattice, offset, cutoff);
511 
512  tileLists.nbForceAVX512(doEnergy, doVirial, doFull, doList);
513 
514  reductionData[exclChecksumIndex] = tileLists.exclusionChecksum();
515  if (doEnergy) {
516  reductionData[vdwEnergyIndex] = tileLists.energyVdw();
517  reductionData[electEnergyIndex] = tileLists.energyElec();
518  if (doFull)
519  reductionData[fullElectEnergyIndex] = tileLists.energySlow();
520  }
521  if (doVirial) {
522  reductionData[virialIndex_XX] = tileLists.virialXX();
523  reductionData[virialIndex_XY] = tileLists.virialXY();
524  reductionData[virialIndex_XZ] = tileLists.virialXZ();
525  reductionData[virialIndex_YX] = tileLists.virialXY();
526  reductionData[virialIndex_YY] = tileLists.virialYY();
527  reductionData[virialIndex_YZ] = tileLists.virialYZ();
528  reductionData[virialIndex_ZX] = tileLists.virialXZ();
529  reductionData[virialIndex_ZY] = tileLists.virialYZ();
530  reductionData[virialIndex_ZZ] = tileLists.virialZZ();
531  if (doFull) {
532  reductionData[fullElectVirialIndex_XX] = tileLists.virialSlowXX();
533  reductionData[fullElectVirialIndex_XY] = tileLists.virialSlowXY();
534  reductionData[fullElectVirialIndex_XZ] = tileLists.virialSlowXZ();
535  reductionData[fullElectVirialIndex_YX] = tileLists.virialSlowXY();
536  reductionData[fullElectVirialIndex_YY] = tileLists.virialSlowYY();
537  reductionData[fullElectVirialIndex_YZ] = tileLists.virialSlowYZ();
538  reductionData[fullElectVirialIndex_ZX] = tileLists.virialSlowXZ();
539  reductionData[fullElectVirialIndex_ZY] = tileLists.virialSlowYZ();
540  reductionData[fullElectVirialIndex_ZZ] = tileLists.virialSlowZZ();
541  }
542  }
543 
544  if (!patch[0]->flags.doGBIS || gbisPhase == 3) {
546 
547 #ifdef TRACE_COMPUTE_OBJECTS
548  traceUserBracketEvent(TRACE_COMPOBJ_IDOFFSET+cid, traceObjStartTime,
549  CmiWallTimer());
550 #endif
551 
552  reduction->submit();
553  }
554 }//end doForceTiles
555 #endif
static Node * Object()
Definition: Node.h:86
Box< Patch, GBReal > * registerDEdaSumDeposit(Compute *cid)
Definition: Patch.C:203
Pairlists * pairlists
Box< Patch, CompAtom > * registerAvgPositionPickup(Compute *cid)
Definition: Patch.C:133
ScaledPosition center(int pid) const
Definition: PatchMap.h:99
int sequence(void)
Definition: Compute.h:64
void unregisterAvgPositionPickup(Compute *cid, Box< Patch, CompAtom > **const box)
Definition: Patch.C:139
NAMD_HOST_DEVICE Vector c() const
Definition: Lattice.h:270
Box< Patch, Real > * dHdrPrefixBox[2]
static void submitReductionData(BigReal *, SubmitReduction *)
Parameters * parameters
#define TRACE_COMPOBJ_IDOFFSET
Definition: Compute.h:77
void unregisterPsiSumDeposit(Compute *cid, Box< Patch, GBReal > **const box)
Definition: Patch.C:173
CompAtom * p[2]
int32 ComputeID
Definition: NamdTypes.h:278
Lattice & lattice
Definition: Patch.h:127
Box< Patch, CompAtom > * positionBox[2]
static PatchMap * Object()
Definition: PatchMap.h:27
CompAtom * p[2]
void calcGBIS(nonbonded *params, GBISParamStruct *gbisParams)
Definition: ComputeGBIS.C:261
Definition: Vector.h:72
SimParameters * simParameters
Definition: Node.h:181
ComputeNonbondedWorkArrays *const workArrays
NAMD_HOST_DEVICE Position unscale(ScaledPosition s) const
Definition: Lattice.h:77
Box< Patch, Real > * intRadBox[2]
virtual void doForce(CompAtom *p[2], CompAtomExt *pExt[2], Results *r[2])
BigReal & item(int i)
Definition: ReductionMgr.h:313
#define DebugM(x, y)
Definition: Debug.h:75
CompAtomExt * pExt[2]
CompAtom * v[2]
BigReal z
Definition: Vector.h:74
void unregisterDHdrPrefixPickup(Compute *cid, Box< Patch, Real > **const box)
Definition: Patch.C:221
int usePairlists
Definition: PatchTypes.h:39
BigReal * reduction
static void submitPressureProfileData(BigReal *, SubmitReduction *)
static BigReal pressureProfileThickness
SubmitReduction * willSubmit(int setID, int size=-1)
Definition: ReductionMgr.C:366
Box< Patch, Real > * registerBornRadPickup(Compute *cid)
Definition: Patch.C:195
LDObjHandle ldObjHandle
Definition: Compute.h:44
static ReductionMgr * Object(void)
Definition: ReductionMgr.h:279
int doLoweAndersen
Definition: PatchTypes.h:27
static void(* calcMergePair)(nonbonded *)
Pairlists gbisStepPairlists[numGBISPairlists]
static void(* calcMergePairEnergy)(nonbonded *)
SimParameters * simParameters
static void(* calcSlowPairEnergy)(nonbonded *)
Flags flags
Definition: Patch.h:128
SubmitReduction * pressureProfileReduction
Box< Patch, CompAtom > * avgPositionBox[2]
static void(* calcPair)(nonbonded *)
Box< Patch, GBReal > * registerPsiSumDeposit(Compute *cid)
Definition: Patch.C:163
static void(* calcSlowPair)(nonbonded *)
Box< Patch, Results > * forceBox[2]
virtual void initialize()
NAMD_HOST_DEVICE BigReal length(void) const
Definition: Vector.h:202
Pairlists * gbisStepPairlists[4]
Box< Patch, CompAtom > * velocityBox[2]
static BigReal pressureProfileMin
Box< Patch, GBReal > * psiSumBox[2]
int doEnergy
Definition: PatchTypes.h:20
int doFullElectrostatics
Definition: PatchTypes.h:23
Box< Patch, Real > * registerIntRadPickup(Compute *cid)
Definition: Patch.C:178
void skipWork(const LDObjHandle &handle)
Force * f[maxNumForces]
Definition: PatchTypes.h:146
int get_table_dim() const
Definition: LJTable.h:44
CompAtomExt * pExt[2]
BigReal x
Definition: Vector.h:74
const TableEntry * table_val(unsigned int i, unsigned int j) const
Definition: LJTable.h:35
PatchID getPatchID() const
Definition: Patch.h:114
virtual void atomUpdate()
Box< Patch, Real > * bornRadBox[2]
static LdbCoordinator * Object()
NAMD_HOST_DEVICE Vector offset(int i) const
Definition: Lattice.h:258
BigReal maxAtomMovement
Definition: PatchTypes.h:42
Box< Patch, GBReal > * dEdaSumBox[2]
void skip(void)
Definition: Box.h:63
void unregisterBornRadPickup(Compute *cid, Box< Patch, Real > **const box)
Definition: Patch.C:198
int gbisPhase
Definition: Compute.h:39
Parameters * parameters
Definition: Node.h:180
static void(* calcPairEnergy)(nonbonded *)
SubmitReduction * reduction
#define simParams
Definition: Output.C:129
Random * rand
Definition: Node.h:175
GBISParamStruct gbisParams
static void(* calcFullPair)(nonbonded *)
void unregisterIntRadPickup(Compute *cid, Box< Patch, Real > **const box)
Definition: Patch.C:181
Box< Patch, Real > * registerDHdrPrefixPickup(Compute *cid)
Definition: Patch.C:217
ComputeNonbondedPair(ComputeID c, PatchID pid[], int trans[], ComputeNonbondedWorkArrays *_workArrays, int minPartition=0, int maxPartition=1, int numPartitions=1)
int doVirial
Definition: PatchTypes.h:21
BigReal y
Definition: Vector.h:74
static const LJTable * ljTable
static const int numGBISPairlists
static void(* calcFullPairEnergy)(nonbonded *)
BigReal pairlistTolerance
Definition: PatchTypes.h:41
void unregisterVelocityPickup(Compute *cid, Box< Patch, CompAtom > **const box)
Definition: Patch.C:153
int doGBIS
Definition: PatchTypes.h:29
void submit(void)
Definition: ReductionMgr.h:324
Force * fullf[2]
BigReal reductionData[reductionDataSize]
BigReal * pressureProfileReduction
Data * open(void)
Definition: Box.h:39
int32 PatchID
Definition: NamdTypes.h:277
BigReal maxGroupRadius
Definition: PatchTypes.h:43
const ComputeID cid
Definition: Compute.h:43
NAMD_HOST_DEVICE Vector origin() const
Definition: Lattice.h:278
void unregisterDEdaSumDeposit(Compute *cid, Box< Patch, GBReal > **const box)
Definition: Patch.C:211
Box< Patch, CompAtom > * registerVelocityPickup(Compute *cid)
Definition: Patch.C:147
void close(Data **const t)
Definition: Box.h:49
ComputeNonbondedWorkArrays * workArrays
double BigReal
Definition: common.h:123
int step
Definition: PatchTypes.h:16