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

#include <CollectionMgr.h>

Inheritance diagram for CollectionMgr:

Classes

class  CollectVectorInstance
 
class  CollectVectorSequence
 

Public Member Functions

 CollectionMgr (SlaveInitMsg *msg)
 
 ~CollectionMgr (void)
 
void submitPositions (int seq, FullAtomList &a, Lattice l, int prec, int dcdSelectionIndex)
 
void submitVelocities (int seq, int zero, FullAtomList &a, int prec)
 
void submitForces (int seq, FullAtomList &a, int maxForceUsed, ForceList *f, int prec)
 
void sendDataStream (const char *)
 
CkChareID getMasterChareID ()
 

Static Public Member Functions

static CollectionMgrObject ()
 

Detailed Description

Definition at line 26 of file CollectionMgr.h.

Constructor & Destructor Documentation

◆ CollectionMgr()

CollectionMgr::CollectionMgr ( SlaveInitMsg msg)

Definition at line 22 of file CollectionMgr.C.

References DebugM, and master.

22  : master(msg->master)
23 {
24  delete msg;
25  if (CkpvAccess(CollectionMgr_instance) == 0) {
26  CkpvAccess(CollectionMgr_instance) = this;
27  } else {
28  DebugM(1, "CollectionMgr::CollectionMgr() - another instance of CollectionMgr exists!\n");
29  }
30 }
CkChareID master
Definition: CollectionMgr.h:23
#define DebugM(x, y)
Definition: Debug.h:75

◆ ~CollectionMgr()

CollectionMgr::~CollectionMgr ( void  )

Definition at line 33 of file CollectionMgr.C.

34 {
35 }

Member Function Documentation

◆ getMasterChareID()

CkChareID CollectionMgr::getMasterChareID ( )
inline

Definition at line 43 of file CollectionMgr.h.

Referenced by ParallelIOMgr::initialize().

◆ Object()

static CollectionMgr* CollectionMgr::Object ( )
inlinestatic

Definition at line 30 of file CollectionMgr.h.

Referenced by ComputeStir::doForce(), datastream::endd(), and ParallelIOMgr::initialize().

30  {
31  return CkpvAccess(CollectionMgr_instance);
32  }

◆ sendDataStream()

void CollectionMgr::sendDataStream ( const char *  data)

Definition at line 452 of file CollectionMgr.C.

References ResizeArray< Elem >::begin(), DataStreamMsg::data, and ResizeArray< Elem >::resize().

Referenced by ComputeStir::doForce(), and datastream::endd().

452  {
453  DataStreamMsg *msg = new DataStreamMsg;
454  msg->data.resize(strlen(data)+1);
455  strcpy(msg->data.begin(),data);
456  CProxy_CollectionMaster cm(master);
457  cm.receiveDataStream(msg);
458 }
void resize(int i)
Definition: ResizeArray.h:84
ResizeArray< char > data
iterator begin(void)
Definition: ResizeArray.h:36

◆ submitForces()

void CollectionMgr::submitForces ( int  seq,
FullAtomList a,
int  maxForceUsed,
ForceList f,
int  prec 
)

Definition at line 399 of file CollectionMgr.C.

References CollectVectorMsg::aid, CollectionMgr::CollectVectorInstance::aid, CollectVectorMsg::aid_size, ResizeArray< Elem >::begin(), CollectVectorMsg::data, CollectionMgr::CollectVectorInstance::data, CollectVectorMsg::data_size, CollectVectorMsg::fdata, CollectionMgr::CollectVectorInstance::fdata, CollectVectorMsg::fdata_size, SimParameters::fixedAtomsForceOutput, CollectionMgr::CollectVectorInstance::free(), Node::Object(), CollectionMaster::receiveForces(), CollectVectorMsg::seq, CollectionMgr::CollectVectorInstance::seq, Node::simParameters, ResizeArray< Elem >::size(), and CollectionMgr::CollectVectorSequence::submitData().

Referenced by Sequencer::submitCollections(), and Sequencer::submitCollections_SOA().

400 {
401  int numAtoms = a.size();
402  AtomIDList aid(numAtoms);
403  ForceList d(numAtoms);
404  for ( int i=0; i<numAtoms; ++i ) {
405  aid[i] = a[i].id;
406  d[i] = 0.;
407  }
408  for ( int j=0; j<=maxForceUsed; ++j ) {
409  Force *fptr = f[j].begin();
410  for ( int i=0; i<numAtoms; ++i ) {
411  d[i] += fptr[i];
412  }
413  }
414  if ( Node::Object()->simParameters->fixedAtomsOn && !Node::Object()->simParameters->fixedAtomsForceOutput) {
415  for ( int i=0; i<numAtoms; ++i ) {
416  if ( a[i].atomFixed ) d[i] = 0.;
417  }
418  }
419  CollectVectorInstance *c;
420  if ( ( c = forces.submitData(seq,aid,d,prec) ) )
421  {
422  int aid_size = c->aid.size();
423  int data_size = c->data.size();
424  int fdata_size = c->fdata.size();
425  CollectVectorMsg *msg = new (aid_size, data_size, fdata_size, 0) CollectVectorMsg;
426  msg->seq = c->seq;
427  msg->aid_size = aid_size;
428  msg->data_size = data_size;
429  msg->fdata_size = fdata_size;
430  memcpy(msg->aid,c->aid.begin(),aid_size*sizeof(AtomID));
431  memcpy(msg->data,c->data.begin(),data_size*sizeof(Vector));
432  memcpy(msg->fdata,c->fdata.begin(),fdata_size*sizeof(FloatVector));
433 #ifdef NODEGROUP_FORCE_REGISTER
434  if (Node::Object()->simParameters->CUDASOAintegrate) {
435  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
436  CollectionMaster *pcm = cpdata.ckLocalBranch()->ptrCollectionMaster;
437  pcm->lock();
438  pcm->receiveForces(msg);
439  pcm->unlock();
440  }
441  else
442 #endif
443  {
444  CProxy_CollectionMaster cm(master);
445  cm.receiveForces(msg);
446  }
447  c->free();
448  }
449 }
static Node * Object()
Definition: Node.h:86
Bool fixedAtomsForceOutput
int size(void) const
Definition: ResizeArray.h:131
Definition: Vector.h:72
SimParameters * simParameters
Definition: Node.h:181
CollectVectorInstance * submitData(int seq, AtomIDList &i, ResizeArray< Vector > &d, int prec=2)
void receiveForces(CollectVectorMsg *msg)
iterator begin(void)
Definition: ResizeArray.h:36
int32 AtomID
Definition: NamdTypes.h:35
FloatVector * fdata

◆ submitPositions()

void CollectionMgr::submitPositions ( int  seq,
FullAtomList a,
Lattice  l,
int  prec,
int  dcdSelectionIndex 
)

Definition at line 268 of file CollectionMgr.C.

References CollectVectorMsg::aid, CollectionMgr::CollectVectorInstance::aid, CollectVectorMsg::aid_size, CollectVectorMsg::data, CollectVectorMsg::data_size, DebugM, CollectVectorMsg::fdata, CollectVectorMsg::fdata_size, CollectVectorMsg::index, Node::Object(), CollectionMaster::receivePositions(), CollectionMaster::receivePositionsDcdSelection(), Lattice::reverse_transform(), CollectVectorMsg::seq, Node::simParameters, simParams, ResizeArray< Elem >::size(), and CollectionMgr::CollectVectorSequence::submitData().

Referenced by Sequencer::submitCollections(), and Sequencer::submitCollections_SOA().

270 {
271  int numAtomsTotal = a.size();
272  int numAtomsDcdSelection = 0;
273  int numAtoms;
274  int dcdSelectionindex=dcdSelectiontag-1;
275  if(prec == 4) // count up the selection intersection in this atomlist
276  {
277  int bitmask = 1 << dcdSelectionindex;
278  for ( int i=0; i<numAtomsTotal; ++i ) {
279  if(a[i].flags.dcdSelection & bitmask)
280  numAtomsDcdSelection++;
281  }
282  numAtoms = numAtomsDcdSelection;
283  }
284  else
285  {
286  numAtoms = numAtomsTotal;
287  }
288  AtomIDList aid(numAtoms);
289  PositionList d(numAtoms);
290  if(prec == 4)
291  {
292  // only load atoms in the selection list
293  int selectionCounter=0;
294  int bitmask = 1 << dcdSelectionindex;
295  DebugM(3,"seq " << seq << " prec " << prec <<" numAtomsTotal " << numAtomsTotal<< " dcdSelectionIndex "<< dcdSelectionindex <<" bitmask "<< bitmask <<"\n");
296  for (int i=0; i<numAtomsTotal; ++i ) {
297  if(a[i].flags.dcdSelection & bitmask)
298  {
299  aid[selectionCounter] = a[i].id;
300  d[selectionCounter] = l.reverse_transform(a[i].position,a[i].transform);
301  ++selectionCounter;
302  }
303  }
304  DebugM(3, "["<<CkMyPe()<<"]"<< " selection count "<<selectionCounter<<"\n");
305  }
306  else
307  {
308  for ( int i=0; i<numAtoms; ++i ) {
309  aid[i] = a[i].id;
310  d[i] = l.reverse_transform(a[i].position,a[i].transform);
311  }
312  }
313  auto c= positions.submitData(seq,aid,d,prec) ;
314  if ( c )
315  {
316  int aid_size = c->aid.size();
317  int data_size = c->data.size();
318  int fdata_size = c->fdata.size();
319  CollectVectorMsg *msg
320  = new (aid_size, data_size, fdata_size,0) CollectVectorMsg;
321  msg->index=dcdSelectionindex;
322 
323  msg->seq = c->seq;
324  msg->aid_size = aid_size;
325  msg->data_size = data_size;
326  msg->fdata_size = fdata_size;
327  DebugM(3, "["<<CkMyPe()<<"]"<< " msg index "<<msg->index<< " fdata_size " << msg->fdata_size<<"\n");
328  memcpy(msg->aid,c->aid.begin(),aid_size*sizeof(AtomID));
329  memcpy(msg->data,c->data.begin(),data_size*sizeof(Vector));
330  memcpy(msg->fdata,c->fdata.begin(),fdata_size*sizeof(FloatVector));
331 #ifdef NODEGROUP_FORCE_REGISTER
333  if (simParams->CUDASOAintegrate && simParams->GPUresidentSingleProcessMode) {
334  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
335  CollectionMaster *pcm = cpdata.ckLocalBranch()->ptrCollectionMaster;
336  pcm->lock();
337  if(prec == 4)
339  else
340  pcm->receivePositions(msg);
341  pcm->unlock();
342  }
343  else
344 #endif
345  {
346  CProxy_CollectionMaster cm(master);
347  if(prec == 4)
348  cm.receivePositionsDcdSelection(msg);
349  else
350  cm.receivePositions(msg);
351  }
352  c->free();
353  }
354 }
static Node * Object()
Definition: Node.h:86
int size(void) const
Definition: ResizeArray.h:131
NAMD_HOST_DEVICE Position reverse_transform(Position data, const Transform &t) const
Definition: Lattice.h:143
Definition: Vector.h:72
SimParameters * simParameters
Definition: Node.h:181
void receivePositions(CollectVectorMsg *msg)
void receivePositionsDcdSelection(CollectVectorMsg *msg)
#define DebugM(x, y)
Definition: Debug.h:75
CollectVectorInstance * submitData(int seq, AtomIDList &i, ResizeArray< Vector > &d, int prec=2)
#define simParams
Definition: Output.C:131
int32 AtomID
Definition: NamdTypes.h:35
FloatVector * fdata

◆ submitVelocities()

void CollectionMgr::submitVelocities ( int  seq,
int  zero,
FullAtomList a,
int  prec 
)

Definition at line 356 of file CollectionMgr.C.

References CollectVectorMsg::aid, CollectionMgr::CollectVectorInstance::aid, CollectVectorMsg::aid_size, ResizeArray< Elem >::begin(), CollectVectorMsg::data, CollectionMgr::CollectVectorInstance::data, CollectVectorMsg::data_size, CollectVectorMsg::fdata, CollectionMgr::CollectVectorInstance::fdata, CollectVectorMsg::fdata_size, CollectionMgr::CollectVectorInstance::free(), Node::Object(), CollectionMaster::receiveVelocities(), CollectVectorMsg::seq, CollectionMgr::CollectVectorInstance::seq, Node::simParameters, simParams, ResizeArray< Elem >::size(), and CollectionMgr::CollectVectorSequence::submitData().

Referenced by Sequencer::submitCollections(), and Sequencer::submitCollections_SOA().

357 {
358  int numAtoms = a.size();
359  AtomIDList aid(numAtoms);
360  PositionList d(numAtoms);
361  for ( int i=0; i<numAtoms; ++i ) {
362  aid[i] = a[i].id;
363  if ( zero ) d[i] = 0.;
364  else d[i] = a[i].velocity;
365  }
366  CollectVectorInstance *c;
367  if ( ( c = velocities.submitData(seq,aid,d,prec) ) )
368  {
369  int aid_size = c->aid.size();
370  int data_size = c->data.size();
371  int fdata_size = c->fdata.size();
372  CollectVectorMsg *msg = new (aid_size, data_size, fdata_size, 0) CollectVectorMsg;
373  msg->seq = c->seq;
374  msg->aid_size = aid_size;
375  msg->data_size = data_size;
376  msg->fdata_size = fdata_size;
377  memcpy(msg->aid,c->aid.begin(),aid_size*sizeof(AtomID));
378  memcpy(msg->data,c->data.begin(),data_size*sizeof(Vector));
379  memcpy(msg->fdata,c->fdata.begin(),fdata_size*sizeof(FloatVector));
380 #ifdef NODEGROUP_FORCE_REGISTER
382  if (simParams->CUDASOAintegrate && simParams->GPUresidentSingleProcessMode) {
383  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
384  CollectionMaster *pcm = cpdata.ckLocalBranch()->ptrCollectionMaster;
385  pcm->lock();
386  pcm->receiveVelocities(msg);
387  pcm->unlock();
388  }
389  else
390 #endif
391  {
392  CProxy_CollectionMaster cm(master);
393  cm.receiveVelocities(msg);
394  }
395  c->free();
396  }
397 }
static Node * Object()
Definition: Node.h:86
int size(void) const
Definition: ResizeArray.h:131
void receiveVelocities(CollectVectorMsg *msg)
Definition: Vector.h:72
SimParameters * simParameters
Definition: Node.h:181
CollectVectorInstance * submitData(int seq, AtomIDList &i, ResizeArray< Vector > &d, int prec=2)
#define simParams
Definition: Output.C:131
int32 AtomID
Definition: NamdTypes.h:35
FloatVector * fdata

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