bugfix
[charm.git] / src / conv-com / gridrouter.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 #ifndef _GRIDROUTER_H
9 #define _GRIDROUTER_H
10
11 #include <math.h>
12 #include <converse.h>
13 #include "comlib.h"
14 #include "petable.h"
15
16 #define ROWLEN COLLEN
17 #define RowLen(pe) ColLen(pe)
18 #define PELISTSIZE ((ROWLEN-1)/sizeof(int)+1)
19
20 inline int ColLen(int npes)
21 {
22   int len= (int)sqrt((double)npes);
23   if (npes > (len*len)) len++;
24   return(len);
25 }
26
27 inline int Expect(int pe, int npes)
28 {
29   int i, len=ColLen(npes);
30   for (i=len-1;i>=0;i--) {
31         int myrow=pe/len;
32         int toprep=i*len;
33         int offset=pe-myrow*len;
34         if ((toprep+offset) <= (npes-1)) return(i+1);
35   }
36   return(len);
37 }
38
39 #include "persistent.h"
40
41 //Grid based router
42 class GridRouter : public Router
43 {
44   private:
45         PeTable *PeMesh, *PeMesh1, *PeMesh2;
46         int *onerow, *gpes, 
47             *rowVector, *colVector, 
48             *growVector, *gcolVector;
49
50         int rvecSize, cvecSize;
51         int MyPe, NumPes, COLLEN;
52         int LPMsgCount, LPMsgExpected;
53         int recvExpected, recvCount;
54         void InitVars();
55         void LocalProcMsg(comID id);
56 #if CMK_PERSISTENT_COMM
57         PersistentHandle *rowHandleArray, *columnHandleArray;
58         PersistentHandle *rowHandleArrayEven, *columnHandleArrayEven;
59 #endif          
60
61   public:
62         GridRouter(int, int);
63         ~GridRouter();
64         void NumDeposits(comID, int);
65         void EachToAllMulticast(comID , int , void *, int);
66         void EachToManyMulticast(comID , int , void *, int, int *, int);
67         void RecvManyMsg(comID, char *);
68         void ProcManyMsg(comID, char *);
69         void DummyEP(comID id, int);
70         void ProcMsg(int, msgstruct **) {;}
71         void SetMap(int *);
72 };
73
74 #endif