xref: /phasta/phastaIO/phastaIO.h (revision 93b99f60430dd206491e8c956b118d7feecf22ca)
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( const int*  fileDescriptor,
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     readDataBlock( FILE* fileObject,
101                    void* valueArray,
102                    int nItems,
103                    const char  datatype[],
104                    const char  iotype[] );
105 
106     void
107     readdatablock( int*  fileDescriptor,
108                     const char keyphrase[],
109                     void* valueArray,
110                     int*  nItems,
111                     const char  datatype[],
112                     const char  iotype[] );
113 
114 
115     void
116     writedatablock( const int*   fileDescriptor,
117                      const char  keyphrase[],
118                      const void*  valueArray,
119                      const int*   nItems,
120                      const char   datatype[],
121                      const char   iotype[]  );
122 
123     void
124     writestring( int* fileDescriptor,
125                   const char inString[] );
126 
127     void
128     togglestrictmode( );
129 
130   int
131   isLittleEndian( ) ;
132 
133   int computeColor( int myrank, int numprocs, int nfiles);
134 
135 #ifdef __cplusplus
136 } /* end of extern "C".*/
137 
138 #include <string>
139 
140 namespace PHASTA {
141 template<class T>
142 struct PhastaIO_traits;
143 
144 template<>
145 struct PhastaIO_traits<int> {
146   static const char* const type_string;
147 };
148 
149 
150 template<>
151 struct PhastaIO_traits<double> {
152   static const char* const type_string;
153 };
154 
155 
156 template<class T>
157 void
158 write_data_block( const int   fileDescriptor,
159 		  const std::string keyphrase,
160 		  const T* const  valueArray,
161 		  const int   nItems,
162 		  const bool inBinary = false) {
163   writedatablock(&fileDescriptor,
164 		  keyphrase.c_str(),
165 		  reinterpret_cast<const void*>(valueArray),
166 		  &nItems,
167 		  PhastaIO_traits<T>::type_string,
168 		  inBinary ? "binary" : "text");
169 
170 }
171 template<class T>
172 void
173 write_header( const int  fileDescriptor,
174 		 const std::string& keyphrase,
175 		 const T* valueArray,
176 		 const int  nItems,
177 		 const int  nDataItems,
178 		 const bool inBinary = false) {
179       writeheader(&fileDescriptor,
180 		   keyphrase.c_str(),
181 		   reinterpret_cast<const void*>(valueArray),
182 		   &nItems,
183 		   &nDataItems,
184 		   PhastaIO_traits<T>::type_string,
185 		   inBinary ? "binary" : "text");
186 }
187 
188 
189 } /* namespace PHASTA */
190 
191 #endif /* __cplusplus */
192 
193 #endif /* _PHASTAIO_H_ */
194