1 #ifndef PARALLELIOMGR_H 2 #define PARALLELIOMGR_H 12 #include "Node.decl.h" 18 #define COLLECT_PERFORMANCE_DATA 0 20 #ifdef MEM_OPT_VERSION 23 class CollectionMidMaster;
24 class CollectMidVectorInstance;
31 #include "ParallelIOMgr.decl.h" 155 #ifdef MEM_OPT_VERSION 158 friend class CollectionMidMaster;
159 friend class CollectMidVectorInstance;
189 bool isOKToRecvHPAtoms;
199 int64 numTotalExclusions;
200 int64 numCalcExclusions;
201 int64 numCalcFullExclusions;
206 int *outputProcArray;
207 char *outputProcFlags;
217 int numProxiesPerOutputProc;
218 int myOutputProxyRank;
219 int *outputProxyArray;
220 int *myOutputProxies;
222 int calcMyOutputProxyClients();
236 int numRemoteClusters;
260 #ifdef MEM_OPT_VERSION 261 CollectMidVectorInstance *coorInstance;
262 CollectionMidMaster *midCM;
265 CkChareID mainMaster;
269 #if COLLECT_PERFORMANCE_DATA 270 int numFixedAtomLookup;
274 void readCoordinatesAndVelocity();
276 void prepareHomePatchAtomList();
278 int binaryFindHPID(
int pid);
280 void readInfoForParOutput();
282 void integrateClusterCoor();
284 int numMyAtoms(
int rank,
int numProcs);
286 inline int numInitMyAtomsOnInput() {
287 return numMyAtoms(myInputRank, numInputProcs);
289 inline int numMyAtomsOnOutput() {
290 return numMyAtoms(myOutputRank, numOutputProcs);
293 int atomRank(
int atomID,
int numProcs);
295 inline int atomInitRankOnInput(
int atomID) {
296 return atomRank(atomID, numInputProcs);
298 inline int atomRankOnOutput(
int atomID) {
299 return atomRank(atomID, numOutputProcs);
302 void getMyAtomsRange(
int &lowerIdx,
int &upperIdx,
int rank,
int numProcs);
305 inline void getMyAtomsInitRangeOnInput(
int &lowerIdx,
int &upperIdx) {
306 return getMyAtomsRange(lowerIdx,upperIdx,myInputRank,numInputProcs);
308 inline void getMyAtomsRangeOnOutput(
int &lowerIdx,
int &upperIdx) {
309 return getMyAtomsRange(lowerIdx,upperIdx,myOutputRank,numOutputProcs);
311 inline void getAtomsRangeOnOutput(
int &lowerIdx,
int &upperIdx,
int rank) {
312 return getMyAtomsRange(lowerIdx,upperIdx,rank,numOutputProcs);
318 inline int isAtomFixed(
int mySAId,
int reqAId){
319 int localIdx = reqAId-mySAId;
320 if(localIdx>=0 && localIdx<initAtoms.
size()){
322 return initAtoms[localIdx].atomFixed;
324 #if COLLECT_PERFORMANCE_DATA 325 numFixedAtomLookup++;
333 inline int getMyOutputGroupHighestRank(){
334 int step = numOutputProcs/numOutputWrts;
335 int remains = numOutputProcs%numOutputWrts;
338 int limit = (step+1)*remains;
339 if(myOutputRank<limit){
340 int idx = myOutputRank/(step+1);
341 return (idx+1)*(step+1)-1;
343 int idx = (myOutputRank-limit)/step;
344 return limit+(idx+1)*step-1;
int64 numCalcFullExclusions
unsigned short * fixedAtomsCntList
void sendAtomsToHomePatchProcs()
void recvClusterSize(ClusterSizeMsg *msg)
UniqueSet< ClusterCoorElem > ClusterCoorSet
int operator==(const ClusterCoorElem &a) const
void integrateClusterSize()
void recvAtomsMGrp(MoveInputAtomsMsg *msg)
void disposePositions(int seq, double prevT)
UniqueSetIter< ClusterElem > ClusterSetIter
Molecule stores the structural information for the system.
void wrapCoor(int seq, Lattice lat)
ResizeArray< ClusterCoorMsg * > ClusterCoorMsgBuffer
void receiveForces(CollectVectorVarMsg *msg)
void recvAtomsToHomePatchProcs(MovePatchAtomsMsg *msg)
void integrateMigratedAtoms()
void disposeForces(int seq, double prevT)
void recvClusterCoor(ClusterCoorMsg *msg)
void recvAtomsCntPerPatch(AtomsCntPerPatchMsg *msg)
void recvHydroBasedCounter(HydroBasedMsg *msg)
CthThread sendAtomsThread
void recvFinalClusterCoor(ClusterCoorMsg *msg)
void ackAtomsToHomePatchProcs()
void initialize(Node *node)
void recvFinalClusterSize(ClusterSizeMsg *msg)
void disposeVelocities(int seq, double prevT)
void calcAtomsInEachPatch()
ResizeArray< ClusterSizeMsg * > ClusterSizeMsgBuffer
unsigned short * atomsCntList
bool isOutputProcessor(int pe)
UniqueSetIter< ClusterCoorElem > ClusterCoorSetIter
void bcastHydroBasedCounter(HydroBasedMsg *msg)
void receiveVelocities(CollectVectorVarMsg *msg)
Bool is_atom_fixed(int atomnum) const
void recvMolInfo(MolInfoMsg *msg)
int operator==(const ClusterElem &a) const
void bcastMolInfo(MolInfoMsg *msg)
UniqueSet< ClusterElem > ClusterSet
void receivePositions(CollectVectorVarMsg *msg)