Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

CollectionMgr.C

Go to the documentation of this file.
00001 
00007 #include "CollectionMgr.decl.h"
00008 #include "CollectionMgr.h"
00009 #include "CollectionMaster.decl.h"
00010 #include "CollectionMaster.h"
00011 #include "Node.h"
00012 #include "Molecule.h"
00013 #include "SimParameters.h"
00014 
00015 //#define DEBUGM
00016 #include "Debug.h"
00017 
00018 CollectionMgr::CollectionMgr(SlaveInitMsg *msg) : master(msg->master)
00019 {
00020   delete msg;
00021   if (CkpvAccess(CollectionMgr_instance) == 0) {
00022     CkpvAccess(CollectionMgr_instance) = this;
00023   } else {
00024     DebugM(1, "CollectionMgr::CollectionMgr() - another instance of CollectionMgr exists!\n");
00025   }
00026 }
00027 
00028 
00029 CollectionMgr::~CollectionMgr(void)
00030 {
00031 }
00032 
00033 
00034 void CollectionMgr::submitPositions(int seq, FullAtomList &a,
00035                                 Lattice l, int prec)
00036 {
00037   Molecule *mol = Node::Object()->molecule;
00038   int numAtoms = a.size();
00039   AtomIDList aid(numAtoms);
00040   PositionList d(numAtoms);
00041   for ( int i=0; i<numAtoms; ++i ) {
00042     aid[i] = a[i].id;
00043     d[i] = l.reverse_transform(a[i].position,a[i].transform);
00044   }
00045   CollectVectorInstance *c;
00046   if ( ( c = positions.submitData(seq,aid,d,prec) ) )
00047   {
00048     CollectVectorMsg * msg = new CollectVectorMsg;
00049     msg->seq = c->seq;
00050     msg->aid = c->aid;
00051     msg->data = c->data;
00052     msg->fdata = c->fdata;
00053     CProxy_CollectionMaster cm(master);
00054     cm.receivePositions(msg);
00055     c->free();
00056   }
00057 }
00058 
00059 
00060 void CollectionMgr::submitVelocities(int seq, int zero, FullAtomList &a)
00061 {
00062   int numAtoms = a.size();
00063   AtomIDList aid(numAtoms);
00064   PositionList d(numAtoms);
00065   for ( int i=0; i<numAtoms; ++i ) {
00066     aid[i] = a[i].id;
00067     if ( zero ) d[i] = 0.;
00068     else d[i] = a[i].velocity;
00069   }
00070   CollectVectorInstance *c;
00071   if ( ( c = velocities.submitData(seq,aid,d) ) )
00072   {
00073     CollectVectorMsg * msg = new CollectVectorMsg;
00074     msg->seq = c->seq;
00075     msg->aid = c->aid;
00076     msg->data = c->data;
00077     CProxy_CollectionMaster cm(master);
00078     cm.receiveVelocities(msg);
00079     c->free();
00080   }
00081 }
00082 
00083 
00084 void CollectionMgr::sendDataStream(const char *data) {
00085   DataStreamMsg *msg = new DataStreamMsg;
00086   msg->data.resize(strlen(data)+1);
00087   strcpy(msg->data.begin(),data);
00088   CProxy_CollectionMaster cm(master);
00089   cm.receiveDataStream(msg);
00090 }
00091 
00092 
00093 #include "CollectionMgr.def.h"
00094 

Generated on Mon Nov 23 04:59:18 2009 for NAMD by  doxygen 1.3.9.1