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