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
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