xref: /phasta/phSolver/common/test/phIOwriteFields.cc (revision f1d1f61e405b798d5593c4667f7bad07c38c1244)
1*f1d1f61eSPranav Subramanian #include <mpi.h>
2*f1d1f61eSPranav Subramanian #include <stdio.h>
3*f1d1f61eSPranav Subramanian #include <stdlib.h>
4*f1d1f61eSPranav Subramanian #include <unistd.h>
5*f1d1f61eSPranav Subramanian #include <cassert>
6*f1d1f61eSPranav Subramanian #include "phiostats.h"
7*f1d1f61eSPranav Subramanian #include "phIO.h"
8*f1d1f61eSPranav Subramanian #include "phstream.h" //for makeRStream and makeGRStream
9*f1d1f61eSPranav Subramanian #include "syncio.h"
10*f1d1f61eSPranav Subramanian #include "posixio.h"
11*f1d1f61eSPranav Subramanian #include "streamio.h"
12*f1d1f61eSPranav Subramanian 
13*f1d1f61eSPranav Subramanian int main(int argc, char* argv[]) {
14*f1d1f61eSPranav Subramanian   MPI_Init(&argc,&argv);
15*f1d1f61eSPranav Subramanian   int rank;
16*f1d1f61eSPranav Subramanian   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
17*f1d1f61eSPranav Subramanian   int size;
18*f1d1f61eSPranav Subramanian   MPI_Comm_size(MPI_COMM_WORLD, &size);
19*f1d1f61eSPranav Subramanian   if( argc != 2 ) {
20*f1d1f61eSPranav Subramanian     fprintf(stderr, "Usage: %s <numSyncFiles>\n",argv[0]);
21*f1d1f61eSPranav Subramanian     MPI_Finalize();
22*f1d1f61eSPranav Subramanian     return 1;
23*f1d1f61eSPranav Subramanian   }
24*f1d1f61eSPranav Subramanian   const char* phrase = "number of fishes";
25*f1d1f61eSPranav Subramanian   const char* type = "double";
26*f1d1f61eSPranav Subramanian   const char* iotype = "binary";
27*f1d1f61eSPranav Subramanian   int zero = 0;
28*f1d1f61eSPranav Subramanian   int one = 1;
29*f1d1f61eSPranav Subramanian   int numFish = 0;
30*f1d1f61eSPranav Subramanian   double fishWeight = 1.23;
31*f1d1f61eSPranav Subramanian   int nfiles = atoi(argv[1]);
32*f1d1f61eSPranav Subramanian   int ppf = size/nfiles;
33*f1d1f61eSPranav Subramanian   const char* filename[2] = {"water-dat.", "water.dat."};
34*f1d1f61eSPranav Subramanian   rstream rs = makeRStream();
35*f1d1f61eSPranav Subramanian   phio_fp file[3];
36*f1d1f61eSPranav Subramanian   const char* modes[3]={"syncio", "posixio", "streamio"};
37*f1d1f61eSPranav Subramanian   syncio_setup_write(nfiles, one, ppf, &(file[0]));
38*f1d1f61eSPranav Subramanian   posixio_setup(&(file[1]), 'w');
39*f1d1f61eSPranav Subramanian   streamio_setup_r(&(file[2]), rs, 'w');
40*f1d1f61eSPranav Subramanian   for(int i=0; i<3; i++) {
41*f1d1f61eSPranav Subramanian     if(!rank) fprintf(stderr, "%s\n", modes[i]);
42*f1d1f61eSPranav Subramanian     phastaio_initStats();
43*f1d1f61eSPranav Subramanian     phio_openfile(filename[i], file[i]);
44*f1d1f61eSPranav Subramanian     phio_writeheader(file[i], phrase, &zero, &one, &zero, type, iotype);
45*f1d1f61eSPranav Subramanian     phio_writedatablock(file[i], phrase, &fishWeight, &zero, type, iotype);
46*f1d1f61eSPranav Subramanian     phio_closefile(file[i]);
47*f1d1f61eSPranav Subramanian     phastaio_printStats();
48*f1d1f61eSPranav Subramanian   }
49*f1d1f61eSPranav Subramanian   syncio_setup_read(nfiles, &(file[0]));
50*f1d1f61eSPranav Subramanian   posixio_setup(&(file[1]), 'r');
51*f1d1f61eSPranav Subramanian   streamio_setup_r(&(file[2]), rs, 'r');
52*f1d1f61eSPranav Subramanian   for(int i=0; i<3; i++) {
53*f1d1f61eSPranav Subramanian     if(!rank) fprintf(stderr, "%s\n", modes[i]);
54*f1d1f61eSPranav Subramanian     phastaio_initStats();
55*f1d1f61eSPranav Subramanian     phio_openfile(filename[i], file[i]);
56*f1d1f61eSPranav Subramanian     phio_readheader(file[i], phrase, &numFish, &one, type, iotype);
57*f1d1f61eSPranav Subramanian     assert(!numFish);
58*f1d1f61eSPranav Subramanian     phio_readdatablock(file[i], phrase, &fishWeight, &numFish, type, iotype);
59*f1d1f61eSPranav Subramanian     assert(fishWeight == 1.23);
60*f1d1f61eSPranav Subramanian     phio_closefile(file[i]);
61*f1d1f61eSPranav Subramanian     phastaio_printStats();
62*f1d1f61eSPranav Subramanian   }
63*f1d1f61eSPranav Subramanian   MPI_Finalize();
64*f1d1f61eSPranav Subramanian   return 0;
65*f1d1f61eSPranav Subramanian }
66