doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / NeighborCommLB.h
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6 #ifndef _NEIGHBORCOMMLB_H_
7 #define _NEIGHBORCOMMLB_H_
8
9 #include <math.h>
10
11 #include "NborBaseLB.h"
12 #include "NeighborCommLB.decl.h"
13
14 void CreateNeighborCommLB();
15
16 class NeighborCommLB : public NborBaseLB {
17 public:
18   NeighborCommLB(const CkLBOptions &);
19   NeighborCommLB(CkMigrateMessage *m):NborBaseLB(m) {}
20 private:
21   CmiBool QueryBalanceNow(int step) { return CmiTrue; };
22   virtual int max_neighbors() {
23     return (CkNumPes() > 5) ? 4 : (CkNumPes()-1);
24   };
25   virtual int num_neighbors() {
26     return (CkNumPes() > 5) ? 4 : (CkNumPes()-1);
27   };
28   virtual void neighbors(int* _n) {
29     const int me = CkMyPe();
30     const int npe = CkNumPes();
31     if (npe > 1)
32       _n[0] = (me + npe - 1) % npe;
33     if (npe > 2)
34       _n[1] = (me + 1) % npe;
35
36     int bigstep = (npe - 1) / 3 + 1;
37     if (bigstep == 1) bigstep++;
38
39     if (npe > 3)
40       _n[2] = (me + bigstep) % npe;
41     if (npe > 4)
42       _n[3] = (me + npe - bigstep) % npe;
43   };
44
45   LBMigrateMsg* Strategy(NborBaseLB::LDStats* stats, int n_nbrs);
46 };
47
48 #endif /* _NeighborCommLB_H_ */
49
50 /*@}*/