Merge branch 'charm' of charmgit:charm into charm
[charm.git] / examples / amr / cfd / cfdAMR.h
1
2 #include "amr.h"
3 #include "GreedyCommLB.h"
4 #include "GreedyLB.h"
5 #include "RefineLB.h"
6 #include "cfd.h"
7
8 #define LB_FREQUENCY 15
9
10 class CfdProblem:public AmrUserData {
11  private:
12   int gridW, gridH;
13   CfdGrid *grid;
14    
15   //Split physics
16   int stepCount;
17  public:
18   CfdProblem() {
19     stepCount =0;
20     Properties* properties = initParam();
21     
22     grid=new CfdGrid(gridW,gridH,properties);
23     initGrid();
24   }
25
26   CfdProblem(void* data, int dataSize) {
27     
28     Properties* properties = initParam();
29     grid=new CfdGrid(gridW,gridH,properties);
30     stepCount = readParentGrid(data, dataSize);
31   }
32   
33   void init() {
34     initBoundary();
35     if(stepCount == 0)
36       createInitialPressure();
37   }
38   
39   void createInitialPressure() {
40     if (myIndex.vec[0] == 0 && myIndex.vec[1] == 0 ) {
41       for (int y=0;y<gridH;y++)
42         for (int x=0;x<gridW;x++) 
43           grid->at(x,y)->P+=20.0e3;
44     }
45   }
46   Properties* initParam();
47   void initGrid();
48   void initBoundary();
49   int readParentGrid(void* data, int dataSize);
50   void startStep();
51   void finishStep(bool resample);
52   void setBoundaries();
53   
54   CfdProblem(CkMigrateMessage *m): AmrUserData(m){}
55   PUPable_decl(CfdProblem);
56   virtual void doComputation(void);
57   virtual void **fragmentNborData(void* data, int* sizePtr);
58   virtual void **getNborMsgArray(int *sizeptr);
59   virtual void store(void* data, int dataSize, int neighborSide);
60   virtual void combineAndStore(void **dataArray, int dataSize,int neighborSide);
61   virtual bool refineCriterion(void);
62   virtual void **fragmentForRefine(int *sizePtr);
63   virtual void pup(PUP::er &p);
64   ~CfdProblem() {
65     delete grid;
66   }
67 };
68
69
70
71
72 class main : public Chare {
73  public:
74   main(CkArgMsg* args) {
75
76     StartUpMsg *msg;
77     msg = new StartUpMsg;
78     msg->synchInterval = 100;
79     msg->depth = 4;
80     msg->dimension = 2;
81     msg->totalIterations = 399;
82     msg->statCollection = 0;
83     //CreateCommLB();
84     //CreateHeapCentLB();
85     CreateRefineLB();
86     CProxy_AmrCoordinator::ckNew(msg,0);
87
88   }
89 };