13842625d58869568f809f5c544c24eec6d2912d
[charm.git] / examples / charm++ / jacobi2d-sdag / jacobi2d.ci
1 mainmodule jacobi2d {
2
3   readonly CProxy_Main mainProxy;
4   readonly int arrayDimX;
5   readonly int arrayDimY;
6   readonly int blockDimX;
7   readonly int blockDimY;
8
9   readonly int num_chare_x;
10   readonly int num_chare_y;
11
12   readonly int maxiterations;
13
14   mainchare Main {
15     entry Main(CkArgMsg *m);
16     entry void report(CkReductionMsg *m);
17     entry void done(CkReductionMsg *m);
18     entry void warmupIter(CkReductionMsg *m);
19   };
20
21   array [2D] Jacobi {
22     entry Jacobi(void);
23     entry void begin_iteration(void);
24     entry void receiveGhosts(int iter, int dir, int size,
25                              double ghosts[size]);
26
27     entry void doStep(CkCallback cb, int numSteps) {
28       atomic "begin_iteration" {
29         begin_iteration();
30       }
31       for(imsg = 0; imsg < numExpected; imsg++) {
32         // "iterations" keeps track of messages across steps
33         when
34           receiveGhosts[iterations] (int iter, int dir, int size,
35                                      double ghosts[size])
36           atomic "process ghosts" {
37             processGhosts(dir, size, ghosts);
38           }
39       }
40       atomic "doWork" {
41         check_and_compute(cb, numSteps);
42       }
43     };
44   };
45 };