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