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