doc: Add serial to list of ci file reserved words
[charm.git] / examples / pose / LBSim / topology.h
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6
7 #ifndef _LBTOPOLOGY_H
8 #define _LBTOPOLOGY_H
9
10 #ifdef __cplusplus
11
12 class LBTopology {
13 protected:
14   int npes;
15 public:
16   LBTopology(int p): npes(p) {}
17   virtual ~LBTopology() {}
18   virtual int max_neighbors() = 0;
19   virtual void neighbors(int mype, int* _n, int &nb) = 0;
20   //added by zshao1, these defaults mean the the topology does not support these methods
21   virtual int get_dimension() { return -1;}
22   virtual bool get_processor_coordinates(int processor_id, int* processor_coordinates) { return false; }
23   virtual bool get_processor_id(const int* processor_coordinates, int* processor_id) { return false; }
24   virtual bool coordinate_difference(const int* my_coordinates, const int* target_coordinates, int* difference) { return false;}
25   virtual bool coordinate_difference(int my_processor_id, int target_processor_id, int* difference) { return false; }
26 };
27
28 #define LBTOPO_MACRO(x) \
29   static LBTopology * create##x() {     \
30     return new x(CkNumPes());   \
31   }
32
33 class LBTopo_ring: public LBTopology {
34 public:
35   LBTopo_ring(int p): LBTopology(p) {}
36   virtual int max_neighbors();
37   virtual void neighbors(int mype, int* _n, int &nb);
38 };
39
40 class LBTopo_torus2d: public LBTopology {
41 private:
42   int width;
43   int goodcoor(int, int);
44 public:
45   LBTopo_torus2d(int p);
46   virtual int max_neighbors();
47   virtual void neighbors(int mype, int* _n, int &nb);
48 };
49
50 class LBTopo_torus3d: public LBTopology {
51 private:
52   int width;
53   int goodcoor(int, int, int);
54 public:
55   LBTopo_torus3d(int p);
56   virtual int max_neighbors();
57   virtual void neighbors(int mype, int* _n, int &nb);
58 };
59
60 class LBTopo_graph: public LBTopology {
61 public:
62   LBTopo_graph(int p): LBTopology(p) {}
63   virtual int max_neighbors();
64   virtual void neighbors(int mype, int* _n, int &nb);
65 };
66
67 typedef  LBTopology* (*LBtopoFn)();
68
69 #else
70 typedef  void* (*LBtopoFn)();
71 #endif   /* __cplusplus */
72
73 #ifdef __cplusplus
74 extern "C" {
75 #endif
76 //void registerLBTopos();
77 LBtopoFn LBTopoLookup(char *);
78 //int getTopoMaxNeighbors(void *topo);
79 //void getTopoNeighbors(void *topo, int myid, int* na, int *n);
80 //void printoutTopo();
81 #ifdef __cplusplus
82 }
83 #endif
84
85 #endif