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