Example charm++/matmul: simplify logic for when to pass blocks
[charm.git] / examples / charm++ / Molecular2D / Patch.h
1 /** \file Patch.h
2  *  Author: Abhinav S Bhatele
3  *  Date Created: July 1st, 2008
4  *
5  */
6
7
8 #ifndef __PATCH_H__
9 #define __PATCH_H__
10
11 /** \class Main
12  *
13  */
14 class Main : public CBase_Main {
15   public:
16     Main(CkArgMsg* msg);
17     Main(CkMigrateMessage* msg);
18
19     void allDone();
20     void computeCreationDone();
21 };
22
23 /** \class Patch
24  *  Class representing a cell in the grid. 
25  *  We consider each cell as a square of LxL units
26  */
27 class Patch : public CBase_Patch {
28   private:
29     CkVec<Particle> particles;
30     CkVec<Particle> incomingParticles;
31     int forceCount;             // to count the returns from interactions
32     int stepCount;              // to count the number of steps, and decide when to stop
33     int updateCount;
34     bool updateFlag;
35     bool incomingFlag;
36     int computesList[NUM_NEIGHBORS][4];
37
38     void migrateToPatch(Particle p, int &px, int &py);
39     void updateProperties();    // updates properties after receiving forces from computes
40     void checkNextStep();       // checks whether to continue with next step
41     void print();               // prints all its particles
42
43   public:
44     Patch();
45     Patch(CkMigrateMessage *msg);
46     ~Patch();
47
48     void start();
49     void createComputes();
50     void updateParticles(CkVec<Particle> &);
51     void updateForces(CkVec<Particle> &);
52     void limitVelocity(Particle &p);
53     Particle& wrapAround(Particle &p);
54 #ifdef RUN_LIVEVIZ
55     void requestNextFrame(liveVizRequestMsg *m);
56 #endif
57 };
58
59 #endif