159599516SKenneth E. Jansen /* Primary interface for the Phasta Binary read and write routines these*/ 259599516SKenneth E. Jansen /* functions are 'C' callable.( All arguments have been kept as pointers to*/ 359599516SKenneth E. Jansen /* facilitate calling from Fortran )*/ 459599516SKenneth E. Jansen /* Anil Kumar Karanam Spring 2003*/ 559599516SKenneth E. Jansen #ifndef _PHASTAIO_H_ 659599516SKenneth E. Jansen #define _PHASTAIO_H_ 759599516SKenneth E. Jansen 859599516SKenneth E. Jansen #include <FCMangle.h> 959599516SKenneth E. Jansen #include <mpi.h> 1059599516SKenneth E. Jansen 1159599516SKenneth E. Jansen #ifdef intel 1259599516SKenneth E. Jansen #define ios_base ios 1359599516SKenneth E. Jansen #endif 1459599516SKenneth E. Jansen 1559599516SKenneth E. Jansen #define queryphmpiio FortranCInterface_GLOBAL_(queryphmpiio,QUERYPHMPIIO) 1659599516SKenneth E. Jansen #define initphmpiio FortranCInterface_GLOBAL_(initphmpiio,INITPHMPIIO) 1759599516SKenneth E. Jansen #define initphmpiiosub FortranCInterface_GLOBAL_(initphmpiiosub,INITPHMPIIOSUB) 1859599516SKenneth E. Jansen #define finalizephmpiio FortranCInterface_GLOBAL_(finalizephmpiio,FINALIZEPHMPIIO) 1959599516SKenneth E. Jansen 2059599516SKenneth E. Jansen #define openfile FortranCInterface_GLOBAL_(openfile, OPENFILE) 2159599516SKenneth E. Jansen #define closefile FortranCInterface_GLOBAL_(closefile, CLOSEFILE) 2259599516SKenneth E. Jansen #define readheader FortranCInterface_GLOBAL_(readheader, READHEADER) 2359599516SKenneth E. Jansen #define readdatablock FortranCInterface_GLOBAL_(readdatablock, READDATABLOCK) 2459599516SKenneth E. Jansen #define writeheader FortranCInterface_GLOBAL_(writeheader, WRITEHEADER) 2559599516SKenneth E. Jansen #define writedatablock FortranCInterface_GLOBAL_(writedatablock, WRITEDATABLOCK) 2659599516SKenneth E. Jansen #define writestring FortranCInterface_GLOBAL_(writestring, WRITESTRING) 2759599516SKenneth E. Jansen #define togglestrictmode FortranCInterface_GLOBAL_(togglestrictmode, TOGGLESTRICTMODE) 2859599516SKenneth E. Jansen #define SwapArrayByteOrder FortranCInterface_GLOBAL_(swaparraybyteorder, SWAPARRAYBYTEORDER) 2959599516SKenneth E. Jansen #define isLittleEndian FortranCInterface_GLOBAL_(islittleendian, ISLITTLEENDIAN) 3059599516SKenneth E. Jansen 3159599516SKenneth E. Jansen 3259599516SKenneth E. Jansen #if defined (__cplusplus) 3359599516SKenneth E. Jansen extern "C" { 3459599516SKenneth E. Jansen #endif 3559599516SKenneth E. Jansen 3659599516SKenneth E. Jansen void mem_alloc( void* p, char* type, int size ); 3759599516SKenneth E. Jansen 3859599516SKenneth E. Jansen void 3959599516SKenneth E. Jansen queryphmpiio( const char filename[], 4059599516SKenneth E. Jansen int *nfields, 4159599516SKenneth E. Jansen int *nppf ); 4259599516SKenneth E. Jansen 4359599516SKenneth E. Jansen int 4459599516SKenneth E. Jansen initphmpiio( int *nfields, 4559599516SKenneth E. Jansen int *nppf, 4659599516SKenneth E. Jansen int *nfiles, 4759599516SKenneth E. Jansen int *filehandle, 4859599516SKenneth E. Jansen const char mode[] ); 4959599516SKenneth E. Jansen int 5059599516SKenneth E. Jansen initphmpiiosub( int *nfields, 5159599516SKenneth E. Jansen int *nppf, 5259599516SKenneth E. Jansen int *nfiles, 5359599516SKenneth E. Jansen int *filehandle, 5459599516SKenneth E. Jansen const char mode[], 5559599516SKenneth E. Jansen MPI_Comm my_local_comm ); 5659599516SKenneth E. Jansen 5759599516SKenneth E. Jansen void 5859599516SKenneth E. Jansen finalizephmpiio( int *fileDescriptor ); 5959599516SKenneth E. Jansen 6059599516SKenneth E. Jansen void 6159599516SKenneth E. Jansen SwapArrayByteOrder( void* array, 6259599516SKenneth E. Jansen int nbytes, 6359599516SKenneth E. Jansen int nItems ) ; 6459599516SKenneth E. Jansen void 6559599516SKenneth E. Jansen 6659599516SKenneth E. Jansen openfile( const char filename[], 6759599516SKenneth E. Jansen const char mode[], 6859599516SKenneth E. Jansen int* fileDescriptor ); 6959599516SKenneth E. Jansen 7059599516SKenneth E. Jansen void 7159599516SKenneth E. Jansen closefile( int* fileDescriptor, 7259599516SKenneth E. Jansen const char mode[] ); 7359599516SKenneth E. Jansen 74*3872e963SCameron Smith 75*3872e963SCameron Smith int 76*3872e963SCameron Smith readHeader( FILE* fileObject, 77*3872e963SCameron Smith const char phrase[], 78*3872e963SCameron Smith int* params, 79*3872e963SCameron Smith int numParams, 80*3872e963SCameron Smith const char iotype[] ); 81*3872e963SCameron Smith 8259599516SKenneth E. Jansen void 8359599516SKenneth E. Jansen readheader( int* fileDescriptor, 8459599516SKenneth E. Jansen const char keyphrase[], 8559599516SKenneth E. Jansen void* valueArray, 8659599516SKenneth E. Jansen int* nItems, 8759599516SKenneth E. Jansen const char datatype[], 8859599516SKenneth E. Jansen const char iotype[] ); 8959599516SKenneth E. Jansen 9059599516SKenneth E. Jansen void 9159599516SKenneth E. Jansen writeheader( const int* fileDescriptor, 9259599516SKenneth E. Jansen const char keyphrase[], 9359599516SKenneth E. Jansen const void* valueArray, 9459599516SKenneth E. Jansen const int* nItems, 9559599516SKenneth E. Jansen const int* ndataItems, 9659599516SKenneth E. Jansen const char datatype[], 9759599516SKenneth E. Jansen const char iotype[] ); 9859599516SKenneth E. Jansen 9959599516SKenneth E. Jansen void 10059599516SKenneth E. Jansen readdatablock( int* fileDescriptor, 10159599516SKenneth E. Jansen const char keyphrase[], 10259599516SKenneth E. Jansen void* valueArray, 10359599516SKenneth E. Jansen int* nItems, 10459599516SKenneth E. Jansen const char datatype[], 10559599516SKenneth E. Jansen const char iotype[] ); 10659599516SKenneth E. Jansen 10759599516SKenneth E. Jansen 10859599516SKenneth E. Jansen void 10959599516SKenneth E. Jansen writedatablock( const int* fileDescriptor, 11059599516SKenneth E. Jansen const char keyphrase[], 11159599516SKenneth E. Jansen const void* valueArray, 11259599516SKenneth E. Jansen const int* nItems, 11359599516SKenneth E. Jansen const char datatype[], 11459599516SKenneth E. Jansen const char iotype[] ); 11559599516SKenneth E. Jansen 11659599516SKenneth E. Jansen void 11759599516SKenneth E. Jansen writestring( int* fileDescriptor, 11859599516SKenneth E. Jansen const char inString[] ); 11959599516SKenneth E. Jansen 12059599516SKenneth E. Jansen void 12159599516SKenneth E. Jansen togglestrictmode( ); 12259599516SKenneth E. Jansen 12359599516SKenneth E. Jansen int 12459599516SKenneth E. Jansen isLittleEndian( ) ; 12559599516SKenneth E. Jansen 12659599516SKenneth E. Jansen int computeColor( int myrank, int numprocs, int nfiles); 12759599516SKenneth E. Jansen 12859599516SKenneth E. Jansen #ifdef __cplusplus 12908d2ac07SCameron Smith } /* end of extern "C".*/ 13059599516SKenneth E. Jansen 13159599516SKenneth E. Jansen #include <string> 13259599516SKenneth E. Jansen 13359599516SKenneth E. Jansen namespace PHASTA { 13459599516SKenneth E. Jansen template<class T> 13559599516SKenneth E. Jansen struct PhastaIO_traits; 13659599516SKenneth E. Jansen 13759599516SKenneth E. Jansen template<> 13859599516SKenneth E. Jansen struct PhastaIO_traits<int> { 13959599516SKenneth E. Jansen static const char* const type_string; 14059599516SKenneth E. Jansen }; 14159599516SKenneth E. Jansen 14259599516SKenneth E. Jansen 14359599516SKenneth E. Jansen template<> 14459599516SKenneth E. Jansen struct PhastaIO_traits<double> { 14559599516SKenneth E. Jansen static const char* const type_string; 14659599516SKenneth E. Jansen }; 14759599516SKenneth E. Jansen 14859599516SKenneth E. Jansen 14959599516SKenneth E. Jansen template<class T> 15059599516SKenneth E. Jansen void 15159599516SKenneth E. Jansen write_data_block( const int fileDescriptor, 15259599516SKenneth E. Jansen const std::string keyphrase, 15359599516SKenneth E. Jansen const T* const valueArray, 15459599516SKenneth E. Jansen const int nItems, 15559599516SKenneth E. Jansen const bool inBinary = false) { 15659599516SKenneth E. Jansen writedatablock(&fileDescriptor, 15759599516SKenneth E. Jansen keyphrase.c_str(), 15859599516SKenneth E. Jansen reinterpret_cast<const void*>(valueArray), 15959599516SKenneth E. Jansen &nItems, 16059599516SKenneth E. Jansen PhastaIO_traits<T>::type_string, 16159599516SKenneth E. Jansen inBinary ? "binary" : "text"); 16259599516SKenneth E. Jansen 16359599516SKenneth E. Jansen } 16459599516SKenneth E. Jansen template<class T> 16559599516SKenneth E. Jansen void 16659599516SKenneth E. Jansen write_header( const int fileDescriptor, 16759599516SKenneth E. Jansen const std::string& keyphrase, 16859599516SKenneth E. Jansen const T* valueArray, 16959599516SKenneth E. Jansen const int nItems, 17059599516SKenneth E. Jansen const int nDataItems, 17159599516SKenneth E. Jansen const bool inBinary = false) { 17259599516SKenneth E. Jansen writeheader(&fileDescriptor, 17359599516SKenneth E. Jansen keyphrase.c_str(), 17459599516SKenneth E. Jansen reinterpret_cast<const void*>(valueArray), 17559599516SKenneth E. Jansen &nItems, 17659599516SKenneth E. Jansen &nDataItems, 17759599516SKenneth E. Jansen PhastaIO_traits<T>::type_string, 17859599516SKenneth E. Jansen inBinary ? "binary" : "text"); 17959599516SKenneth E. Jansen } 18059599516SKenneth E. Jansen 18159599516SKenneth E. Jansen 18208d2ac07SCameron Smith } /* namespace PHASTA */ 18359599516SKenneth E. Jansen 18408d2ac07SCameron Smith #endif /* __cplusplus */ 18559599516SKenneth E. Jansen 18608d2ac07SCameron Smith #endif /* _PHASTAIO_H_ */ 187