NAMD
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
CollectionMaster Class Reference

#include <CollectionMaster.h>

Inheritance diagram for CollectionMaster:

Classes

class  CollectVectorInstance
 
class  CollectVectorInstanceDcdSelection
 
class  CollectVectorSequence
 
class  CollectVectorSequenceDcdSelection
 

Public Types

enum  OperationStatus { NOT_PROCESSED, IN_PROCESS, HAS_PROCESSED }
 

Public Member Functions

 CollectionMaster ()
 
 ~CollectionMaster (void)
 
void receivePositions (CollectVectorMsg *msg)
 
void receivePositionsDcdSelection (CollectVectorMsg *msg)
 
void receiveVelocities (CollectVectorMsg *msg)
 
void receiveForces (CollectVectorMsg *msg)
 
void receiveDataStream (DataStreamMsg *msg)
 
void enqueuePositions (int seq, Lattice &lattice)
 
void enqueuePositionsDcdSelection (int seq, Lattice &lattice)
 
void enqueueVelocities (int seq)
 
void enqueueForces (int seq)
 
void disposePositions (CollectVectorInstance *c)
 
void disposeVelocities (CollectVectorInstance *c)
 
void disposeForces (CollectVectorInstance *c)
 
void blockPositions ()
 
void unblockPositions ()
 
void receiveOutputPosReady (int seq)
 
void receiveOutputVelReady (int seq)
 
void receiveOutputForceReady (int seq)
 
void startNextRoundOutputPos (double totalT)
 
void startNextRoundOutputVel (double totalT)
 
void startNextRoundOutputForce (double totalT)
 
void wrapCoorFinished ()
 

Static Public Member Functions

static CollectionMasterObject ()
 

Detailed Description

Definition at line 43 of file CollectionMaster.h.

Member Enumeration Documentation

◆ OperationStatus

Constructor & Destructor Documentation

◆ CollectionMaster()

CollectionMaster::CollectionMaster ( )

Definition at line 22 of file CollectionMaster.C.

References DebugM.

23 {
24  if (CkpvAccess(CollectionMaster_instance) == 0) {
25  CkpvAccess(CollectionMaster_instance) = this;
26  } else {
27  DebugM(1, "CollectionMaster::CollectionMaster() - another instance of CollectionMaster exists!\n");
28  }
29  dataStreamFile = 0;
30 
31 #ifdef MEM_OPT_VERSION
32  wrapCoorDoneCnt = 0;
33  posDoneCnt = 0;
34  velDoneCnt = 0;
35  parOut = new ParOutput();
36 #endif
37 
38  posTimings = 10; velTimings = forceTimings = 5;
39 #ifdef NODEGROUP_FORCE_REGISTER
40  cmlock = CmiCreateLock();
41 #endif
42 }
#define DebugM(x, y)
Definition: Debug.h:75

◆ ~CollectionMaster()

CollectionMaster::~CollectionMaster ( void  )

Definition at line 45 of file CollectionMaster.C.

46 {
47 #ifdef NODEGROUP_FORCE_REGISTER
48  CmiDestroyLock(cmlock);
49 #endif
50 }

Member Function Documentation

◆ blockPositions()

void CollectionMaster::blockPositions ( )
inline

◆ disposeForces()

void CollectionMaster::disposeForces ( CollectVectorInstance c)

Definition at line 215 of file CollectionMaster.C.

References ResizeArray< Elem >::begin(), CollectionMaster::CollectVectorInstance::data, DebugM, Output::force(), CollectionMaster::CollectVectorInstance::free(), memusage_MB(), Node::Object(), Node::output, CollectionMaster::CollectVectorInstance::seq, and ResizeArray< Elem >::size().

Referenced by enqueueForces(), and receiveForces().

216 {
217 #ifndef MEM_OPT_VERSION
218  DebugM(3,"Collected forces at " << c->seq << std::endl);
219  int seq = c->seq;
220  int size = c->data.size();
221  Vector *data = c->data.begin();
222  double exectime = CmiWallTimer();
223  double mem = memusage_MB();
224 #ifdef NODEGROUP_FORCE_REGISTER
225  if (Node::Object()->simParameters->CUDASOAintegrate) {
226  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
227  Output *pout = cpdata.ckLocalBranch()->ptrOutput;
228  pout->force(seq,size,data);
229  }
230  else
231 #endif
232  {
233  Node::Object()->output->force(seq,size,data);
234  }
235  c->free();
236  exectime = CmiWallTimer()-exectime;
237  if ( forceTimings ) {
238  CkPrintf("The last force output (seq=%d) takes %.3f seconds, %.3f MB of memory in use\n", seq, exectime, mem);
239  --forceTimings;
240  }
241 #endif
242 }
static Node * Object()
Definition: Node.h:86
Definition: Vector.h:72
Output * output
Definition: Node.h:185
#define DebugM(x, y)
Definition: Debug.h:75
double memusage_MB()
Definition: memusage.h:13
Definition: Output.h:35
void force(int, int, Vector *)
Definition: Output.C:621

◆ disposePositions()

void CollectionMaster::disposePositions ( CollectVectorInstance c)

Definition at line 107 of file CollectionMaster.C.

References ResizeArray< Elem >::begin(), Output::coordinate(), CollectionMaster::CollectVectorInstance::data, DebugM, CollectionMaster::CollectVectorInstance::fdata, CollectionMaster::CollectVectorInstance::free(), CollectionMaster::CollectVectorInstance::lattice, memusage_MB(), Node::Object(), Node::output, CollectionMaster::CollectVectorInstance::seq, and ResizeArray< Elem >::size().

Referenced by enqueuePositions(), enqueuePositionsDcdSelection(), receivePositions(), and receivePositionsDcdSelection().

108 {
109  DebugM(3, "["<<CkMyPe()<<"]"<< " disposePositions\n");
110 #ifndef MEM_OPT_VERSION
111  int seq = c->seq;
112  int size = c->data.size();
113  if ( ! size ) size = c->fdata.size();
114  Vector *data = c->data.begin();
115  FloatVector *fdata = c->fdata.begin();
116  double exectime = CmiWallTimer();
117  double mem = memusage_MB();
118 #ifdef NODEGROUP_FORCE_REGISTER
119  if (Node::Object()->simParameters->CUDASOAintegrate) {
120  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
121  Output *pout = cpdata.ckLocalBranch()->ptrOutput;
122  pout->coordinate(seq,size,data,fdata,c->lattice);
123  }
124  else
125 #endif
126  {
127  Node::Object()->output->coordinate(seq,size,data,fdata,c->lattice);
128  }
129  c->free();
130  exectime = CmiWallTimer()-exectime;
131  if ( posTimings ) {
132  CkPrintf("The last position output (seq=%d) takes %.3f seconds, %.3f MB of memory in use\n", seq, exectime, mem);
133  --posTimings;
134  }
135 #endif
136 }
static Node * Object()
Definition: Node.h:86
Definition: Vector.h:72
Output * output
Definition: Node.h:185
#define DebugM(x, y)
Definition: Debug.h:75
void coordinate(int, int, Vector *, FloatVector *, Lattice &)
Definition: Output.C:345
double memusage_MB()
Definition: memusage.h:13
Definition: Output.h:35

◆ disposeVelocities()

void CollectionMaster::disposeVelocities ( CollectVectorInstance c)

Definition at line 162 of file CollectionMaster.C.

References ResizeArray< Elem >::begin(), CollectionMaster::CollectVectorInstance::data, DebugM, CollectionMaster::CollectVectorInstance::free(), memusage_MB(), Node::Object(), Node::output, CollectionMaster::CollectVectorInstance::seq, ResizeArray< Elem >::size(), and Output::velocity().

Referenced by enqueueVelocities(), and receiveVelocities().

163 {
164 #ifndef MEM_OPT_VERSION
165  DebugM(3,"Collected velocities at " << c->seq << std::endl);
166  int seq = c->seq;
167  int size = c->data.size();
168  Vector *data = c->data.begin();
169  double exectime = CmiWallTimer();
170  double mem = memusage_MB();
171 #ifdef NODEGROUP_FORCE_REGISTER
172  if (Node::Object()->simParameters->CUDASOAintegrate) {
173  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
174  Output *pout = cpdata.ckLocalBranch()->ptrOutput;
175  pout->velocity(seq,size,data);
176  }
177  else
178 #endif
179  {
180  Node::Object()->output->velocity(seq,size,data);
181  }
182  c->free();
183  exectime = CmiWallTimer()-exectime;
184  if ( velTimings ) {
185  CkPrintf("The last velocity output (seq=%d) takes %.3f seconds, %.3f MB of memory in use\n", seq, exectime, mem);
186  --velTimings;
187  }
188 #endif
189 }
static Node * Object()
Definition: Node.h:86
Definition: Vector.h:72
Output * output
Definition: Node.h:185
#define DebugM(x, y)
Definition: Debug.h:75
double memusage_MB()
Definition: memusage.h:13
Definition: Output.h:35
void velocity(int, int, Vector *)
Definition: Output.C:531

◆ enqueueForces()

void CollectionMaster::enqueueForces ( int  seq)

Definition at line 203 of file CollectionMaster.C.

References disposeForces(), CollectionMaster::CollectVectorSequence::enqueue(), and CollectionMaster::CollectVectorSequence::removeReady().

Referenced by Controller::enqueueCollections().

204 {
205  Lattice dummy;
206  forces.enqueue(seq,dummy);
207 #ifndef MEM_OPT_VERSION
208  CollectVectorInstance *c;
209  while ( ( c = forces.removeReady() ) ) { disposeForces(c); }
210 #else
211  checkForceReady();
212 #endif
213 }
CollectVectorInstance * removeReady(void)
void disposeForces(CollectVectorInstance *c)
void enqueue(int seq, Lattice &lattice)

◆ enqueuePositions()

void CollectionMaster::enqueuePositions ( int  seq,
Lattice lattice 
)

Definition at line 80 of file CollectionMaster.C.

References DebugM, disposePositions(), CollectionMaster::CollectVectorSequence::enqueue(), and CollectionMaster::CollectVectorSequence::removeReady().

Referenced by Controller::enqueueCollections().

81 {
82  DebugM(3, "["<<CkMyPe()<<"]"<< " enqueuePositions\n");
83  positions.enqueue(seq,lattice);
84 
85 #ifndef MEM_OPT_VERSION
86  CollectVectorInstance *c;
87  while ( ( c = positions.removeReady() ) ) { disposePositions(c); }
88 #else
89  checkPosReady();
90 #endif
91 }
CollectVectorInstance * removeReady(void)
#define DebugM(x, y)
Definition: Debug.h:75
void enqueue(int seq, Lattice &lattice)
void disposePositions(CollectVectorInstance *c)

◆ enqueuePositionsDcdSelection()

void CollectionMaster::enqueuePositionsDcdSelection ( int  seq,
Lattice lattice 
)

Definition at line 93 of file CollectionMaster.C.

References DebugM, disposePositions(), CollectionMaster::CollectVectorSequence::enqueue(), and CollectionMaster::CollectVectorSequenceDcdSelection::removeReady().

Referenced by Controller::enqueueCollections().

94 {
95  DebugM(3, "["<<CkMyPe()<<"]"<< " enqueuePositionsDcdSelection\n");
96 #ifndef MEM_OPT_VERSION
97  positionsDcdSelection.enqueue(seq,lattice);
98 
99  CollectVectorInstanceDcdSelection *c;
100  while ( ( c = positionsDcdSelection.removeReady() ) ) { disposePositions(c); }
101 #else
102  checkPosReady();
103 #endif
104 }
#define DebugM(x, y)
Definition: Debug.h:75
void enqueue(int seq, Lattice &lattice)
void disposePositions(CollectVectorInstance *c)
CollectVectorInstanceDcdSelection * removeReady(void)

◆ enqueueVelocities()

void CollectionMaster::enqueueVelocities ( int  seq)

Definition at line 150 of file CollectionMaster.C.

References disposeVelocities(), CollectionMaster::CollectVectorSequence::enqueue(), and CollectionMaster::CollectVectorSequence::removeReady().

Referenced by Controller::enqueueCollections().

151 {
152  Lattice dummy;
153  velocities.enqueue(seq,dummy);
154 #ifndef MEM_OPT_VERSION
155  CollectVectorInstance *c;
156  while ( ( c = velocities.removeReady() ) ) { disposeVelocities(c); }
157 #else
158  checkVelReady();
159 #endif
160 }
CollectVectorInstance * removeReady(void)
void enqueue(int seq, Lattice &lattice)
void disposeVelocities(CollectVectorInstance *c)

◆ Object()

static CollectionMaster* CollectionMaster::Object ( )
inlinestatic

Definition at line 46 of file CollectionMaster.h.

Referenced by recvReplicaDcdAck(), sendReplicaDcdData(), and sendReplicaDcdInit().

46  {
47  return CkpvAccess(CollectionMaster_instance);
48  }

◆ receiveDataStream()

void CollectionMaster::receiveDataStream ( DataStreamMsg msg)

Definition at line 245 of file CollectionMaster.C.

References SimParameters::auxFilename, ResizeArray< Elem >::begin(), DataStreamMsg::data, NAMD_backup_file(), NAMD_die(), Node::Object(), and Node::simParameters.

245  {
246  if ( ! dataStreamFile ) {
247  char *fname = Node::Object()->simParameters->auxFilename;
248  // iout has large file linking issues on AIX
249  // iout << iINFO << "OPENING AUXILIARY DATA STREAM FILE "
250  // << fname << "\n" << endi;
251  CkPrintf("Info: OPENING AUXILIARY DATA STREAM FILE %s\n", fname);
252  NAMD_backup_file(fname);
253  dataStreamFile = fopen(fname,"w");
254  if ( ! dataStreamFile )
255  NAMD_die("Can't open auxiliary data stream file!");
256  }
257  fprintf(dataStreamFile,"%s",msg->data.begin());
258  fflush(dataStreamFile);
259  delete msg;
260 }
static Node * Object()
Definition: Node.h:86
SimParameters * simParameters
Definition: Node.h:181
char auxFilename[NAMD_FILENAME_BUFFER_SIZE]
void NAMD_die(const char *err_msg)
Definition: common.C:147
void NAMD_backup_file(const char *filename, const char *extension)
Definition: common.C:235
ResizeArray< char > data
iterator begin(void)
Definition: ResizeArray.h:36

◆ receiveForces()

void CollectionMaster::receiveForces ( CollectVectorMsg msg)

Definition at line 192 of file CollectionMaster.C.

References disposeForces(), Node::Object(), CollectionMaster::CollectVectorSequence::removeReady(), and CollectionMaster::CollectVectorSequence::submitData().

Referenced by CollectionMgr::submitForces().

193 {
194 #ifndef MEM_OPT_VERSION
195  forces.submitData(msg,Node::Object()->molecule->numAtoms);
196  delete msg;
197 
198  CollectVectorInstance *c;
199  while ( ( c = forces.removeReady() ) ) { disposeForces(c); }
200 #endif
201 }
static Node * Object()
Definition: Node.h:86
CollectVectorInstance * removeReady(void)
void disposeForces(CollectVectorInstance *c)
void submitData(CollectVectorMsg *msg, int max_index)

◆ receiveOutputForceReady()

void CollectionMaster::receiveOutputForceReady ( int  seq)

Definition at line 285 of file CollectionMaster.C.

References CollectionMaster::CollectVectorSequence::submitData().

285  {
286 #ifdef MEM_OPT_VERSION
287  forces.submitData(seq);
288  checkForceReady();
289 #endif
290 }
void submitData(CollectVectorMsg *msg, int max_index)

◆ receiveOutputPosReady()

void CollectionMaster::receiveOutputPosReady ( int  seq)

◆ receiveOutputVelReady()

void CollectionMaster::receiveOutputVelReady ( int  seq)

Definition at line 278 of file CollectionMaster.C.

References CollectionMaster::CollectVectorSequence::submitData().

278  {
279 #ifdef MEM_OPT_VERSION
280  velocities.submitData(seq);
281  checkVelReady();
282 #endif
283 }
void submitData(CollectVectorMsg *msg, int max_index)

◆ receivePositions()

void CollectionMaster::receivePositions ( CollectVectorMsg msg)

Definition at line 52 of file CollectionMaster.C.

References DebugM, disposePositions(), Node::Object(), CollectionMaster::CollectVectorSequence::removeReady(), and CollectionMaster::CollectVectorSequence::submitData().

Referenced by CollectionMgr::submitPositions().

53 {
54  DebugM(3, "["<<CkMyPe()<<"]"<< " receivePositions\n");
55 #ifndef MEM_OPT_VERSION
56  positions.submitData(msg,Node::Object()->molecule->numAtoms);
57 
58  delete msg;
59 
60  CollectVectorInstance *c;
61  while ( ( c = positions.removeReady() ) ) { disposePositions(c); }
62 #endif
63 }
static Node * Object()
Definition: Node.h:86
CollectVectorInstance * removeReady(void)
#define DebugM(x, y)
Definition: Debug.h:75
void submitData(CollectVectorMsg *msg, int max_index)
void disposePositions(CollectVectorInstance *c)

◆ receivePositionsDcdSelection()

void CollectionMaster::receivePositionsDcdSelection ( CollectVectorMsg msg)

Definition at line 66 of file CollectionMaster.C.

References DebugM, disposePositions(), CollectVectorMsg::index, CollectionMaster::CollectVectorSequenceDcdSelection::index, Node::Object(), CollectionMaster::CollectVectorSequenceDcdSelection::removeReady(), and CollectionMaster::CollectVectorSequenceDcdSelection::submitData().

Referenced by CollectionMgr::submitPositions().

67 {
68  DebugM(3, "["<<CkMyPe()<<"]"<< " receivePositionsDcdSelection index "<<msg->index<<"\n");
69 #ifndef MEM_OPT_VERSION
70  positionsDcdSelection.index=msg->index;
71  positionsDcdSelection.submitData(msg,Node::Object()->molecule->get_dcd_selection_size(msg->index));
72  delete msg;
73 
74  CollectVectorInstanceDcdSelection *c;
75  while ( ( c = positionsDcdSelection.removeReady() ) ) { disposePositions(c); }
76 #endif
77 }
static Node * Object()
Definition: Node.h:86
#define DebugM(x, y)
Definition: Debug.h:75
void disposePositions(CollectVectorInstance *c)
void submitData(CollectVectorMsg *msg, int max_index)
CollectVectorInstanceDcdSelection * removeReady(void)

◆ receiveVelocities()

void CollectionMaster::receiveVelocities ( CollectVectorMsg msg)

Definition at line 139 of file CollectionMaster.C.

References disposeVelocities(), Node::Object(), CollectionMaster::CollectVectorSequence::removeReady(), and CollectionMaster::CollectVectorSequence::submitData().

Referenced by CollectionMgr::submitVelocities().

140 {
141 #ifndef MEM_OPT_VERSION
142  velocities.submitData(msg,Node::Object()->molecule->numAtoms);
143  delete msg;
144 
145  CollectVectorInstance *c;
146  while ( ( c = velocities.removeReady() ) ) { disposeVelocities(c); }
147 #endif
148 }
static Node * Object()
Definition: Node.h:86
CollectVectorInstance * removeReady(void)
void submitData(CollectVectorMsg *msg, int max_index)
void disposeVelocities(CollectVectorInstance *c)

◆ startNextRoundOutputForce()

void CollectionMaster::startNextRoundOutputForce ( double  totalT)

Definition at line 361 of file CollectionMaster.C.

References CollectionMaster::CollectVectorInstance::free(), IN_PROCESS, memusage_MB(), Node::Object(), and CollectionMaster::CollectVectorInstance::seq.

361  {
362 #ifdef MEM_OPT_VERSION
363 
364  if(totalT > forceIOTime) forceIOTime = totalT;
365 
366 #if OUTPUT_SINGLE_FILE
367  if(++forceDoneCnt < Node::Object()->simParameters->numoutputwrts) return;
368 #else
369  if(++forceDoneCnt < Node::Object()->simParameters->numoutputprocs) return;
370 #endif
371 
372  forceDoneCnt = 0;
373 
374  //retrieve the last ready instance
375  CollectVectorInstance *c = forces.getReady();
376  int seq = c->seq;
377  CmiAssert(c->status == IN_PROCESS);
378  double mem = memusage_MB();
379  forces.removeFirstReady();
380  c->free();
381  forceOutTime = CmiWallTimer()-forceOutTime;
382  if ( forceTimings ) {
383  CkPrintf("The last force output (seq=%d) takes %.3f seconds(file I/O: %.3f secs), %.3f MB of memory in use\n", seq, forceOutTime, forceIOTime, mem);
384  --forceTimings;
385  }
386 
387  //Actually the c->status doesn't need to be checked because it is
388  //certain that the new ready one will not be in IN_PROCESS status
389  checkForceReady();
390 #endif
391 }
static Node * Object()
Definition: Node.h:86
double memusage_MB()
Definition: memusage.h:13

◆ startNextRoundOutputPos()

void CollectionMaster::startNextRoundOutputPos ( double  totalT)

Definition at line 293 of file CollectionMaster.C.

References CollectionMaster::CollectVectorInstance::free(), IN_PROCESS, memusage_MB(), Node::Object(), and CollectionMaster::CollectVectorInstance::seq.

293  {
294 #ifdef MEM_OPT_VERSION
295 
296  if(totalT > posIOTime) posIOTime = totalT;
297 
298 #ifndef OUTPUT_SINGLE_FILE
299 #error OUTPUT_SINGLE_FILE not defined!
300 #endif
301 
302 #if OUTPUT_SINGLE_FILE
303  if(++posDoneCnt < Node::Object()->simParameters->numoutputwrts) return;
304 #else
305  if(++posDoneCnt < Node::Object()->simParameters->numoutputprocs) return;
306 #endif
307 
308  posDoneCnt = 0;
309 
310  //retrieve the last ready instance
311  CollectVectorInstance *c = positions.getReady();
312  int seq = c->seq;
313  CmiAssert(c->status == IN_PROCESS);
314  double mem = memusage_MB();
315  positions.removeFirstReady();
316  c->free();
317  posOutTime = CmiWallTimer()-posOutTime;
318  if ( posTimings ) {
319  CkPrintf("The last position output (seq=%d) takes %.3f seconds(file I/O: %.3f secs), %.3f MB of memory in use\n", seq, posOutTime, posIOTime, mem);
320  --posTimings;
321  }
322 
323  //Actually the c->status doesn't need to be checked because it is
324  //certain that the new ready one will not be in IN_PROCESS status
325  checkPosReady();
326 #endif
327 }
static Node * Object()
Definition: Node.h:86
double memusage_MB()
Definition: memusage.h:13

◆ startNextRoundOutputVel()

void CollectionMaster::startNextRoundOutputVel ( double  totalT)

Definition at line 329 of file CollectionMaster.C.

References CollectionMaster::CollectVectorInstance::free(), IN_PROCESS, memusage_MB(), Node::Object(), and CollectionMaster::CollectVectorInstance::seq.

329  {
330 #ifdef MEM_OPT_VERSION
331 
332  if(totalT > velIOTime) velIOTime = totalT;
333 
334 #if OUTPUT_SINGLE_FILE
335  if(++velDoneCnt < Node::Object()->simParameters->numoutputwrts) return;
336 #else
337  if(++velDoneCnt < Node::Object()->simParameters->numoutputprocs) return;
338 #endif
339 
340  velDoneCnt = 0;
341 
342  //retrieve the last ready instance
343  CollectVectorInstance *c = velocities.getReady();
344  int seq = c->seq;
345  CmiAssert(c->status == IN_PROCESS);
346  double mem = memusage_MB();
347  velocities.removeFirstReady();
348  c->free();
349  velOutTime = CmiWallTimer()-velOutTime;
350  if ( velTimings ) {
351  CkPrintf("The last velocity output (seq=%d) takes %.3f seconds(file I/O: %.3f secs), %.3f MB of memory in use\n", seq, velOutTime, velIOTime, mem);
352  --velTimings;
353  }
354 
355  //Actually the c->status doesn't need to be checked because it is
356  //certain that the new ready one will not be in IN_PROCESS status
357  checkVelReady();
358 #endif
359 }
static Node * Object()
Definition: Node.h:86
double memusage_MB()
Definition: memusage.h:13

◆ unblockPositions()

void CollectionMaster::unblockPositions ( )
inline

◆ wrapCoorFinished()

void CollectionMaster::wrapCoorFinished ( )

Definition at line 394 of file CollectionMaster.C.

References Node::Object(), and CollectionMaster::CollectVectorInstance::seq.

394  {
395 #ifdef MEM_OPT_VERSION
396  if(++wrapCoorDoneCnt == Node::Object()->simParameters->numoutputprocs){
397  wrapCoorDoneCnt = 0;
398 
399  //count the wrapping-coor time into master writing time
400  posIOTime = CmiWallTimer()-posOutTime;
401 
402  //it's ready to output positions
403  CollectVectorInstance *c = positions.getReady();
404 
405  CProxy_ParallelIOMgr io(CkpvAccess(BOCclass_group).ioMgr);
406  ParallelIOMgr *ioMgr = io.ckLocalBranch();
407 
408 #if OUTPUT_SINGLE_FILE
409  //notify output procs to do Token based output
410  int grpsize = ioMgr->numOutputProcs / ioMgr->numOutputWrts;
411  int remains = ioMgr->numOutputProcs % ioMgr->numOutputWrts;
412  int outrank = 0;
413  int i;
414  for(i=0; i<remains; i++){
415  io[ioMgr->outputProcArray[outrank]].disposePositions(c->seq, posIOTime);
416  outrank += (grpsize+1);
417  }
418  for(; i<ioMgr->numOutputWrts; i++){
419  io[ioMgr->outputProcArray[outrank]].disposePositions(c->seq, posIOTime);
420  outrank += grpsize;
421  }
422 #else
423  //output multiple files
424  for(int i=0; i<ioMgr->numOutputProcs; i++) {
425  io[ioMgr->outputProcArray[i]].disposePositions(c->seq, posIOTime);
426  }
427 #endif
428 
429  }
430 #endif
431 }
static Node * Object()
Definition: Node.h:86

The documentation for this class was generated from the following files: