xref: /phasta/phastaIO/phastaIO.h (revision 3956dcfee54852bab1bba612a7105777cbade425)
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
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
100*3956dcfeSCameron Smith     readDataBlock( FILE* fileObject,
101*3956dcfeSCameron Smith                    void* valueArray,
102*3956dcfeSCameron Smith                    int nItems,
103*3956dcfeSCameron Smith                    const char  datatype[],
104*3956dcfeSCameron Smith                    const char  iotype[] );
105*3956dcfeSCameron Smith 
106*3956dcfeSCameron Smith     void
10759599516SKenneth E. Jansen     readdatablock( int*  fileDescriptor,
10859599516SKenneth E. Jansen                     const char keyphrase[],
10959599516SKenneth E. Jansen                     void* valueArray,
11059599516SKenneth E. Jansen                     int*  nItems,
11159599516SKenneth E. Jansen                     const char  datatype[],
11259599516SKenneth E. Jansen                     const char  iotype[] );
11359599516SKenneth E. Jansen 
11459599516SKenneth E. Jansen 
11559599516SKenneth E. Jansen     void
11659599516SKenneth E. Jansen     writedatablock( const int*   fileDescriptor,
11759599516SKenneth E. Jansen                      const char  keyphrase[],
11859599516SKenneth E. Jansen                      const void*  valueArray,
11959599516SKenneth E. Jansen                      const int*   nItems,
12059599516SKenneth E. Jansen                      const char   datatype[],
12159599516SKenneth E. Jansen                      const char   iotype[]  );
12259599516SKenneth E. Jansen 
12359599516SKenneth E. Jansen     void
12459599516SKenneth E. Jansen     writestring( int* fileDescriptor,
12559599516SKenneth E. Jansen                   const char inString[] );
12659599516SKenneth E. Jansen 
12759599516SKenneth E. Jansen     void
12859599516SKenneth E. Jansen     togglestrictmode( );
12959599516SKenneth E. Jansen 
13059599516SKenneth E. Jansen   int
13159599516SKenneth E. Jansen   isLittleEndian( ) ;
13259599516SKenneth E. Jansen 
13359599516SKenneth E. Jansen   int computeColor( int myrank, int numprocs, int nfiles);
13459599516SKenneth E. Jansen 
13559599516SKenneth E. Jansen #ifdef __cplusplus
13608d2ac07SCameron Smith } /* end of extern "C".*/
13759599516SKenneth E. Jansen 
13859599516SKenneth E. Jansen #include <string>
13959599516SKenneth E. Jansen 
14059599516SKenneth E. Jansen namespace PHASTA {
14159599516SKenneth E. Jansen template<class T>
14259599516SKenneth E. Jansen struct PhastaIO_traits;
14359599516SKenneth E. Jansen 
14459599516SKenneth E. Jansen template<>
14559599516SKenneth E. Jansen struct PhastaIO_traits<int> {
14659599516SKenneth E. Jansen   static const char* const type_string;
14759599516SKenneth E. Jansen };
14859599516SKenneth E. Jansen 
14959599516SKenneth E. Jansen 
15059599516SKenneth E. Jansen template<>
15159599516SKenneth E. Jansen struct PhastaIO_traits<double> {
15259599516SKenneth E. Jansen   static const char* const type_string;
15359599516SKenneth E. Jansen };
15459599516SKenneth E. Jansen 
15559599516SKenneth E. Jansen 
15659599516SKenneth E. Jansen template<class T>
15759599516SKenneth E. Jansen void
15859599516SKenneth E. Jansen write_data_block( const int   fileDescriptor,
15959599516SKenneth E. Jansen 		  const std::string keyphrase,
16059599516SKenneth E. Jansen 		  const T* const  valueArray,
16159599516SKenneth E. Jansen 		  const int   nItems,
16259599516SKenneth E. Jansen 		  const bool inBinary = false) {
16359599516SKenneth E. Jansen   writedatablock(&fileDescriptor,
16459599516SKenneth E. Jansen 		  keyphrase.c_str(),
16559599516SKenneth E. Jansen 		  reinterpret_cast<const void*>(valueArray),
16659599516SKenneth E. Jansen 		  &nItems,
16759599516SKenneth E. Jansen 		  PhastaIO_traits<T>::type_string,
16859599516SKenneth E. Jansen 		  inBinary ? "binary" : "text");
16959599516SKenneth E. Jansen 
17059599516SKenneth E. Jansen }
17159599516SKenneth E. Jansen template<class T>
17259599516SKenneth E. Jansen void
17359599516SKenneth E. Jansen write_header( const int  fileDescriptor,
17459599516SKenneth E. Jansen 		 const std::string& keyphrase,
17559599516SKenneth E. Jansen 		 const T* valueArray,
17659599516SKenneth E. Jansen 		 const int  nItems,
17759599516SKenneth E. Jansen 		 const int  nDataItems,
17859599516SKenneth E. Jansen 		 const bool inBinary = false) {
17959599516SKenneth E. Jansen       writeheader(&fileDescriptor,
18059599516SKenneth E. Jansen 		   keyphrase.c_str(),
18159599516SKenneth E. Jansen 		   reinterpret_cast<const void*>(valueArray),
18259599516SKenneth E. Jansen 		   &nItems,
18359599516SKenneth E. Jansen 		   &nDataItems,
18459599516SKenneth E. Jansen 		   PhastaIO_traits<T>::type_string,
18559599516SKenneth E. Jansen 		   inBinary ? "binary" : "text");
18659599516SKenneth E. Jansen }
18759599516SKenneth E. Jansen 
18859599516SKenneth E. Jansen 
18908d2ac07SCameron Smith } /* namespace PHASTA */
19059599516SKenneth E. Jansen 
19108d2ac07SCameron Smith #endif /* __cplusplus */
19259599516SKenneth E. Jansen 
19308d2ac07SCameron Smith #endif /* _PHASTAIO_H_ */
194