7 #include "CollectionMgr.decl.h"
9 #include "CollectionMaster.decl.h"
14 #include "ParallelIOMgr.decl.h"
23 if (CkpvAccess(CollectionMgr_instance) == 0) {
24 CkpvAccess(CollectionMgr_instance) =
this;
26 DebugM(1,
"CollectionMgr::CollectionMgr() - another instance of CollectionMgr exists!\n");
35 #ifdef MEM_OPT_VERSION
43 int numAtoms = a.
size();
47 for (
int i=0; i<numAtoms; ++i ) {
49 oRank[i] = a[i].outputRank;
52 CollectVectorInstance *c;
53 if ( ( c = positions.
submitData(seq,aid,oRank,d,prec) ) )
55 CProxy_ParallelIOMgr io(CkpvAccess(BOCclass_group).ioMgr);
60 for(
int i=0; i<c->aid.size(); i++){
61 perOList[c->outRank[i]].
add(i);
72 for(
int i=0; i<ioMgr->numOutputProcs; i++){
73 int numAtoms = perOList[i].
size();
74 if(!numAtoms && ioMgr->numProxiesPerOutputProc == 0)
continue;
78 for(
int j=0; j<numAtoms; j++){
79 int lIdx = perOList[i][j];
80 msg->
aid[j] = c->aid[lIdx];
81 msg->
data[j] = c->data[lIdx];
85 for(
int j=0; j<numAtoms; j++){
86 int lIdx = perOList[i][j];
87 msg->
aid[j] = c->aid[lIdx];
88 msg->
fdata[j] = c->fdata[lIdx];
92 for(
int j=0; j<numAtoms; j++){
93 int lIdx = perOList[i][j];
94 msg->
aid[j] = c->aid[lIdx];
95 msg->
data[j] = c->data[lIdx];
96 msg->
fdata[j] = c->fdata[lIdx];
100 msg->
size = numAtoms;
102 io[ioMgr->myOutputProxies[i]].receivePositions(msg);
111 int numAtoms = a.
size();
115 for (
int i=0; i<numAtoms; ++i ) {
117 oRank[i] = a[i].outputRank;
118 if ( zero ) d[i] = 0.;
119 else d[i] = a[i].velocity;
121 CollectVectorInstance *c;
122 if ( ( c = velocities.
submitData(seq,aid,oRank,d) ) )
124 CProxy_ParallelIOMgr io(CkpvAccess(BOCclass_group).ioMgr);
129 for(
int i=0; i<c->aid.size(); i++){
130 perOList[c->outRank[i]].
add(i);
134 for(
int i=0; i<ioMgr->numOutputProcs; i++){
135 int numAtoms = perOList[i].
size();
136 if(!numAtoms && ioMgr->numProxiesPerOutputProc == 0)
continue;
140 msg->
size = numAtoms;
142 for(
int j=0; j<numAtoms; j++){
143 int lIdx = perOList[i][j];
144 msg->
aid[j] = c->aid[lIdx];
145 msg->
data[j] = c->data[lIdx];
147 io[ioMgr->myOutputProxies[i]].receiveVelocities(msg);
156 int numAtoms = a.
size();
160 for (
int i=0; i<numAtoms; ++i ) {
162 oRank[i] = a[i].outputRank;
165 for (
int j=0; j<=maxForceUsed; ++j ) {
167 for (
int i=0; i<numAtoms; ++i ) {
172 for (
int i=0; i<numAtoms; ++i ) {
173 if ( a[i].atomFixed ) d[i] = 0.;
176 CollectVectorInstance *c;
177 if ( ( c = forces.
submitData(seq,aid,oRank,d) ) )
179 CProxy_ParallelIOMgr io(CkpvAccess(BOCclass_group).ioMgr);
184 for(
int i=0; i<c->aid.size(); i++){
185 perOList[c->outRank[i]].
add(i);
189 for(
int i=0; i<ioMgr->numOutputProcs; i++){
190 int numAtoms = perOList[i].
size();
191 if(!numAtoms && ioMgr->numProxiesPerOutputProc == 0)
continue;
195 msg->
size = numAtoms;
197 for(
int j=0; j<numAtoms; j++){
198 int lIdx = perOList[i][j];
199 msg->
aid[j] = c->aid[lIdx];
200 msg->
data[j] = c->data[lIdx];
202 io[ioMgr->myOutputProxies[i]].receiveForces(msg);
213 int numAtoms = a.
size();
216 for (
int i=0; i<numAtoms; ++i ) {
221 if ( ( c = positions.
submitData(seq,aid,d,prec) ) )
235 CProxy_CollectionMaster cm(master);
236 cm.receivePositions(msg);
243 int numAtoms = a.
size();
246 for (
int i=0; i<numAtoms; ++i ) {
248 if ( zero ) d[i] = 0.;
249 else d[i] = a[i].velocity;
252 if ( ( c = velocities.
submitData(seq,aid,d) ) )
263 CProxy_CollectionMaster cm(master);
264 cm.receiveVelocities(msg);
271 int numAtoms = a.
size();
274 for (
int i=0; i<numAtoms; ++i ) {
278 for (
int j=0; j<=maxForceUsed; ++j ) {
280 for (
int i=0; i<numAtoms; ++i ) {
285 for (
int i=0; i<numAtoms; ++i ) {
286 if ( a[i].atomFixed ) d[i] = 0.;
301 CProxy_CollectionMaster cm(master);
302 cm.receiveForces(msg);
312 CProxy_CollectionMaster cm(master);
313 cm.receiveDataStream(msg);
316 #include "CollectionMgr.def.h"
Bool fixedAtomsForceOutput
SimParameters * simParameters
void submitVelocities(int seq, int zero, FullAtomList &a)
CollectVectorInstance * submitData(int seq, AtomIDList &i, ResizeArray< Vector > &d, int prec=2)
ResizeArray< Vector > data
void submitPositions(int seq, FullAtomList &a, Lattice l, int prec)
void submitForces(int seq, FullAtomList &a, int maxForceUsed, ForceList *f)
int add(const Elem &elem)
Position reverse_transform(Position data, const Transform &t) const
ResizeArray< FloatVector > fdata
CollectionMgr(SlaveInitMsg *msg)
void sendDataStream(const char *)