Adding leanmd simplified as an example
[charm.git] / examples / charm++ / RedExample / RedExample.h
1 //! main char object.  Creates array, handles command line, catches reduction.
2
3 class main : public Chare
4 {
5 private:
6   CProxy_RedExample arr;
7 public:
8
9   main(CkArgMsg* m);
10
11   //! catches the completed reduction results.
12   void reportIn(CkReductionMsg *msg)
13   {
14     int reducedArrSize=msg->getSize()/sizeof(double);
15     double *output=(double *)msg->getData();
16     CkPrintf("Sum :");
17     for(int i=0;i<reducedArrSize;i++)
18       CkPrintf("%f ",output[i]);
19     CkPrintf("\n");
20     delete msg;
21     done();
22   }
23
24   //! placeholder for a more interesting completion function
25   void done()
26   {
27     CkPrintf("All done \n");
28     CkExit();
29   }
30
31 };
32
33
34 //! RedExample. A small example which does nothing useful, but provides an extremely simple, yet complete, use of a normal reduction case.
35 /** The reduction performs a summation i+k1 i+k2 for i=0 to units
36  */
37 class RedExample : public CBase_RedExample
38 {
39  private:
40   float myfloats[2];
41
42  public:
43
44   RedExample()   {   }
45
46   RedExample(CkMigrateMessage *m) {};
47
48   //! print our copy of the values.
49   void dump()
50     {
51       CkPrintf("thisIndex %d %f %f\n",thisIndex,myfloats[0],myfloats[1]); 
52     }
53
54
55   //! add our index to the global floats and contribute the result.
56   void dowork ()
57     {
58       double outdoubles[2];
59       myfloats[0]=outdoubles[0]=   dOne +(double) thisIndex;
60       myfloats[1]=outdoubles[1]= dTwo +(double) thisIndex;
61       contribute(2*sizeof(double),outdoubles,CkReduction::sum_double); 
62       dump();
63     }
64 };
65