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