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( const int* fileDescriptor, 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 readDataBlock( FILE* fileObject, 101 void* valueArray, 102 int nItems, 103 const char datatype[], 104 const char iotype[] ); 105 106 void 107 readdatablock( int* fileDescriptor, 108 const char keyphrase[], 109 void* valueArray, 110 int* nItems, 111 const char datatype[], 112 const char iotype[] ); 113 114 115 void 116 writedatablock( const int* fileDescriptor, 117 const char keyphrase[], 118 const void* valueArray, 119 const int* nItems, 120 const char datatype[], 121 const char iotype[] ); 122 123 void 124 writestring( int* fileDescriptor, 125 const char inString[] ); 126 127 void 128 togglestrictmode( ); 129 130 int 131 isLittleEndian( ) ; 132 133 int computeColor( int myrank, int numprocs, int nfiles); 134 135 #ifdef __cplusplus 136 } /* end of extern "C".*/ 137 138 #include <string> 139 140 namespace PHASTA { 141 template<class T> 142 struct PhastaIO_traits; 143 144 template<> 145 struct PhastaIO_traits<int> { 146 static const char* const type_string; 147 }; 148 149 150 template<> 151 struct PhastaIO_traits<double> { 152 static const char* const type_string; 153 }; 154 155 156 template<class T> 157 void 158 write_data_block( const int fileDescriptor, 159 const std::string keyphrase, 160 const T* const valueArray, 161 const int nItems, 162 const bool inBinary = false) { 163 writedatablock(&fileDescriptor, 164 keyphrase.c_str(), 165 reinterpret_cast<const void*>(valueArray), 166 &nItems, 167 PhastaIO_traits<T>::type_string, 168 inBinary ? "binary" : "text"); 169 170 } 171 template<class T> 172 void 173 write_header( const int fileDescriptor, 174 const std::string& keyphrase, 175 const T* valueArray, 176 const int nItems, 177 const int nDataItems, 178 const bool inBinary = false) { 179 writeheader(&fileDescriptor, 180 keyphrase.c_str(), 181 reinterpret_cast<const void*>(valueArray), 182 &nItems, 183 &nDataItems, 184 PhastaIO_traits<T>::type_string, 185 inBinary ? "binary" : "text"); 186 } 187 188 189 } /* namespace PHASTA */ 190 191 #endif /* __cplusplus */ 192 193 #endif /* _PHASTAIO_H_ */ 194