Merge branch 'charm' of charmgit:charm into charm
[charm.git] / examples / amr / jacobi2D / jacobi2DAMR.h
1 #include "amr.h"
2
3 class Jacobi2DAMR:public AmrUserData {
4  private:
5   int cellSize;
6   double **dataGrid;
7   double **newDataGrid;
8   void copyGrid(void);
9   void copyColumn(double *buf , int colNum) {
10     for(int i=1; i<=cellSize;i++)
11       buf[i-1] = dataGrid[i][colNum];   
12   }
13   
14   void copyRow(double *buf , int rowNum) {
15     for(int i=1; i<=cellSize;i++)
16       buf[i-1] = dataGrid[rowNum][i];   
17   }
18
19   void copyToColumn(double *buf , int colNum) {
20     for(int i=1; i<=cellSize;i++)
21       dataGrid[i][colNum]=  buf[i-1];   
22   }
23   
24   void copyToRow(double *buf , int rowNum) {
25     for(int i=1; i<=cellSize;i++)
26       dataGrid[rowNum][i]= buf[i-1];   
27   }
28   double sumofGrid(void) {
29     double sum = 0.0;
30     for(int i=1;i<cellSize+1;i++)
31       for(int j=1;j<cellSize+1;j++)
32         sum += dataGrid[i][j];
33     return sum;
34   }
35
36  public:
37   Jacobi2DAMR() {
38     cellSize = 64;
39     dataGrid = new double* [cellSize+2];
40     newDataGrid = new double* [cellSize+2];
41     for(int i=0;i< cellSize+2;i++) {
42       dataGrid[i] = new double [cellSize+2];
43       newDataGrid[i] = new double [cellSize +2];
44       for(int k = 0;  k < cellSize+2; k++) {
45         newDataGrid[i][k]=10.0;
46         dataGrid[i][k] = (i+k) *1.0;
47       }
48     }
49   }
50
51   Jacobi2DAMR(int size) {
52     cellSize = size;
53     dataGrid = new double* [cellSize+2];
54     newDataGrid = new double* [cellSize+2];
55     for(int i=0;i< cellSize+2;i++) {
56       dataGrid[i] = new double [cellSize+2];
57       newDataGrid[i] = new double [cellSize +2];
58       for(int k = 0; k < cellSize+2; k++) {
59         newDataGrid[i][k]= 10.0;
60         dataGrid[i][k] = (i+k) *1.0;
61       }
62     }
63   }
64   Jacobi2DAMR(void *data,int dataSize)
65   {
66     double *indata = (double*) data;
67     cellSize = (int) sqrt((double) (dataSize/sizeof(double)));
68     //    cellSize = cellSize/sizeof(double);
69     dataGrid = new double* [cellSize+2];
70     newDataGrid = new double* [cellSize+2];
71     for(int i=0;i< cellSize+2;i++) {
72       dataGrid[i] = new double [cellSize+2];
73       newDataGrid[i] = new double [cellSize +2];
74       for(int k = 0;  k < cellSize+2; k++) {
75         newDataGrid[i][k]= 10.0;
76         if(i== 0 || i == cellSize+1 || k==0 || k== cellSize + 1)
77           dataGrid[i][k] = (i+k) *1.0;
78         else
79           dataGrid[i][k] = indata[(i-1) * cellSize + (k-1)];
80       }
81     }
82   
83   }
84   virtual void doComputation(void);
85   virtual void **fragmentNborData(void* data, int* sizePtr);
86   virtual void **getNborMsgArray(int *sizeptr);
87   virtual void store(void* data, int dataSize, int neighborSide);
88   virtual void combineAndStore(void *data1, void *data2, int dataSize,int neighborSide);
89   virtual bool refineCriterion(void);
90   virtual void **fragmentForRefine(int *sizePtr);
91   ~Jacobi2DAMR() {
92     delete newDataGrid;
93     delete dataGrid;
94   }
95 };
96
97 class main : public Chare {
98  public:
99   main(CkArgMsg* args) {
100     CProxy_AmrCoordinator::ckNew( new _DMsg);
101   }
102 };