Merge branch 'charm' of charmgit:charm into charm
[charm.git] / examples / charm++ / Molecular / main.C
1 /*
2  University of Illinois at Urbana-Champaign
3  Department of Computer Science
4  Parallel Programming Lab
5  2008
6 */
7
8 #include "liveViz.h"
9 #include "common.h"
10 #include "main.decl.h"
11 #include "main.h"
12 #include "cell.decl.h"
13
14 /* readonly */ CProxy_Main mainProxy;
15 /* readonly */ CProxy_Cell cellArray;
16 /* readonly */ CProxy_Interaction interactionArray;
17
18 /* readonly */ int numParts;
19 /* readonly */ int m; // Number of Chare Rows
20 /* readonly */ int n; // Number of Chare Columns
21 /* readonly */ int L; 
22 /* readonly */ double radius;
23 /* readonly */ int finalStepCount; 
24
25 // Entry point of Charm++ application
26 Main::Main(CkArgMsg* msg) {
27   int i, j, k, l;  
28
29   numParts = DEFAULT_PARTICLES;
30   m = DEFAULT_M;
31   n = DEFAULT_N;
32   L = DEFAULT_L;
33   radius = DEFAULT_RADIUS;
34   finalStepCount = DEFAULT_FINALSTEPCOUNT;
35
36   delete msg;
37   checkInCount = 0;
38
39   mainProxy = thisProxy;
40
41   // initializing the cell 2D array
42   cellArray = CProxy_Cell::ckNew(m,n);
43
44   // initializing the interaction 4D array
45   interactionArray = CProxy_Interaction::ckNew();
46  
47   // For Round Robin insertion
48   int numPes = CkNumPes();
49   int currPE = -1;
50
51   for (int x = 0; x < m ; x++ ) {
52     for (int y = 0; y < n; y++ ) {
53
54       // self interaction
55       interactionArray( x, y, x, y ).insert( (currPE++) % numPes );
56
57       // (x,y) and (x+1,y) pair
58       (x == m-1) ? (i=0, k=x) : (i=x, k=x+1);
59       interactionArray( i, y, k, y ).insert( (currPE++) % numPes );
60
61       // (x,y) and (x,y+1) pair
62       (y == n-1) ? (j=0, l=y) : (j=y, l=y+1);
63       interactionArray( x, j, x, l ).insert( (currPE++) % numPes );
64
65       // (x,y) and (x+1,y+1) pair, Irrespective of y
66       (x == m-1) ? ( i=0, k=x, j=(y+1)%n, l=y ) : (i=x, k=x+1, j=y, l=(y+1)%n );
67       interactionArray( i, j, k, l ).insert( (currPE++) % numPes );
68
69       // (x,y) and (x-1,y+1) pair
70       (x == 0) ? ( i=x, k=(x-1+m)%m, j=y, l=(y+1)%n ) : (i=x-1, k=x, j=(y+1)%n, l=y );
71       interactionArray( i, j, k, l ).insert( (currPE++) % numPes );
72
73     }
74   }
75
76   interactionArray.doneInserting();
77
78   // setup liveviz
79   CkCallback c(CkIndex_Cell::requestNextFrame(0),cellArray);
80   liveVizConfig cfg(liveVizConfig::pix_color,true);
81   liveVizInit(cfg,cellArray,c);
82
83   sleep(1);
84   cellArray.start();
85 }
86
87 // Constructor for chare object migration
88 Main::Main(CkMigrateMessage* msg) { }
89
90 void Main::checkIn() {
91
92   checkInCount ++;
93   if( checkInCount >= m*n)
94     CkExit();
95
96 }
97
98
99 #include "main.def.h"