xref: /phasta/M2N/src/setsyncioparam.cc (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen #include <fstream>
2*59599516SKenneth E. Jansen #include <stdio.h>
3*59599516SKenneth E. Jansen #include <stdlib.h>
4*59599516SKenneth E. Jansen #include <vector>
5*59599516SKenneth E. Jansen #include <string.h>
6*59599516SKenneth E. Jansen #include <cstring>
7*59599516SKenneth E. Jansen #include <sys/types.h>
8*59599516SKenneth E. Jansen #include <dirent.h> // For opendir(),readdir(),...
9*59599516SKenneth E. Jansen #include <mpi.h>
10*59599516SKenneth E. Jansen #include "phastaIO.h"
11*59599516SKenneth E. Jansen 
12*59599516SKenneth E. Jansen //#include "../include/Input.h"
13*59599516SKenneth E. Jansen #include "commonM2N_c.h"
14*59599516SKenneth E. Jansen #include "setsyncioparamM2N.h"
15*59599516SKenneth E. Jansen 
16*59599516SKenneth E. Jansen 
17*59599516SKenneth E. Jansen using namespace std; //useful for ifstream. Other solution is std::ifstream
18*59599516SKenneth E. Jansen 
19*59599516SKenneth E. Jansen // extern void queryphmpiio_(const char[], int*, int*);
20*59599516SKenneth E. Jansen // void queryphmpiio_(const char filename[],int *nfields, int *nppf)
21*59599516SKenneth E. Jansen 
setIOparam()22*59599516SKenneth E. Jansen void setIOparam()
23*59599516SKenneth E. Jansen {
24*59599516SKenneth E. Jansen   int count;
25*59599516SKenneth E. Jansen   int countRed;
26*59599516SKenneth E. Jansen   int nfields;
27*59599516SKenneth E. Jansen   int nppf;
28*59599516SKenneth E. Jansen   int stepno;
29*59599516SKenneth E. Jansen   int part;
30*59599516SKenneth E. Jansen   char fname[255];
31*59599516SKenneth E. Jansen   DIR *d;
32*59599516SKenneth E. Jansen   struct dirent *filename;
33*59599516SKenneth E. Jansen 
34*59599516SKenneth E. Jansen 
35*59599516SKenneth E. Jansen //Number of geombc files
36*59599516SKenneth E. Jansen   if(workfc.myrank == 0){
37*59599516SKenneth E. Jansen     if( (d = opendir(".")) != NULL) {
38*59599516SKenneth E. Jansen       count=0;
39*59599516SKenneth E. Jansen       countRed=0;
40*59599516SKenneth E. Jansen       while(filename=readdir(d)) {
41*59599516SKenneth E. Jansen         //printf("%s\n", filename->d_name);
42*59599516SKenneth E. Jansen         if(strncmp(filename->d_name,"geombc-dat",10)==0) {
43*59599516SKenneth E. Jansen           count=count+1;
44*59599516SKenneth E. Jansen         }
45*59599516SKenneth E. Jansen         if(strncmp(filename->d_name,"geombcRed-dat",13)==0) {
46*59599516SKenneth E. Jansen           countRed=countRed+1;
47*59599516SKenneth E. Jansen         }
48*59599516SKenneth E. Jansen       }
49*59599516SKenneth E. Jansen       closedir(d);
50*59599516SKenneth E. Jansen 
51*59599516SKenneth E. Jansen       // Sanity check
52*59599516SKenneth E. Jansen       if (count == 0) {
53*59599516SKenneth E. Jansen         printf("ERROR: Could not find any geombc-dat file in the directory\n");
54*59599516SKenneth E. Jansen       }
55*59599516SKenneth E. Jansen       if (countRed == 0) {
56*59599516SKenneth E. Jansen         printf("WARNING: Could not find any geombcRed-dat file in the directory\n");
57*59599516SKenneth E. Jansen         printf("Either you are reducing down to 1 part (geombcRed not needed) or links are missing\n");
58*59599516SKenneth E. Jansen         printf("Number of output SyncIO files will be set to either 1 or to the number of input SyncIO files read by M2N accordingly\n");
59*59599516SKenneth E. Jansen       }
60*59599516SKenneth E. Jansen 
61*59599516SKenneth E. Jansen     }
62*59599516SKenneth E. Jansen     else {
63*59599516SKenneth E. Jansen       printf("ERROR when counting geombc-dat\n");
64*59599516SKenneth E. Jansen     }
65*59599516SKenneth E. Jansen   }
66*59599516SKenneth E. Jansen 
67*59599516SKenneth E. Jansen   MPI_Bcast( &count, 1, MPI_INT, 0, MPI_COMM_WORLD );
68*59599516SKenneth E. Jansen   MPI_Bcast( &countRed, 1, MPI_INT, 0, MPI_COMM_WORLD );
69*59599516SKenneth E. Jansen   //printf("Here we gogo: %d %d\n",workfc.myrank,count);
70*59599516SKenneth E. Jansen 
71*59599516SKenneth E. Jansen   outpar.nsynciofiles = count;
72*59599516SKenneth E. Jansen   outpar.nsynciofilesred = countRed;
73*59599516SKenneth E. Jansen   if(workfc.myrank == 0) {
74*59599516SKenneth E. Jansen     printf("Number of geombc-dat and restart-dat files to read: %d\n", count);
75*59599516SKenneth E. Jansen     printf("Number of geombcRed-dat and restartRed-dat files to read: %d\n", countRed);
76*59599516SKenneth E. Jansen   }
77*59599516SKenneth E. Jansen 
78*59599516SKenneth E. Jansen }
79*59599516SKenneth E. Jansen 
detectd2wallfiles(int * numd2wallfiles)80*59599516SKenneth E. Jansen void detectd2wallfiles(int* numd2wallfiles)
81*59599516SKenneth E. Jansen {
82*59599516SKenneth E. Jansen   int count;
83*59599516SKenneth E. Jansen   int nfields;
84*59599516SKenneth E. Jansen   int nppf;
85*59599516SKenneth E. Jansen   int stepno;
86*59599516SKenneth E. Jansen   int part;
87*59599516SKenneth E. Jansen   char fname[255];
88*59599516SKenneth E. Jansen   DIR *d;
89*59599516SKenneth E. Jansen   struct dirent *filename;
90*59599516SKenneth E. Jansen 
91*59599516SKenneth E. Jansen //Number of d2wall files
92*59599516SKenneth E. Jansen   if(workfc.myrank == 0){
93*59599516SKenneth E. Jansen     if( (d = opendir(".")) != NULL) {
94*59599516SKenneth E. Jansen       count=0;
95*59599516SKenneth E. Jansen       while(filename=readdir(d)) {
96*59599516SKenneth E. Jansen         //printf("%s\n", filename->d_name);
97*59599516SKenneth E. Jansen         if(strncmp(filename->d_name,"d2wall",6)==0) {
98*59599516SKenneth E. Jansen           count=count+1;
99*59599516SKenneth E. Jansen         }
100*59599516SKenneth E. Jansen       }
101*59599516SKenneth E. Jansen       closedir(d);
102*59599516SKenneth E. Jansen     }
103*59599516SKenneth E. Jansen   }
104*59599516SKenneth E. Jansen 
105*59599516SKenneth E. Jansen   MPI_Bcast( &count, 1, MPI_INT, 0, MPI_COMM_WORLD );
106*59599516SKenneth E. Jansen   //printf("Here we gogo: %d %d\n",workfc.myrank,count);
107*59599516SKenneth E. Jansen 
108*59599516SKenneth E. Jansen   *numd2wallfiles = count;
109*59599516SKenneth E. Jansen   if(workfc.myrank == 0) {
110*59599516SKenneth E. Jansen     printf("Number of d2wall files present in the proc_case directory: %d\n", count);
111*59599516SKenneth E. Jansen   }
112*59599516SKenneth E. Jansen 
113*59599516SKenneth E. Jansen }
114*59599516SKenneth E. Jansen 
115*59599516SKenneth E. Jansen 
116*59599516SKenneth E. Jansen // void countfieldstowriterestart() //See new_interface.c
117