1 /* Primary interface for the Phasta Binary read and write routines these*/ 2 /* functions are 'C' callable.( All arguments have been kept as pointers to*/ 3 /* facilitate calling from Fortran )*/ 4 /* Anil Kumar Karanam Spring 2003*/ 5 #ifndef _PHASTAIO_H_ 6 #define _PHASTAIO_H_ 7 8 #include <FCMangle.h> 9 #include <mpi.h> 10 11 #ifdef intel 12 #define ios_base ios 13 #endif 14 15 #define queryphmpiio FortranCInterface_GLOBAL_(queryphmpiio,QUERYPHMPIIO) 16 #define initphmpiio FortranCInterface_GLOBAL_(initphmpiio,INITPHMPIIO) 17 #define initphmpiiosub FortranCInterface_GLOBAL_(initphmpiiosub,INITPHMPIIOSUB) 18 #define finalizephmpiio FortranCInterface_GLOBAL_(finalizephmpiio,FINALIZEPHMPIIO) 19 20 #define openfile FortranCInterface_GLOBAL_(openfile, OPENFILE) 21 #define closefile FortranCInterface_GLOBAL_(closefile, CLOSEFILE) 22 #define readheader FortranCInterface_GLOBAL_(readheader, READHEADER) 23 #define readdatablock FortranCInterface_GLOBAL_(readdatablock, READDATABLOCK) 24 #define writeheader FortranCInterface_GLOBAL_(writeheader, WRITEHEADER) 25 #define writedatablock FortranCInterface_GLOBAL_(writedatablock, WRITEDATABLOCK) 26 #define writestring FortranCInterface_GLOBAL_(writestring, WRITESTRING) 27 #define togglestrictmode FortranCInterface_GLOBAL_(togglestrictmode, TOGGLESTRICTMODE) 28 #define SwapArrayByteOrder FortranCInterface_GLOBAL_(swaparraybyteorder, SWAPARRAYBYTEORDER) 29 #define isLittleEndian FortranCInterface_GLOBAL_(islittleendian, ISLITTLEENDIAN) 30 31 32 #if defined (__cplusplus) 33 extern "C" { 34 #endif 35 36 void mem_alloc( void* p, char* type, int size ); 37 38 void 39 queryphmpiio( const char filename[], 40 int *nfields, 41 int *nppf ); 42 43 int 44 initphmpiio( int *nfields, 45 int *nppf, 46 int *nfiles, 47 int *filehandle, 48 const char mode[] ); 49 int 50 initphmpiiosub( int *nfields, 51 int *nppf, 52 int *nfiles, 53 int *filehandle, 54 const char mode[], 55 MPI_Comm my_local_comm ); 56 57 void 58 finalizephmpiio( int *fileDescriptor ); 59 60 void 61 SwapArrayByteOrder( void* array, 62 int nbytes, 63 int nItems ) ; 64 void 65 66 openfile( const char filename[], 67 const char mode[], 68 int* fileDescriptor ); 69 70 void 71 closefile( int* fileDescriptor, 72 const char mode[] ); 73 74 75 int 76 readHeader( FILE* fileObject, 77 const char phrase[], 78 int* params, 79 int numParams, 80 const char iotype[] ); 81 82 void 83 readheader( int* fileDescriptor, 84 const char keyphrase[], 85 void* valueArray, 86 int* nItems, 87 const char datatype[], 88 const char iotype[] ); 89 90 void 91 writeHeader( FILE* f, 92 const char keyphrase[], 93 const void* valueArray, 94 const int nItems, 95 const int ndataItems, 96 const char datatype[], 97 const char iotype[]); 98 99 void 100 writeheader( const int* fileDescriptor, 101 const char keyphrase[], 102 const void* valueArray, 103 const int* nItems, 104 const int* ndataItems, 105 const char datatype[], 106 const char iotype[] ); 107 108 void 109 readDataBlock( FILE* fileObject, 110 void* valueArray, 111 int nItems, 112 const char datatype[], 113 const char iotype[] ); 114 115 void 116 readdatablock( int* fileDescriptor, 117 const char keyphrase[], 118 void* valueArray, 119 int* nItems, 120 const char datatype[], 121 const char iotype[] ); 122 123 void 124 writeDataBlock( FILE* f, 125 const void* valueArray, 126 const int nItems, 127 const char datatype[], 128 const char iotype[] ); 129 130 void 131 writedatablock( const int* fileDescriptor, 132 const char keyphrase[], 133 const void* valueArray, 134 const int* nItems, 135 const char datatype[], 136 const char iotype[] ); 137 138 void 139 writestring( int* fileDescriptor, 140 const char inString[] ); 141 142 void 143 togglestrictmode( ); 144 145 int 146 isLittleEndian( ) ; 147 148 int computeColor( int myrank, int numprocs, int nfiles); 149 150 #ifdef __cplusplus 151 } /* end of extern "C".*/ 152 153 #include <string> 154 155 namespace PHASTA { 156 template<class T> 157 struct PhastaIO_traits; 158 159 template<> 160 struct PhastaIO_traits<int> { 161 static const char* const type_string; 162 }; 163 164 165 template<> 166 struct PhastaIO_traits<double> { 167 static const char* const type_string; 168 }; 169 170 171 template<class T> 172 void 173 write_data_block( const int fileDescriptor, 174 const std::string keyphrase, 175 const T* const valueArray, 176 const int nItems, 177 const bool inBinary = false) { 178 writedatablock(&fileDescriptor, 179 keyphrase.c_str(), 180 reinterpret_cast<const void*>(valueArray), 181 &nItems, 182 PhastaIO_traits<T>::type_string, 183 inBinary ? "binary" : "text"); 184 185 } 186 template<class T> 187 void 188 write_header( const int fileDescriptor, 189 const std::string& keyphrase, 190 const T* valueArray, 191 const int nItems, 192 const int nDataItems, 193 const bool inBinary = false) { 194 writeheader(&fileDescriptor, 195 keyphrase.c_str(), 196 reinterpret_cast<const void*>(valueArray), 197 &nItems, 198 &nDataItems, 199 PhastaIO_traits<T>::type_string, 200 inBinary ? "binary" : "text"); 201 } 202 203 204 } /* namespace PHASTA */ 205 206 #endif /* __cplusplus */ 207 208 #endif /* _PHASTAIO_H_ */ 209