doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / OrbLB.h
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6 #ifndef _ORBLB_H_
7 #define _ORBLB_H_
8
9 #include "CentralLB.h"
10 #include "OrbLB.decl.h"
11
12 void CreateOrbLB();
13 BaseLB *AllocateOrbLB(void);
14
15 class OrbLB : public CentralLB {
16 public:/* <- Sun CC demands Partition be public for ComputeLoad to access it. */
17
18   class Partition {
19   public:
20     int refno;
21     double load;                        // total load in this set
22     int origin[3];                      // box coordinates
23     int corner[3];
24     int  count;                         // number of objects in this partition
25     int node, mapped;
26     CkVec<int>   bkpes;                 // background processors
27   public:
28     Partition(): refno(0), load(0.0), node(-1), mapped(0) {};
29   };
30
31 private:  
32   struct ComputeLoad {
33     int id;
34     int v[3];
35     double load;
36     int  refno;
37     double  tv;
38     Partition * partition;
39   };
40   
41   
42   struct VecArray {
43     int v;
44     int id;
45   };
46   
47   enum {XDIR=0, YDIR, ZDIR};
48   
49   LDStats* statsData;
50   int P;
51   ComputeLoad *computeLoad;
52   int nObjs;
53   VecArray  *(vArray[3]);
54   Partition *partitions;
55   Partition top_partition;
56   int npartition;
57   int currentp, refno;
58   
59   void strategy();
60   void rec_divide(int, Partition&);
61   void setVal(int x, int y, int z);
62   int sort_partition(int x, int p, int r);
63   void qsort(int x, int p, int r);
64   void quicksort(int x);
65   void mapPartitionsToNodes();
66
67 public:
68   double overLoad;
69
70 public:
71   OrbLB(const CkLBOptions &);
72   OrbLB(CkMigrateMessage *m):CentralLB(m) { lbname = "OrbLB"; }
73
74   void work(LDStats* stats);
75   CmiBool QueryBalanceNow(int step);
76 };
77
78
79 #endif /* _ORBLB_H_ */
80
81 /*@}*/