1 #include <mpi.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include "phIO.h"
6 #include "syncio.h"
7 #include "posixio.h"
8
main(int argc,char * argv[])9 int main(int argc, char* argv[]) {
10 MPI_Init(&argc,&argv);
11 int rank;
12 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
13 if( argc != 2 ) {
14 fprintf(stderr, "Usage: %s <numSyncFiles>\n",argv[0]);
15 MPI_Finalize();
16 return 1;
17 }
18 int nfiles = atoi(argv[1]);
19 const char* phrase = "co-ordinates";
20 const char* type = "double";
21 const char* iotype = "binary";
22 const char* dir[2] = {"4-procs_case-SyncIO-2_ref", "4-procs_case-Posix_ref"};
23 const char* filename[2] = {"geombc-dat.", "geombc.dat."};
24 double* coords[2] = {NULL, NULL};
25 int len[2] = {0, 0};
26 int numpts[2];
27 phio_fp file[2];
28 syncio_setup_read(nfiles, &(file[0]));
29 posixio_setup(&(file[1]), 'r');
30 int two = 2;
31 for(int i=0; i<2; i++) {
32 chdir(dir[i]);
33 MPI_Barrier(MPI_COMM_WORLD);
34 phio_openfile(filename[i], file[i]);
35 phio_readheader(file[i], phrase, numpts, &two, type, iotype);
36 len[i] = numpts[0]*3; //numPts * 3 dimensions
37 fprintf(stderr, "%d %s len %d\n", rank, __func__, len[i]);
38 coords[i] = (double*) malloc(len[i]*sizeof(double));
39 phio_readdatablock(file[i], phrase, coords[i], &(len[i]), type, iotype);
40 phio_closefile(file[i]);
41 chdir("..");
42 MPI_Barrier(MPI_COMM_WORLD);
43 if(!rank)
44 fprintf(stderr, "-------------------\n");
45 }
46 int match = (len[0] == len[1]);
47 if(!rank && match)
48 fprintf(stderr, "number of points match!\n");
49 if(!rank && !match) {
50 fprintf(stderr, "number of points don't match... :(\n");
51 return 1;
52 }
53
54 match = true;
55 for(int i=0; i<len[0]; i++)
56 match = match && ( coords[0][i] == coords[1][i] );
57
58 if(!rank && match)
59 fprintf(stderr, "points match!\n");
60 if(!rank && !match) {
61 fprintf(stderr, "points don't match... :(\n");
62 return 1;
63 }
64
65 for(int i=0; i<2; i++)
66 free(coords[i]);
67
68 MPI_Finalize();
69 return !match;
70 }
71