xref: /phasta/phastaIO/phastaIO.h (revision 7acde132a6def0fe2daaec0d1a712dff0e5c6636)
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