Enable node-queue when using multicore build
[charm.git] / examples / charm++ / jacobi3d-sdag-constrain / jacobi3d.ci
1 mainmodule jacobi3d {
2   readonly CProxy_Main mainProxy;
3   readonly int arrayDimX;
4   readonly int arrayDimY;
5   readonly int arrayDimZ;
6   readonly int blockDimX;
7   readonly int blockDimY;
8   readonly int blockDimZ;
9   readonly int num_chare_x;
10   readonly int num_chare_y;
11   readonly int num_chare_z;
12   readonly int max_iter;
13
14   mainchare Main {
15     entry Main(CkArgMsg *m);
16     entry [reductiontarget] void doneConverge(int);
17     entry [reductiontarget] void doneIter(double);
18   };
19
20   array [3D] Jacobi {
21     entry Jacobi(void);
22     entry void updateGhosts(int ref, int dir, int w, int h, double gh[w*h]);
23     entry [reductiontarget] void checkConverged(double e);
24     entry void run() {
25       while (iterations < max_iter && !converged) {
26         atomic { begin_iteration(); }
27         for (remoteCount = 0; remoteCount < neighbors; remoteCount++) {
28           when updateGhosts[iterations](int ref, int dir, int w, int h, double buf[w*h]) atomic {
29             updateBoundary(dir, w, h, buf);
30           }
31         }
32         atomic {
33           error = computeKernel();
34           //CkPrintf(" error   %d %d %d  is %f\n", thisIndex.x, thisIndex.y, thisIndex.z, error);
35           iterations++;
36           contribute(sizeof(double), &error, CkReduction::max_double, CkCallback(CkReductionTarget(Jacobi, checkConverged), thisProxy));
37         }
38         when checkConverged(double maxerror)
39         {
40             if (maxerror<DELTA) atomic{ converged = true; contribute(sizeof(int), &iterations, CkReduction::nop, CkCallback((CkReductionTarget(Main, doneConverge)), mainProxy)); }
41         }
42       }
43       if(iterations >= max_iter)
44           atomic { contribute(sizeof(double), &error, CkReduction::max_double, CkCallback((CkReductionTarget(Main, doneIter)), mainProxy));}
45
46     };
47   };
48 };