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