LRTS Comm Thread Tracing in message recieve
[charm.git] / src / libs / ck-libs / TMRC2D / old_pgm.C
blob6978848af4a431769e20b276c5073f4ca321558e
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "tri.h"
5 #include "pgm.h"
6 #include "Pgm.def.h"
8 main::main(CkArgMsg *m)
10   mesh = CProxy_chunk::ckNew();
12   CkGetChareID(&mainhandle);
13   CProxy_main M(mainhandle);
15   if (m->argc != 2)
16     CmiAbort("Usage: tri <meshfile>\n");
17   CkPrintf("Opening file %s...\n", m->argv[1]);
18   
19   readMesh(m->argv[1]);
20   M.performRefinements();
23 void main::readMesh(char *filename)
25   FILE *fp;
26   int numC, cid, numNodes, numEdges, numElements, i, j, k;
27   intMsg *im;
28   nodeMsg *nm;
29   edgeMsg *edm;
30   elementMsg *elm;
32   CkPrintf("Reading mesh from file %s... \n", filename);
33   fp = fopen(filename, "r");
34   fscanf(fp, "%d", &numC);
35   CkPrintf("%d chunk(s)...", numC);
36   
37   CkPrintf("\n ...Reading chunks...\n");
38   for (i=0; i<numC; i++) {
39     fscanf(fp, "%d", &cid);
40     fscanf(fp, "%d%d%d", &numNodes, &numEdges, &numElements);
41     CkPrintf("Chunk %d has %d nodes, %d edges, %d elements.\n", cid, 
42              numNodes, numEdges, numElements);
44     im = new intMsg;
45     im->anInt = numC;
46     mesh[cid].insert(im);
47     for (j=0; j<numNodes; j++) {
48       nm = new nodeMsg;
49       fscanf(fp, "%lf%lf", &nm->x, &nm->y);
50       mesh[cid].addNode(nm);
51     }
52     for (j=0; j<numEdges; j++) {
53       edm = new edgeMsg;
54       for (k=0; k<2; k++)
55         fscanf(fp, "%d%d", &edm->nodes[k].idx, &edm->nodes[k].cid);
56       for (k=0; k<2; k++)
57         fscanf(fp, "%d%d", &edm->elements[k].idx, &edm->elements[k].cid);
58       mesh[cid].addEdge(edm);
59     }
60     for (j=0; j<numElements; j++) {
61       elm = new elementMsg;
62       for (k=0; k<3; k++)
63         fscanf(fp, "%d%d", &elm->nodes[k].idx, &elm->nodes[k].cid);
64       for (k=0; k<3; k++)
65         fscanf(fp, "%d%d", &elm->edges[k].idx, &elm->edges[k].cid);
66       mesh[cid].addElement(elm);
67     }
68   }
69   mesh.doneInserting();
70   
71   fclose(fp);
72   CkPrintf("\nDone.\n");
75 void main::performRefinements()
77   refineMsg *rm = new refineMsg;
78   coarsenMsg *cm = new coarsenMsg;
79   doubleMsg *dm;
80   int i;
82   CkPrintf("Awaiting mesh construction completion...\n");
84   CkWaitQD();
85   mesh.deriveBorderNodes();
86   CkWaitQD();
88   CkPrintf("Printing start mesh... \n");
89   for (i=0; i<5; i++) 
90     mesh[i].print();
91   CkWaitQD();
92   CkPrintf("Beginning meshing around... \n");
94   /*
95   rm->idx = 0;
96   rm->area = 0.1;
97   mesh[0].refineElement(rm);
99   CkWaitQD();
100   CkPrintf("Printing mesh after 1st refine... \n");
101   for (i=0; i<5; i++) 
102     mesh[i].print();
103   CkWaitQD();
104   */
106   mesh[0].improve();
107   CkWaitQD();
108   CkPrintf("Printing mesh after improvement... \n");
109   for (i=0; i<5; i++) 
110     mesh[i].print();
111   CkWaitQD();
113   /*
114   rm = new refineMsg;
115   rm->idx = 145;
116   rm->area = 0.01;
117   mesh[0].refineElement(rm);
119   CkWaitQD();
120   CkPrintf("Printing mesh after 2nd refine... \n");
121   for (i=0; i<1; i++) 
122     mesh[i].print();
123   CkWaitQD();
125   rm = new refineMsg;
126   rm->idx = 6;
127   rm->area = 0.1;
128   mesh[0].refineElement(rm);
130   CkWaitQD();
131   CkPrintf("Printing mesh after 3rd refine... \n");
132   for (i=0; i<5; i++) 
133     mesh[i].print();
134   CkWaitQD();
136   dm = new doubleMsg;
137   dm->idx = 36;
138   dm->aDouble = 0.001;
139   mesh[0].setTargetArea(dm);
140   dm = new doubleMsg;
141   dm->idx = 6;
142   dm->aDouble = 0.001;
143   mesh[0].setTargetArea(dm);
145   rm = new refineMsg;
146   rm->idx = 53;
147   rm->area = 0.001;
148   mesh[0].refineElement(rm);
150   CkWaitQD();
151   CkPrintf("Printing mesh after 4th refine... \n");
152   for (i=0; i<5; i++) 
153     mesh[i].print();
154   CkWaitQD();
156   dm = new doubleMsg;
157   dm->idx = 557;
158   dm->aDouble = 0.001;
159   mesh[0].setTargetArea(dm);
160   dm = new doubleMsg;
161   dm->idx = 575;
162   dm->aDouble = 0.001;
163   mesh[0].setTargetArea(dm);
164   dm = new doubleMsg;
165   dm->idx = 417;
166   dm->aDouble = 0.001;
167   mesh[0].setTargetArea(dm);
168   dm = new doubleMsg;
169   dm->idx = 58;
170   dm->aDouble = 0.001;
171   mesh[0].setTargetArea(dm);
172   dm = new doubleMsg;
173   dm->idx = 377;
174   dm->aDouble = 0.001;
175   mesh[0].setTargetArea(dm);
177   rm = new refineMsg;
178   rm->idx = 378;
179   rm->area = 0.001;
180   mesh[0].refineElement(rm);
182   CkWaitQD();
183   CkPrintf("Printing mesh after 5th refine... \n");
184   for (i=0; i<5; i++) 
185     mesh[i].print();
186   CkWaitQD();
187   */
189   // Freshen the mesh first!
190   mesh.freshen();
191   CkWaitQD();
193   for (int p=0; p<200; p++) {
194     dm = new doubleMsg;
195     dm->idx = p;
196     dm->aDouble = 0.07;
197     mesh[0].resetTargetArea(dm);
198   }
200   cm->idx = 208;
201   cm->area = 0.07;
202   mesh[0].coarsenElement(cm);
204   CkWaitQD();
205   CkPrintf("Printing mesh after 1st coarsen... \n");
206   for (i=0; i<5; i++) 
207     mesh[i].print();
208   CkWaitQD();
210   /*
211   cm = new coarsenMsg;
212   cm->idx = 31;
213   cm->area = 1.99;
214   mesh[3].coarsenElement(cm);
216   CkWaitQD();
217   CkPrintf("Printing mesh after 2nd coarsen... \n");
218   for (i=0; i<5; i++) 
219     mesh[i].print();
220   CkWaitQD();
222   cm = new coarsenMsg;
223   cm->idx = 102;
224   cm->area = 5.0;
225   mesh[0].coarsenElement(cm);
227   CkWaitQD();
228   CkPrintf("Printing mesh after 6th coarsen... \n");
229   for (i=0; i<5; i++) 
230     mesh[i].print();
231   CkWaitQD();
233   cm = new coarsenMsg;
234   cm->idx = 104;
235   cm->area = 5.0;
236   mesh[0].coarsenElement(cm);
238   CkWaitQD();
239   CkPrintf("Printing mesh after 6th coarsen... \n");
240   for (i=0; i<5; i++) 
241     mesh[i].print();
242   CkWaitQD();
243   */
244   CkPrintf("Done meshing around... exiting.\n");
245   CkExit();