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 743872e963SCameron Smith 753872e963SCameron Smith int 763872e963SCameron Smith readHeader( FILE* fileObject, 773872e963SCameron Smith const char phrase[], 783872e963SCameron Smith int* params, 793872e963SCameron Smith int numParams, 803872e963SCameron Smith const char iotype[] ); 813872e963SCameron 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 91*ea868eb1SCameron Smith writeHeader( FILE* f, 92*ea868eb1SCameron Smith const char keyphrase[], 93*ea868eb1SCameron Smith const void* valueArray, 94*ea868eb1SCameron Smith const int nItems, 95*ea868eb1SCameron Smith const int ndataItems, 96*ea868eb1SCameron Smith const char datatype[], 97*ea868eb1SCameron Smith const char iotype[]); 98*ea868eb1SCameron Smith 99*ea868eb1SCameron Smith void 10059599516SKenneth E. Jansen writeheader( const int* fileDescriptor, 10159599516SKenneth E. Jansen const char keyphrase[], 10259599516SKenneth E. Jansen const void* valueArray, 10359599516SKenneth E. Jansen const int* nItems, 10459599516SKenneth E. Jansen const int* ndataItems, 10559599516SKenneth E. Jansen const char datatype[], 10659599516SKenneth E. Jansen const char iotype[] ); 10759599516SKenneth E. Jansen 10859599516SKenneth E. Jansen void 1093956dcfeSCameron Smith readDataBlock( FILE* fileObject, 1103956dcfeSCameron Smith void* valueArray, 1113956dcfeSCameron Smith int nItems, 1123956dcfeSCameron Smith const char datatype[], 1133956dcfeSCameron Smith const char iotype[] ); 1143956dcfeSCameron Smith 1153956dcfeSCameron Smith void 11659599516SKenneth E. Jansen readdatablock( int* fileDescriptor, 11759599516SKenneth E. Jansen const char keyphrase[], 11859599516SKenneth E. Jansen void* valueArray, 11959599516SKenneth E. Jansen int* nItems, 12059599516SKenneth E. Jansen const char datatype[], 12159599516SKenneth E. Jansen const char iotype[] ); 12259599516SKenneth E. Jansen 123*ea868eb1SCameron Smith void 124*ea868eb1SCameron Smith writeDataBlock( FILE* f, 125*ea868eb1SCameron Smith const void* valueArray, 126*ea868eb1SCameron Smith const int nItems, 127*ea868eb1SCameron Smith const char datatype[], 128*ea868eb1SCameron Smith const char iotype[] ); 12959599516SKenneth E. Jansen 13059599516SKenneth E. Jansen void 13159599516SKenneth E. Jansen writedatablock( const int* fileDescriptor, 13259599516SKenneth E. Jansen const char keyphrase[], 13359599516SKenneth E. Jansen const void* valueArray, 13459599516SKenneth E. Jansen const int* nItems, 13559599516SKenneth E. Jansen const char datatype[], 13659599516SKenneth E. Jansen const char iotype[] ); 13759599516SKenneth E. Jansen 13859599516SKenneth E. Jansen void 13959599516SKenneth E. Jansen writestring( int* fileDescriptor, 14059599516SKenneth E. Jansen const char inString[] ); 14159599516SKenneth E. Jansen 14259599516SKenneth E. Jansen void 14359599516SKenneth E. Jansen togglestrictmode( ); 14459599516SKenneth E. Jansen 14559599516SKenneth E. Jansen int 14659599516SKenneth E. Jansen isLittleEndian( ) ; 14759599516SKenneth E. Jansen 14859599516SKenneth E. Jansen int computeColor( int myrank, int numprocs, int nfiles); 14959599516SKenneth E. Jansen 15059599516SKenneth E. Jansen #ifdef __cplusplus 15108d2ac07SCameron Smith } /* end of extern "C".*/ 15259599516SKenneth E. Jansen 15359599516SKenneth E. Jansen #include <string> 15459599516SKenneth E. Jansen 15559599516SKenneth E. Jansen namespace PHASTA { 15659599516SKenneth E. Jansen template<class T> 15759599516SKenneth E. Jansen struct PhastaIO_traits; 15859599516SKenneth E. Jansen 15959599516SKenneth E. Jansen template<> 16059599516SKenneth E. Jansen struct PhastaIO_traits<int> { 16159599516SKenneth E. Jansen static const char* const type_string; 16259599516SKenneth E. Jansen }; 16359599516SKenneth E. Jansen 16459599516SKenneth E. Jansen 16559599516SKenneth E. Jansen template<> 16659599516SKenneth E. Jansen struct PhastaIO_traits<double> { 16759599516SKenneth E. Jansen static const char* const type_string; 16859599516SKenneth E. Jansen }; 16959599516SKenneth E. Jansen 17059599516SKenneth E. Jansen 17159599516SKenneth E. Jansen template<class T> 17259599516SKenneth E. Jansen void 17359599516SKenneth E. Jansen write_data_block( const int fileDescriptor, 17459599516SKenneth E. Jansen const std::string keyphrase, 17559599516SKenneth E. Jansen const T* const valueArray, 17659599516SKenneth E. Jansen const int nItems, 17759599516SKenneth E. Jansen const bool inBinary = false) { 17859599516SKenneth E. Jansen writedatablock(&fileDescriptor, 17959599516SKenneth E. Jansen keyphrase.c_str(), 18059599516SKenneth E. Jansen reinterpret_cast<const void*>(valueArray), 18159599516SKenneth E. Jansen &nItems, 18259599516SKenneth E. Jansen PhastaIO_traits<T>::type_string, 18359599516SKenneth E. Jansen inBinary ? "binary" : "text"); 18459599516SKenneth E. Jansen 18559599516SKenneth E. Jansen } 18659599516SKenneth E. Jansen template<class T> 18759599516SKenneth E. Jansen void 18859599516SKenneth E. Jansen write_header( const int fileDescriptor, 18959599516SKenneth E. Jansen const std::string& keyphrase, 19059599516SKenneth E. Jansen const T* valueArray, 19159599516SKenneth E. Jansen const int nItems, 19259599516SKenneth E. Jansen const int nDataItems, 19359599516SKenneth E. Jansen const bool inBinary = false) { 19459599516SKenneth E. Jansen writeheader(&fileDescriptor, 19559599516SKenneth E. Jansen keyphrase.c_str(), 19659599516SKenneth E. Jansen reinterpret_cast<const void*>(valueArray), 19759599516SKenneth E. Jansen &nItems, 19859599516SKenneth E. Jansen &nDataItems, 19959599516SKenneth E. Jansen PhastaIO_traits<T>::type_string, 20059599516SKenneth E. Jansen inBinary ? "binary" : "text"); 20159599516SKenneth E. Jansen } 20259599516SKenneth E. Jansen 20359599516SKenneth E. Jansen 20408d2ac07SCameron Smith } /* namespace PHASTA */ 20559599516SKenneth E. Jansen 20608d2ac07SCameron Smith #endif /* __cplusplus */ 20759599516SKenneth E. Jansen 20808d2ac07SCameron Smith #endif /* _PHASTAIO_H_ */ 209