NAMD
Sequencer.h
Go to the documentation of this file.
1 
7 #ifndef SEQUENCER_H
8 #define SEQUENCER_H
9 
10 #include "converse.h"
11 #include "Priorities.h"
12 #include "PatchTypes.h"
13 #include "PatchMgr.h"
14 #include "SequencerCUDA.h"
15 
29 #define SOA_SIMPLIFY_PARAMS
30 
31 class HomePatch;
32 class SimParameters;
33 class SubmitReduction;
34 class CollectionMgr;
36 class LdbCoordinator;
37 class Random;
38 class SequencerCUDA;
39 #ifdef SOA_SIMPLIFY_PARAMS
40 struct PatchDataSOA;
41 #endif
42 
43 class Sequencer
44 {
45  friend class HomePatch;
46 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
47  friend class SequencerCUDA;
48 #endif
49 public:
50  Sequencer(HomePatch *p);
51  virtual ~Sequencer(void);
52  void run(void); // spawn thread, etc.
53  void awaken(void) {
54  CthAwakenPrio(thread, CK_QUEUEING_IFIFO, PRIORITY_SIZE, &priority);
55  }
56  void suspend(void);
57 
58 protected:
59  virtual void algorithm(void); // subclasses redefine this method
60 
61 #ifdef SEQUENCER_SOA
62 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
63  void integrate_CUDA_SOA(int scriptTask);
64  void initialize_integrate_CUDA_SOA(int scriptTask, int step, BigReal timestep,
65  int numberOfSteps, int nbondstep, int slowstep, int maxForceUsed);
66  void suspendULTs();
67  void wakeULTs();
68  void runComputeObjectsCUDA(int doMigration, int doGlobal, int pairlists, int nstep, int startup);
70  void updateDevicePatchMap(int startup);
71  void printDevicePatchMap();
72  void clearDevicePatchMap();
73  void updateDeviceData(const int startup, const int maxForceUsed, const int doGlobal);
74  void doMigrationGPU(const int startup, const int doGlobal, const int updatePatchMap);
75 
76  // apply MC pressure control
78  const int step,
79  const int doMigration,
80  const int doEnergy,
81  const int doVirial,
82  const int maxForceNumber,
83  const int doGlobal);
84 #endif
85  void integrate_SOA(int); // Verlet integrator using SOA data structures
86  void rattle1_SOA(BigReal,int);
88  const double scaling,
89  double dt_normal, // timestep Results::normal = 0
90  double dt_nbond, // timestep Results::nbond = 1
91  double dt_slow, // timestep Results::slow = 2
92 #ifndef SOA_SIMPLIFY_PARAMS
93  const double * __restrict recipMass,
94  const double * __restrict f_normal_x, // force Results::normal = 0
95  const double * __restrict f_normal_y,
96  const double * __restrict f_normal_z,
97  const double * __restrict f_nbond_x, // force Results::nbond = 1
98  const double * __restrict f_nbond_y,
99  const double * __restrict f_nbond_z,
100  const double * __restrict f_slow_x, // force Results::slow = 2
101  const double * __restrict f_slow_y,
102  const double * __restrict f_slow_z,
103  double * __restrict vel_x,
104  double * __restrict vel_y,
105  double * __restrict vel_z,
106  int numAtoms,
107 #endif
108  int maxForceNumber
109  );
111  const double dt
112 #ifndef SOA_SIMPLIFY_PARAMS
113  ,
114  const double * __restrict vel_x,
115  const double * __restrict vel_y,
116  const double * __restrict vel_z,
117  double * __restrict pos_x,
118  double * __restrict pos_y,
119  double * __restrict pos_z,
120  int numAtoms
121 #endif
122  );
123  void submitHalfstep_SOA(
124 #ifndef SOA_SIMPLIFY_PARAMS
125  const int * __restrict hydrogenGroupSize,
126  const float * __restrict mass,
127  const double * __restrict vel_x,
128  const double * __restrict vel_y,
129  const double * __restrict vel_z,
130  int numAtoms
131 #endif
132  );
134 #ifndef SOA_SIMPLIFY_PARAMS
135  const int * __restrict hydrogenGroupSize,
136  const float * __restrict mass,
137  const double * __restrict pos_x,
138  const double * __restrict pos_y,
139  const double * __restrict pos_z,
140  const double * __restrict vel_x,
141  const double * __restrict vel_y,
142  const double * __restrict vel_z,
143  const double * __restrict f_normal_x,
144  const double * __restrict f_normal_y,
145  const double * __restrict f_normal_z,
146  const double * __restrict f_nbond_x,
147  const double * __restrict f_nbond_y,
148  const double * __restrict f_nbond_z,
149  const double * __restrict f_slow_x,
150  const double * __restrict f_slow_y,
151  const double * __restrict f_slow_z,
152  int numAtoms
153 #endif
154  );
155  void submitCollections_SOA(int step, int zeroVel = 0);
156  void maximumMove_SOA(
157  const double dt,
158  const double maxvel2
159 #ifndef SOA_SIMPLIFY_PARAMS
160  ,
161  const double * __restrict vel_x,
162  const double * __restrict vel_y,
163  const double * __restrict vel_z,
164  int numAtoms
165 #endif
166  );
168  BigReal timestep
169 #ifndef SOA_SIMPLIFY_PARAMS
170  ,
171  const float * __restrict langevinParam,
172  double * __restrict vel_x,
173  double * __restrict vel_y,
174  double * __restrict vel_z,
175  int numAtoms
176 #endif
177  );
179  BigReal timestep
180 #ifndef SOA_SIMPLIFY_PARAMS
181  ,
182  const float * __restrict langevinParam,
183  const float * __restrict langScalVelBBK2,
184  const float * __restrict langScalRandBBK2,
185  float * __restrict gaussrand_x,
186  float * __restrict gaussrand_y,
187  float * __restrict gaussrand_z,
188  double * __restrict vel_x,
189  double * __restrict vel_y,
190  double * __restrict vel_z,
191  int numAtoms
192 #endif
193  );
194 
196 #ifndef SOA_SIMPLIFY_PARAMS
197  const int * __restrict hydrogenGroupSize,
198  const float * __restrict mass,
199  double * __restrict pos_x,
200  double * __restrict pos_y,
201  double * __restrict pos_z,
202  int numAtoms,
203 #endif
204  int step);
205 
206  void langevinPiston_SOA(
207 #ifndef SOA_SIMPLIFY_PARAMS
208  const int * __restrict hydrogenGroupSize,
209  const float * __restrict mass,
210  double * __restrict pos_x,
211  double * __restrict pos_y,
212  double * __restrict pos_z,
213  double * __restrict vel_x,
214  double * __restrict vel_y,
215  double * __restrict vel_z,
216  int numAtoms,
217 #endif
218  int step
219  );
220  void stochRescaleVelocities_SOA(int step);
221  void runComputeObjects_SOA(int migration, int pairlists, int step);
222 #endif
223 
224  void integrate(int); // Verlet integrator
225  void minimize(); // CG minimizer
227 
228  void runComputeObjects(int migration = 1, int pairlists = 0, int pressureStep = 0);
231  int pairlistsAgeLimit; // constant based on fixed simParams values
232 
233  void calcFixVirial(Tensor& fixVirialNormal, Tensor& fixVirialNbond, Tensor& fixVirialSlow,
234  Vector& fixForceNormal, Vector& fixForceNbond, Vector& fixForceSlow);
235 
236  void submitReductions(int);
237  void submitHalfstep(int);
238  void submitMinimizeReductions(int, BigReal fmax2);
239  void submitCollections(int step, int zeroVel = 0);
240 
241  void submitMomentum(int step);
242  void correctMomentum(int step, BigReal drifttime);
243 
244  void saveForce(const int ftag = Results::normal);
245  void addForceToMomentum(BigReal, const int ftag = Results::normal, const int useSaved = 0);
246  void addForceToMomentum3(const BigReal timestep1, const int ftag1, const int useSaved1,
247  const BigReal timestep2, const int ftag2, const int useSaved2,
248  const BigReal timestep3, const int ftag3, const int useSaved3);
250 
253 
254  void minimizeMoveDownhill(BigReal fmax2);
257  void quenchVelocities();
258 
259  void hardWallDrude(BigReal,int);
260 
261  void rattle1(BigReal,int);
262  // void rattle2(BigReal,int);
263 
264  void maximumMove(BigReal);
265  void minimizationQuenchVelocity(void);
266 
267  void reloadCharges();
269 
270  BigReal adaptTempT; // adaptive tempering temperature
271  void adaptTempUpdate(int); // adaptive tempering temperature update
272 
273  void rescaleVelocities(int);
274  void rescaleaccelMD(int, int, int); // for accelMD
276  void reassignVelocities(BigReal,int);
277  void reinitVelocities(void);
279  void tcoupleVelocities(BigReal,int);
280 
286  void stochRescaleVelocities(int);
287 
291  void berendsenPressure(int);
294  void langevinPiston(int);
295  int slowFreq;
296  void newtonianVelocities(BigReal, const BigReal, const BigReal,
297  const BigReal, const int, const int, const int);
301  // Multigrator
302  void scalePositionsVelocities(const Tensor& posScale, const Tensor& velScale);
303  void multigratorPressure(int step, int callNumber);
304  void scaleVelocities(const BigReal velScale);
306  void multigratorTemperature(int step, int callNumber);
310  // End of Multigrator
311 
312  void cycleBarrier(int,int);
313  void traceBarrier(int);
314 #ifdef MEASURE_NAMD_WITH_PAPI
315  void papiMeasureBarrier(int);
316 #endif
317  void terminate(void);
318 
320  SimParameters *const simParams; // for convenience
321  HomePatch *const patch; // access methods in patch
324 
327 
328  int ldbSteps;
330  void rebalanceLoad(int timestep);
331 
332 
333 private:
334  CthThread thread;
335  unsigned int priority;
336  static void threadRun(Sequencer*);
337 
338  LdbCoordinator *ldbCoordinator;
339 #if (defined(NAMD_CUDA) || defined(NAMD_HIP)) && defined(SEQUENCER_SOA)
340  SequencerCUDA *CUDASequencer;
341  PatchData *patchData;
342 #endif
343 };
344 
345 #endif
HomePatch *const patch
Definition: Sequencer.h:321
SubmitReduction * multigratorReduction
Definition: Sequencer.h:307
void rescaleVelocities(int)
Definition: Sequencer.C:5420
int doKineticEnergy
Definition: Sequencer.h:308
void minimizationQuenchVelocity(void)
Definition: Sequencer.C:5809
void tcoupleVelocities(BigReal, int)
Definition: Sequencer.C:5591
void addMovDragToPosition(BigReal)
Definition: Sequencer.C:4429
void terminate(void)
Definition: Sequencer.C:6681
virtual void algorithm(void)
Definition: Sequencer.C:277
void langevinVelocitiesBBK2_SOA(BigReal timestep)
Definition: Sequencer.C:3359
SubmitReduction * pressureProfileReduction
Definition: Sequencer.h:323
void suspendULTs()
void integrate(int)
Definition: Sequencer.C:3912
friend class SequencerCUDA
Definition: Sequencer.h:47
void scaleVelocities(const BigReal velScale)
Definition: Sequencer.C:4961
void addVelocityToPosition(BigReal)
Definition: Sequencer.C:5680
SubmitReduction * reduction
Definition: Sequencer.h:322
SubmitReduction * min_reduction
Definition: Sequencer.h:226
void maximumMove(BigReal)
Definition: Sequencer.C:5764
void cycleBarrier(int, int)
Definition: Sequencer.C:6661
void submitCollections_SOA(int step, int zeroVel=0)
Definition: Sequencer.C:3207
void addRotDragToPosition(BigReal)
Definition: Sequencer.C:4448
void saveForce(const int ftag=Results::normal)
Definition: Sequencer.C:5630
Definition: Vector.h:72
void langevinVelocitiesBBK2(BigReal)
Definition: Sequencer.C:5169
void monteCarloPressureControl(const int step, const int doMigration, const int doEnergy, const int doVirial, const int maxForceNumber, const int doGlobal)
int slowFreq
Definition: Sequencer.h:295
void newMinimizeDirection(BigReal)
Definition: Sequencer.C:4639
void newMinimizePosition(BigReal)
Definition: Sequencer.C:4698
bool masterThread
Definition: Sequencer.h:329
void langevinVelocitiesBBK1(BigReal)
Definition: Sequencer.C:5096
void updateDevicePatchMap(int startup)
void rattle1(BigReal, int)
Definition: Sequencer.C:5707
void rebalanceLoad(int timestep)
Definition: Sequencer.C:6650
void submitHalfstep(int)
Definition: Sequencer.C:5820
void addForceToMomentum_SOA(const double scaling, double dt_normal, double dt_nbond, double dt_slow, int maxForceNumber)
Definition: Sequencer.C:2707
void minimizeMoveDownhill(BigReal fmax2)
Definition: Sequencer.C:4617
void addForceToMomentum(BigReal, const int ftag=Results::normal, const int useSaved=0)
Definition: Sequencer.C:5641
void submitReductions_SOA()
Definition: Sequencer.C:2969
void langevinPiston(int)
Definition: Sequencer.C:5340
void wakeULTs()
void addForceToMomentum3(const BigReal timestep1, const int ftag1, const int useSaved1, const BigReal timestep2, const int ftag2, const int useSaved2, const BigReal timestep3, const int ftag3, const int useSaved3)
Definition: Sequencer.C:5656
void submitHalfstep_SOA()
Definition: Sequencer.C:2849
void submitCollections(int step, int zeroVel=0)
Definition: Sequencer.C:6405
void stochRescaleVelocities_SOA(int step)
Definition: Sequencer.C:3882
void runComputeObjects_SOA(int migration, int pairlists, int step)
Definition: Sequencer.C:3696
BigReal calcKineticEnergy()
Definition: Sequencer.C:4969
void adaptTempUpdate(int)
Definition: Sequencer.C:5482
#define PRIORITY_SIZE
Definition: Priorities.h:13
void calcFixVirial(Tensor &fixVirialNormal, Tensor &fixVirialNbond, Tensor &fixVirialSlow, Vector &fixForceNormal, Vector &fixForceNbond, Vector &fixForceSlow)
Definition: Sequencer.C:5978
Definition: Random.h:37
void awaken(void)
Definition: Sequencer.h:53
int pairlistsAge
Definition: Sequencer.h:230
void stochRescaleVelocities(int)
Definition: Sequencer.C:5614
void rattle1_SOA(BigReal, int)
Definition: Sequencer.C:3670
void constructDevicePatchMap()
void multigratorPressure(int step, int callNumber)
Definition: Sequencer.C:4826
void berendsenPressure(int)
Definition: Sequencer.C:5276
void submitMomentum(int step)
Definition: Sequencer.C:4735
int rescaleVelocities_numTemps
Definition: Sequencer.h:275
void runComputeObjects(int migration=1, int pairlists=0, int pressureStep=0)
Definition: Sequencer.C:6436
void rescaleaccelMD(int, int, int)
Definition: Sequencer.C:5439
void initialize_integrate_CUDA_SOA(int scriptTask, int step, BigReal timestep, int numberOfSteps, int nbondstep, int slowstep, int maxForceUsed)
Sequencer(HomePatch *p)
Definition: Sequencer.C:171
void clearDevicePatchMap()
int ldbSteps
Definition: Sequencer.h:328
void run(void)
Definition: Sequencer.C:257
void scalePositionsVelocities(const Tensor &posScale, const Tensor &velScale)
Definition: Sequencer.C:4789
BigReal adaptTempT
Definition: Sequencer.h:270
void doMigrationGPU(const int startup, const int doGlobal, const int updatePatchMap)
void langevinPiston_SOA(int step)
Definition: Sequencer.C:3541
void integrate_SOA(int)
Definition: Sequencer.C:2032
void traceBarrier(int)
Definition: Sequencer.C:6669
int berendsenPressure_count
Definition: Sequencer.h:292
void reassignVelocities(BigReal, int)
Definition: Sequencer.C:5498
void langevinVelocitiesBBK1_SOA(BigReal timestep)
Definition: Sequencer.C:3313
Random * random
Definition: Sequencer.h:319
void runComputeObjectsCUDA(int doMigration, int doGlobal, int pairlists, int nstep, int startup)
void langevinVelocities(BigReal)
Definition: Sequencer.C:5059
void hardWallDrude(BigReal, int)
Definition: Sequencer.C:5692
void suspend(void)
Definition: Sequencer.C:267
void multigratorTemperature(int step, int callNumber)
Definition: Sequencer.C:4989
void reinitVelocities(void)
Definition: Sequencer.C:5530
int checkpoint_berendsenPressure_count
Definition: Sequencer.h:293
ControllerBroadcasts * broadcast
Definition: Sequencer.h:326
void maximumMove_SOA(const double dt, const double maxvel2)
Definition: Sequencer.C:3255
CollectionMgr *const collection
Definition: Sequencer.h:325
void updateDeviceData(const int startup, const int maxForceUsed, const int doGlobal)
Definition: Tensor.h:15
virtual ~Sequencer(void)
Definition: Sequencer.C:233
void newtonianVelocities(BigReal, const BigReal, const BigReal, const BigReal, const int, const int, const int)
Definition: Sequencer.C:5035
void rescaleSoluteCharges(BigReal)
Definition: Sequencer.C:5575
void addVelocityToPosition_SOA(const double dt)
Definition: Sequencer.C:2810
#define SOA_SIMPLIFY_PARAMS
Definition: Sequencer.h:29
void submitMinimizeReductions(int, BigReal fmax2)
Definition: Sequencer.C:6256
int doMomenta
Definition: Sequencer.h:309
void correctMomentum(int step, BigReal drifttime)
Definition: Sequencer.C:4758
int pairlistsAgeLimit
Definition: Sequencer.h:231
int pairlistsAreValid
Definition: Sequencer.h:229
int stochRescale_count
Definition: Sequencer.h:288
void quenchVelocities()
Definition: Sequencer.C:4726
void submitReductions(int)
Definition: Sequencer.C:5998
void integrate_CUDA_SOA(int scriptTask)
SimParameters *const simParams
Definition: Sequencer.h:320
void rescaleVelocitiesByFactor(BigReal)
Definition: Sequencer.C:5553
void reloadCharges()
Definition: Sequencer.C:5563
double BigReal
Definition: common.h:123
void minimize()
Definition: Sequencer.C:4471
void berendsenPressure_SOA(int step)
Definition: Sequencer.C:3442
void printDevicePatchMap()