xref: /phasta/phastaIO/phastaIO.h (revision 7acde132a6def0fe2daaec0d1a712dff0e5c6636)
1 /*  Primary interface for the Phasta Binary read and write routines these*/
2 /*  functions are 'C' callable.( All arguments have been kept as pointers to*/
3 /*  facilitate calling from Fortran )*/
4 /*  Anil Kumar Karanam  Spring 2003*/
5 #ifndef _PHASTAIO_H_
6 #define _PHASTAIO_H_
7 
8 #include <FCMangle.h>
9 #include <mpi.h>
10 
11 #ifdef intel
12 #define ios_base ios
13 #endif
14 
15 #define queryphmpiio FortranCInterface_GLOBAL_(queryphmpiio,QUERYPHMPIIO)
16 #define initphmpiio FortranCInterface_GLOBAL_(initphmpiio,INITPHMPIIO)
17 #define initphmpiiosub FortranCInterface_GLOBAL_(initphmpiiosub,INITPHMPIIOSUB)
18 #define finalizephmpiio FortranCInterface_GLOBAL_(finalizephmpiio,FINALIZEPHMPIIO)
19 
20 #define openfile FortranCInterface_GLOBAL_(openfile, OPENFILE)
21 #define closefile FortranCInterface_GLOBAL_(closefile, CLOSEFILE)
22 #define readheader FortranCInterface_GLOBAL_(readheader, READHEADER)
23 #define readdatablock FortranCInterface_GLOBAL_(readdatablock, READDATABLOCK)
24 #define writeheader FortranCInterface_GLOBAL_(writeheader, WRITEHEADER)
25 #define writedatablock FortranCInterface_GLOBAL_(writedatablock, WRITEDATABLOCK)
26 #define writestring FortranCInterface_GLOBAL_(writestring, WRITESTRING)
27 #define togglestrictmode FortranCInterface_GLOBAL_(togglestrictmode, TOGGLESTRICTMODE)
28 #define SwapArrayByteOrder FortranCInterface_GLOBAL_(swaparraybyteorder, SWAPARRAYBYTEORDER)
29 #define isLittleEndian FortranCInterface_GLOBAL_(islittleendian, ISLITTLEENDIAN)
30 
31 
32 #if defined (__cplusplus)
33 extern "C" {
34 #endif
35 
36   void mem_alloc( void* p, char* type, int size );
37 
38   void
39   queryphmpiio( const char filename[],
40 		 int *nfields,
41 		 int *nppf );
42 
43   int
44   initphmpiio( int *nfields,
45 		int *nppf,
46 		int *nfiles,
47 		int *filehandle,
48 		const char mode[] );
49   int
50   initphmpiiosub( int *nfields,
51 		  int *nppf,
52 		  int *nfiles,
53 		  int *filehandle,
54 		  const char mode[],
55                   MPI_Comm my_local_comm );
56 
57   void
58   finalizephmpiio( int *fileDescriptor );
59 
60     void
61     SwapArrayByteOrder( void* array,
62                          int   nbytes,
63                          int   nItems ) ;
64     void
65 
66     openfile( const char filename[],
67                const char mode[],
68                int* fileDescriptor );
69 
70     void
71     closefile( int* fileDescriptor,
72                 const char mode[] );
73 
74 
75     int
76     readHeader( FILE*       fileObject,
77                 const char  phrase[],
78                 int*        params,
79                 int         numParams,
80                 const char   iotype[] );
81 
82     void
83     readheader( int*   fileDescriptor,
84                  const char  keyphrase[],
85                  void*  valueArray,
86                  int*   nItems,
87                  const char   datatype[],
88                  const char   iotype[] );
89 
90     void
91     writeHeader( FILE* f,
92                  const char keyphrase[],
93                  const void* valueArray,
94                  const int nItems,
95                  const int ndataItems,
96                  const char datatype[],
97                  const char iotype[]);
98 
99     void
100     writeheader( const int*  fileDescriptor,
101                   const char keyphrase[],
102                   const void* valueArray,
103                   const int*  nItems,
104                   const int*  ndataItems,
105                   const char  datatype[],
106                   const char  iotype[] );
107 
108     void
109     readDataBlock( FILE* fileObject,
110                    void* valueArray,
111                    int nItems,
112                    const char  datatype[],
113                    const char  iotype[] );
114 
115     void
116     readdatablock( int*  fileDescriptor,
117                     const char keyphrase[],
118                     void* valueArray,
119                     int*  nItems,
120                     const char  datatype[],
121                     const char  iotype[] );
122 
123     void
124     writeDataBlock( FILE* f,
125                     const void* valueArray,
126                     const int   nItems,
127                     const char  datatype[],
128                     const char  iotype[]  );
129 
130     void
131     writedatablock( const int*   fileDescriptor,
132                      const char  keyphrase[],
133                      const void*  valueArray,
134                      const int*   nItems,
135                      const char   datatype[],
136                      const char   iotype[]  );
137 
138     void
139     writestring( int* fileDescriptor,
140                   const char inString[] );
141 
142     void
143     togglestrictmode( );
144 
145   int
146   isLittleEndian( ) ;
147 
148   int computeColor( int myrank, int numprocs, int nfiles);
149 
150 #ifdef __cplusplus
151 } /* end of extern "C".*/
152 
153 #include <string>
154 
155 namespace PHASTA {
156 template<class T>
157 struct PhastaIO_traits;
158 
159 template<>
160 struct PhastaIO_traits<int> {
161   static const char* const type_string;
162 };
163 
164 
165 template<>
166 struct PhastaIO_traits<double> {
167   static const char* const type_string;
168 };
169 
170 
171 template<class T>
172 void
173 write_data_block( const int   fileDescriptor,
174 		  const std::string keyphrase,
175 		  const T* const  valueArray,
176 		  const int   nItems,
177 		  const bool inBinary = false) {
178   writedatablock(&fileDescriptor,
179 		  keyphrase.c_str(),
180 		  reinterpret_cast<const void*>(valueArray),
181 		  &nItems,
182 		  PhastaIO_traits<T>::type_string,
183 		  inBinary ? "binary" : "text");
184 
185 }
186 template<class T>
187 void
188 write_header( const int  fileDescriptor,
189 		 const std::string& keyphrase,
190 		 const T* valueArray,
191 		 const int  nItems,
192 		 const int  nDataItems,
193 		 const bool inBinary = false) {
194       writeheader(&fileDescriptor,
195 		   keyphrase.c_str(),
196 		   reinterpret_cast<const void*>(valueArray),
197 		   &nItems,
198 		   &nDataItems,
199 		   PhastaIO_traits<T>::type_string,
200 		   inBinary ? "binary" : "text");
201 }
202 
203 
204 } /* namespace PHASTA */
205 
206 #endif /* __cplusplus */
207 
208 #endif /* _PHASTAIO_H_ */
209