ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/dp/read_new.c
Revision: 581
Committed: Wed Jul 9 15:14:05 2003 UTC (20 years, 11 months ago) by xsun
Content type: text/plain
File size: 6692 byte(s)
Log Message:
This is the dp and read file

File Contents

# Content
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #include<math.h>
5 #include<fftw.h>
6
7 int main()
8 {
9 FILE *inFile;
10 char *endptr, s[100000];
11 double *x, *y, *z;
12 double *mag, *newmag;
13 int *present_in_old;
14 double ux, uy, uz, p1;
15 double sumZ, sumUx, sumUy, sumUz, sumP;
16 double interpsum, value;
17 int ninterp, px, py, newp;
18 int i, j, nsites, nloops, xlat, ylat;
19 int newx, newy, newindex, index;
20 int new_i, new_j, new_index;
21 int N, nframes;
22
23 FFTW_COMPLEX *in, *out;
24 fftwnd_plan p;
25
26
27 inFile = fopen("./dp_file","r");
28 if (inFile == NULL) {
29 printf("Error opening file\n");
30 exit(-1);
31 }
32
33 fgets(s, 500, inFile);
34 nsites = atoi(s);
35 N = 2*nsites;
36 fscanf(inFile,"%s",s);
37 xlat=atoi(s);
38 fscanf(inFile,"%s",s);
39 ylat=atoi(s);
40
41 //sanity check:
42 if (2*nsites != xlat * ylat) {
43 printf("Lattice Mismatch: nsites = %d, xlat = %d, ylat = %d\n", nsites, xlat, ylat);
44 exit(-1);
45 }
46
47 rewind(inFile);
48
49 in = fftw_malloc(sizeof(FFTW_COMPLEX) * N);
50 out = fftw_malloc(sizeof(FFTW_COMPLEX) * N);
51 p = fftw2d_create_plan(xlat, ylat, FFTW_FORWARD, FFTW_ESTIMATE);
52
53 x = (double *) malloc(sizeof(double) * N);
54 y = (double *) malloc(sizeof(double) * N);
55 z = (double *) malloc(sizeof(double) * N);
56 mag = (double *) malloc(sizeof(double) * N);
57 newmag = (double *) malloc(sizeof(double) * N);
58 present_in_old = (int *) malloc(sizeof(int) * N);
59
60 for (i=0; i< xlat; i++) {
61 for(j=0; j< ylat; j++) {
62 newindex = i*ylat + j;
63 mag[newindex] = 0.0;
64 newmag[newindex] = 0.0;
65 }
66 }
67
68 sumZ = 0.0;
69 sumUx = 0.0;
70 sumUy = 0.0;
71 sumUz = 0.0;
72 sumP = 0.0;
73
74 nloops = 0;
75 nframes = 0;
76
77 while(!feof(inFile))
78 {
79 nframes++;
80 fgets(s, 500, inFile);
81 nsites = atoi(s);
82 fscanf(inFile,"%s",s);
83 xlat=atoi(s);
84 fscanf(inFile,"%s",s);
85 ylat=atoi(s);
86
87 //sanity check:
88 if (2*nsites != xlat * ylat) {
89 printf("Lattice Mismatch: nsites = %d, xlat = %d, ylat = %d\n", nsites, xlat, ylat);
90 exit(-1);
91 }
92
93 for (i = 0; i < N; i++ ) {
94 present_in_old[i] = 0;
95 }
96
97 for (i=0;i<xlat;i=i+2)
98 {
99 for(j=0;j<ylat;j++)
100 {
101
102 newy = j;
103 if ((j % 2) == 0) {
104 newx = i;
105 } else {
106 newx = i + 1;
107 }
108 newindex = newx*ylat + newy;
109
110 fscanf(inFile,"%s",s);
111 fscanf(inFile,"%s",s);
112 x[newindex]=strtod(s,&endptr);
113 fscanf(inFile,"%s",s);
114 y[newindex]=strtod(s,&endptr);
115 fscanf(inFile,"%s",s);
116 z[newindex] = strtod(s,&endptr);
117 present_in_old[newindex] = 1;
118 // printf("z=%f\t",z[newindex]);
119 fscanf(inFile,"%s",s);
120 fscanf(inFile,"%s",s);
121 ux=strtod(s,&endptr);
122 fscanf(inFile,"%s",s);
123 uy=strtod(s,&endptr);
124 fscanf(inFile,"%s",s);
125 uz=strtod(s,&endptr);
126 // p1 = uz * uz;
127 // sumZ = sumZ + z[i];
128 // sumUx = sumUx + ux;
129 // sumUy = sumUy + uy;
130 // sumUz = sumUz + uz;
131 // sumP = sumP + p1;
132 nloops += 1;
133 fgets(s, 500, inFile);
134 }
135 }
136
137 for (i=0; i< xlat; i++) {
138 for(j=0; j< ylat; j++) {
139 newindex = i*ylat + j;
140 if (present_in_old[newindex] == 0) {
141 // interpolate from surrounding points:
142
143 interpsum = 0.0;
144 ninterp = 0;
145
146 //point1 = bottom;
147
148 px = i - 1;
149 py = j;
150 newp = px*ylat + py;
151 if (px >= 0) {
152 interpsum += z[newp];
153 ninterp++;
154 y[newindex] = y[newp];
155 }
156
157 //point2 = top;
158
159 px = i + 1;
160 py = j;
161 newp = px*ylat + py;
162 if (px < xlat) {
163 interpsum += z[newp];
164 ninterp++;
165 y[newindex] = y[newp];
166 }
167
168 //point3 = left;
169
170 px = i;
171 py = j - 1;
172 newp = px*ylat + py;
173 if (py >= 0) {
174 interpsum += z[newp];
175 ninterp++;
176 x[newindex] = x[newp];
177
178 }
179
180 //point4 = right;
181
182 px = i;
183 py = j + 1;
184 newp = px*ylat + py;
185 if (py < ylat) {
186 interpsum += z[newp];
187 ninterp++;
188 x[newindex] = x[newp];
189 }
190
191
192 value = interpsum / (double)ninterp;
193
194 z[newindex] = value;
195
196 }
197 }
198 }
199
200 for (i=0; i < xlat; i++) {
201 for (j=0; j < ylat; j++) {
202 newindex = i*ylat + j;
203 c_re(in[newindex]) = z[newindex];
204 c_im(in[newindex]) = 0.0;
205 }
206 }
207
208 fftwnd(p, 1, in, 1, 0, out, 1, 0);
209 for (i=0; i< xlat; i++) {
210 for(j=0; j< ylat; j++) {
211 newindex = i*ylat + j;
212 mag[newindex] += sqrt(pow(c_re(out[newindex]),2) + pow(c_im(out[newindex]),2));
213 }
214 }
215
216 }
217
218 for (i=0; i< (xlat/2); i++) {
219 for(j=0; j< (ylat/2); j++) {
220 index = i*ylat + j;
221 new_i = i + (xlat/2);
222 new_j = j + (ylat/2);
223 new_index = new_i*ylat + new_j;
224 newmag[new_index] = mag[index];
225 }
226 }
227
228 for (i=(xlat/2); i< xlat; i++) {
229 for(j=0; j< (ylat/2); j++) {
230 index = i*ylat + j;
231 new_i = i - (xlat/2);
232 new_j = j + (ylat/2);
233 new_index = new_i*ylat + new_j;
234 newmag[new_index] = mag[index];
235 }
236 }
237
238 for (i=0; i< (xlat/2); i++) {
239 for(j=(ylat/2); j< ylat; j++) {
240 index = i*ylat + j;
241 new_i = i + (xlat/2);
242 new_j = j - (ylat/2);
243 new_index = new_i*ylat + new_j;
244 newmag[new_index] = mag[index];
245 }
246 }
247
248 for (i=(xlat/2); i< xlat; i++) {
249 for(j=(ylat/2); j< ylat; j++) {
250 index = i*ylat + j;
251 new_i = i - (xlat/2);
252 new_j = j - (ylat/2);
253 new_index = new_i*ylat + new_j;
254 newmag[new_index] = mag[index];
255 }
256 }
257
258 for (i=0; i< xlat; i++) {
259 for(j=0; j< ylat; j++) {
260 newindex = i*ylat + j;
261 printf("%lf\t", newmag[newindex]/(double)nframes);
262 }
263 printf("\n");
264 }
265
266 free(x);
267 free(y);
268 free(z);
269 free(mag);
270 free(newmag);
271 free(present_in_old);
272 fftwnd_destroy_plan(p);
273 fftw_free(in);
274 fftw_free(out);
275
276 return(0);
277 }
278
279 /* } */
280 /* for(i=0;i<120;i++) printf("%f\t%f\n", c_re(out[i]), c_im(out[i])); */
281 /* fftw_destroy_plan(p); */
282 /* fftw_free(in); */
283 /* fftw_free(out); */
284 /* averZ = sumZ / (double)nloops; */
285 /* averUx = sumUx / (double)nloops; */
286 /* averUy = sumUy / (double)nloops; */
287 /* averUz = sumUz / (double)nloops; */
288 /* averP = 1.5*sumP / (double)nloops-0.5; */
289 /* averTheta = acos(averUz); */
290 /* printf("nloops=%d\n",nloops); */
291 /* printf("sumZ=%f\n",sumZ); */
292 /* printf("average height is : %f\n",averZ); */
293 /* printf("average ux is : %f\n",averUx); */
294 /* printf("average uy is : %f\n",averUy); */
295 /* printf("average uz is : %f\n",averUz); */
296 /* printf("average angle is : %f\n",averTheta); */
297 /* printf("average p is : %f\n",averP); */
298
299 /* fclose(inFile); */
300 /* return 0; */
301 /* } */