1 #include "H5Part.h"
2 #include "H5PartPrivate.h"
3 #include "H5Block.h"
4 #include "Underscore.h"
5 
6 #if defined(F77_SINGLE_UNDERSCORE)
7 #define F77NAME(a,b) a
8 #elif defined(F77_CRAY_UNDERSCORE)
9 #define F77NAME(a,b) b
10 #elif defined(F77_NO_UNDERSCORE)
11 #else
12 #error Error, no way to determine how to construct fortran bindings
13 #endif
14 
15 #if ! defined(F77_NO_UNDERSCORE)
16 
17 #define h5bl_define3dlayout F77NAME (					\
18 					h5bl_define3dlayout_,		\
19 					H5BL_DEFINE3DLAYOUT )
20 #define h5bl_define3dchunkdims F77NAME (				\
21 					h5bl_define3dchunkdims_,	\
22 					H5BL_DEFINE3DCHUNKDIMS )
23 #define h5bl_get_partition_of_proc F77NAME (				\
24 					h5bl_get_partition_of_proc_,	\
25 					H5BL_GET_PARTITION_OF_PROC )
26 #define h5bl_get_reduced_partition_of_proc F77NAME (			\
27 					h5bl_get_reduced_partition_of_proc_,\
28 					H5BL_GET_REDUCED_PARTITION_OF_PROC )
29 #define h5bl_get_proc_of F77NAME (					\
30 					h5bl_get_proc_of_,		\
31 					H5BL_GET_PROC_OF )
32 #define h5bl_getnumfields F77NAME (					\
33 					h5bl_getnumfields_,		\
34 					H5BL_GETNUMFIELDS )
35 #define h5bl_getfieldinfo F77NAME (					\
36 					h5bl_getfieldinfo_,		\
37 					H5BL_GETFIELDINFO )
38 #define h5bl_writefieldattrib_string F77NAME (			\
39 					h5bl_writefieldattrib_string_,	\
40 					H5BL_WRITEFIELDATTRIB_STRING )
41 #define h5bl_getnfieldattribs F77NAME (				\
42 					h5bl_getnfieldattribs_,		\
43 					H5BL_GETNFIELDATTRIBS )
44 #define h5bl_getfieldattribinfo F77NAME (				\
45 					h5bl_getfieldattribinfo_,	\
46 					h5bl_getfieldattribinfo )
47 #define h5bl_readfieldattrib_i8 F77NAME (				\
48 					h5bl_readfieldattrib_i8_,	\
49 					H5BL_READFIELDATTRIB_I8 )
50 #define h5bl_readfieldattrib_r8 F77NAME (				\
51 					h5bl_readfieldattrib_r8_,	\
52 					H5BL_READFIELDATTRIB_R8 )
53 #define h5bl_readfieldattrib_string F77NAME (				\
54 					h5bl_readfieldattrib_string_,	\
55 					H5BL_READFIELDATTRIB_STRING )
56 #define h5bl_has_fielddata F77NAME (					\
57 					h5bl_has_fielddata_,		\
58 					H5BL_HAS_FIELDDATA )
59 #define h5bl_3d_set_field_spacing F77NAME (				\
60 					h5bl_3d_set_field_spacing_,	\
61 					H5BL_3D_SET_FIELD_SPACING )
62 #define h5bl_3d_get_field_spacing F77NAME (				\
63 					h5bl_3d_get_field_spacing_,	\
64 					H5BL_3D_GET_FIELD_SPACING )
65 #define h5bl_3d_set_field_origin F77NAME (				\
66 					h5bl_3d_set_field_origin_,	\
67 					H5BL_3D_SET_FIELD_ORIGIN )
68 #define h5bl_3d_get_field_origin F77NAME (				\
69 					h5bl_3d_get_field_origin_,	\
70 					H5BL_3D_GET_FIELD_origin )
71 #endif
72 
73 h5part_int64_t
h5bl_define3dlayout(h5part_int64_t * f,const h5part_int64_t * i_start,const h5part_int64_t * i_end,const h5part_int64_t * j_start,const h5part_int64_t * j_end,const h5part_int64_t * k_start,const h5part_int64_t * k_end)74 h5bl_define3dlayout (
75 	h5part_int64_t *f,
76 	const h5part_int64_t *i_start,	/*!< start index of i */
77 	const h5part_int64_t *i_end,	/*!< end index of i */
78 	const h5part_int64_t *j_start,	/*!< start index of j */
79 	const h5part_int64_t *j_end,	/*!< end index of j */
80 	const h5part_int64_t *k_start,	/*!< start index of k */
81 	const h5part_int64_t *k_end	/*!< end index of k */
82 	) {
83 
84 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
85 
86 	return H5BlockDefine3DFieldLayout (
87 		filehandle,
88 		*i_start-1, *i_end-1,
89 		*j_start-1, *j_end-1,
90 		*k_start-1, *k_end-1 );
91 }
92 
93 h5part_int64_t
h5bl_define3dchunkdims(h5part_int64_t * f,const h5part_int64_t * i,const h5part_int64_t * j,const h5part_int64_t * k)94 h5bl_define3dchunkdims (
95 	h5part_int64_t *f,
96 	const h5part_int64_t *i,
97 	const h5part_int64_t *j,
98 	const h5part_int64_t *k
99 	) {
100 
101 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
102 
103 	return H5BlockDefine3DChunkDims ( filehandle, *i, *j, *k );
104 }
105 
106 h5part_int64_t
h5bl_get_partition_of_proc(h5part_int64_t * f,const h5part_int64_t * proc,h5part_int64_t * i_start,h5part_int64_t * i_end,h5part_int64_t * j_start,h5part_int64_t * j_end,h5part_int64_t * k_start,h5part_int64_t * k_end)107 h5bl_get_partition_of_proc (
108 	h5part_int64_t *f,		/*!< file handle */
109 	const h5part_int64_t *proc,
110 	h5part_int64_t *i_start,	/*!< start index of i */
111 	h5part_int64_t *i_end,		/*!< end index of i */
112 	h5part_int64_t *j_start,	/*!< start index of j */
113 	h5part_int64_t *j_end,		/*!< end index of j */
114 	h5part_int64_t *k_start,	/*!< start index of k */
115 	h5part_int64_t *k_end		/*!< end index of k */
116 	) {
117 
118 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
119 
120 	h5part_int64_t herr = H5Block3dGetPartitionOfProc (
121 		filehandle,
122 		*proc,
123 		i_start, i_end, j_start, j_end, k_start, k_end );
124 	if ( herr < 0 ) return herr;
125 
126 	(*i_start)++;
127 	(*i_end)++;
128 	(*j_start)++;
129 	(*j_end)++;
130 	(*k_start)++;
131 	(*k_end)++;
132 
133 	return H5PART_SUCCESS;
134 }
135 
136 h5part_int64_t
h5bl_get_reduced_partition_of_proc(h5part_int64_t * f,const h5part_int64_t * proc,h5part_int64_t * i_start,h5part_int64_t * i_end,h5part_int64_t * j_start,h5part_int64_t * j_end,h5part_int64_t * k_start,h5part_int64_t * k_end)137 h5bl_get_reduced_partition_of_proc (
138 	h5part_int64_t *f,
139 	const h5part_int64_t *proc,
140 	h5part_int64_t *i_start,
141 	h5part_int64_t *i_end,
142 	h5part_int64_t *j_start,
143 	h5part_int64_t *j_end,
144 	h5part_int64_t *k_start,
145 	h5part_int64_t *k_end
146 	) {
147 
148 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
149 
150 	h5part_int64_t herr = H5Block3dGetReducedPartitionOfProc (
151 		filehandle,
152 		*proc,
153 		i_start, i_end, j_start, j_end, k_start, k_end );
154 	if ( herr < 0 ) return herr;
155 
156 	(*i_start)++;
157 	(*i_end)++;
158 	(*j_start)++;
159 	(*j_end)++;
160 	(*k_start)++;
161 	(*k_end)++;
162 
163 	return H5PART_SUCCESS;
164 }
165 
166 h5part_int64_t
h5bl_get_proc_of(h5part_int64_t * f,const h5part_int64_t * i,const h5part_int64_t * j,const h5part_int64_t * k)167 h5bl_get_proc_of (
168 	h5part_int64_t *f,
169 	const h5part_int64_t *i,
170 	const h5part_int64_t *j,
171 	const h5part_int64_t *k
172 	) {
173 
174 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
175 
176 	return H5Block3dGetProcOf ( filehandle, (*i)-1, (*j)-1, (*k)-1 );
177 }
178 
179 h5part_int64_t
h5bl_getnumfields(h5part_int64_t * f)180 h5bl_getnumfields (
181 	h5part_int64_t *f			/*!< file handle */
182 	) {
183 
184 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
185 
186 	return H5BlockGetNumFields ( filehandle );
187 }
188 
189 h5part_int64_t
h5bl_getfieldinfo(h5part_int64_t * f,const h5part_int64_t * idx,char * field_name,h5part_int64_t * grid_rank,h5part_int64_t * grid_dims,h5part_int64_t * field_dims,h5part_int64_t * type,const int l_field_name)190 h5bl_getfieldinfo (
191 	h5part_int64_t *f,
192 	const h5part_int64_t *idx,
193 	char *field_name,
194 	h5part_int64_t *grid_rank,
195 	h5part_int64_t *grid_dims,
196 	h5part_int64_t *field_dims,
197 	h5part_int64_t *type,
198 	const int l_field_name
199 	) {
200 
201 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
202 
203 	h5part_int64_t herr = H5BlockGetFieldInfo (
204 		filehandle, *idx, field_name, l_field_name,
205 		grid_rank, grid_dims, field_dims, type );
206 	_H5Part_strc2for ( field_name, l_field_name );
207 	return herr;
208 }
209 
210 h5part_int64_t
h5bl_writefieldattrib_string(h5part_int64_t * f,const char * field_name,const char * attrib_name,const char * attrib_value,const int l_field_name,const int l_attrib_name,const int l_attrib_value)211 h5bl_writefieldattrib_string (
212 	h5part_int64_t *f,
213 	const char *field_name,
214 	const char *attrib_name,
215 	const char *attrib_value,
216 	const int l_field_name,
217 	const int l_attrib_name,
218 	const int l_attrib_value
219 	) {
220 
221 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
222 
223 	char *field_name2 =_H5Part_strdupfor2c ( field_name,  l_field_name );
224 	char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
225 	char *attrib_value2=_H5Part_strdupfor2c( attrib_value,l_attrib_value );
226 
227 	h5part_int64_t herr = H5BlockWriteFieldAttribString (
228 		filehandle, field_name2, attrib_name2, attrib_value2 );
229 
230 	free ( field_name2 );
231 	free ( attrib_name2 );
232 	free ( attrib_value2 );
233 	return herr;
234 }
235 
236 
237 h5part_int64_t
h5bl_getnfieldattribs(h5part_int64_t * f,const char * field_name,const int l_field_name)238 h5bl_getnfieldattribs (
239 	h5part_int64_t *f,
240 	const char *field_name,
241 	const int l_field_name
242 	) {
243 
244 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
245 
246 	char *field_name2 = _H5Part_strdupfor2c ( field_name,   l_field_name );
247 
248 	h5part_int64_t herr = H5BlockGetNumFieldAttribs (
249 		filehandle, field_name2 );
250 
251 	free ( field_name2 );
252 	return herr;
253 }
254 
255 h5part_int64_t
h5bl_getfieldattribinfo(h5part_int64_t * f,const char * field_name,const h5part_int64_t * attrib_idx,char * attrib_name,h5part_int64_t * attrib_nelem,const int l_field_name,const int l_attrib_name)256 h5bl_getfieldattribinfo (
257 	h5part_int64_t *f,
258 	const char *field_name,
259 	const h5part_int64_t *attrib_idx,
260 	char *attrib_name,
261 	h5part_int64_t *attrib_nelem,
262 	const int l_field_name,
263 	const int l_attrib_name
264 	) {
265 
266 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
267 
268 	h5part_int64_t	attrib_type;
269 
270 	char *field_name2 = _H5Part_strdupfor2c ( field_name,   l_field_name );
271 
272 	h5part_int64_t herr = H5BlockGetFieldAttribInfo (
273 		filehandle, field_name2, *attrib_idx,
274 		attrib_name, l_attrib_name,
275 		&attrib_type,
276 		attrib_nelem );
277 
278 	_H5Part_strc2for ( attrib_name, l_attrib_name );
279 
280 	free ( field_name2 );
281 	return herr;
282 }
283 
284 
285 h5part_int64_t
h5bl_readfieldattrib_i8(h5part_int64_t * f,const char * field_name,const char * attrib_name,h5part_int64_t * attrib_value,const int l_field_name,const int l_attrib_name)286 h5bl_readfieldattrib_i8 (
287 	h5part_int64_t *f,
288 	const char *field_name,
289 	const char *attrib_name,
290 	h5part_int64_t *attrib_value,
291 	const int l_field_name,
292 	const int l_attrib_name
293 	) {
294 
295 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
296 
297 	char *field_name2 =_H5Part_strdupfor2c ( field_name,   l_field_name );
298 	char *attrib_name2=_H5Part_strdupfor2c ( attrib_name,  l_attrib_name );
299 
300 	h5part_int64_t herr = H5BlockReadFieldAttrib (
301 		filehandle, field_name2, attrib_name2, attrib_value );
302 
303 	free ( field_name2 );
304 	free ( attrib_name2 );
305 	return herr;
306 }
307 
308 h5part_int64_t
h5bl_readfieldattrib_r8(h5part_int64_t * f,const char * field_name,const char * attrib_name,h5part_float64_t * attrib_value,const int l_field_name,const int l_attrib_name)309 h5bl_readfieldattrib_r8 (
310 	h5part_int64_t *f,
311 	const char *field_name,
312 	const char *attrib_name,
313 	h5part_float64_t *attrib_value,
314 	const int l_field_name,
315 	const int l_attrib_name
316 	) {
317 
318 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
319 
320 	char *field_name2 =_H5Part_strdupfor2c ( field_name,   l_field_name );
321 	char *attrib_name2=_H5Part_strdupfor2c ( attrib_name,  l_attrib_name );
322 
323 	h5part_int64_t herr = H5BlockReadFieldAttrib (
324 		filehandle, field_name2, attrib_name2, attrib_value );
325 
326 	free ( field_name2 );
327 	free ( attrib_name2 );
328 	return herr;
329 }
330 
331 h5part_int64_t
h5bl_readfieldattrib_string(h5part_int64_t * f,const char * field_name,const char * attrib_name,char * attrib_value,const int l_field_name,const int l_attrib_name,const int l_attrib_value)332 h5bl_readfieldattrib_string (
333 	h5part_int64_t *f,
334 	const char *field_name,
335 	const char *attrib_name,
336 	char *attrib_value,
337 	const int l_field_name,
338 	const int l_attrib_name,
339 	const int l_attrib_value
340 	) {
341 
342 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
343 
344 	char *field_name2 =_H5Part_strdupfor2c ( field_name,   l_field_name );
345 	char *attrib_name2=_H5Part_strdupfor2c ( attrib_name,  l_attrib_name );
346 
347 	h5part_int64_t herr = H5BlockReadFieldAttrib (
348 		filehandle, field_name2, attrib_name2, attrib_value );
349 
350 	_H5Part_strc2for ( attrib_value, l_attrib_value );
351 
352 	free ( field_name2 );
353 	free ( attrib_name2 );
354 	return herr;
355 }
356 
357 h5part_int64_t
h5bl_has_fielddata(h5part_int64_t * f)358 h5bl_has_fielddata (
359 	h5part_int64_t *f
360 	) {
361 
362 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
363 
364 	return H5BlockHasFieldData ( filehandle );
365 }
366 
367 h5part_int64_t
h5bl_3d_get_field_spacing(h5part_int64_t * f,const char * field_name,h5part_float64_t * x,h5part_float64_t * y,h5part_float64_t * z,const int l_field_name)368 h5bl_3d_get_field_spacing (
369 	h5part_int64_t *f,
370 	const char *field_name,
371 	h5part_float64_t *x,
372 	h5part_float64_t *y,
373 	h5part_float64_t *z,
374 	const int l_field_name
375 	) {
376 
377 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
378 
379 	char *field_name2 =  _H5Part_strdupfor2c ( field_name, l_field_name );
380 
381 	h5part_int64_t herr = H5Block3dGetFieldSpacing (
382 		filehandle, field_name2, x, y, z );
383 
384 	free ( field_name2 );
385 	return herr;
386 }
387 
388 h5part_int64_t
h5bl_3d_set_field_spacing(h5part_int64_t * f,const char * field_name,const h5part_float64_t * x,const h5part_float64_t * y,const h5part_float64_t * z,const int l_field_name)389 h5bl_3d_set_field_spacing (
390 	h5part_int64_t *f,
391 	const char *field_name,
392 	const h5part_float64_t *x,
393 	const h5part_float64_t *y,
394 	const h5part_float64_t *z,
395 	const int l_field_name
396 	) {
397 
398 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
399 
400 	char *field_name2 =  _H5Part_strdupfor2c ( field_name, l_field_name );
401 
402 	h5part_int64_t herr = H5Block3dSetFieldSpacing (
403 		filehandle, field_name2, *x, *y, *z );
404 
405 	free ( field_name2 );
406 	return herr;
407 }
408 
409 h5part_int64_t
h5bl_3d_get_field_origin(h5part_int64_t * f,const char * field_name,h5part_float64_t * x,h5part_float64_t * y,h5part_float64_t * z,const int l_field_name)410 h5bl_3d_get_field_origin (
411 	h5part_int64_t *f,
412 	const char *field_name,
413 	h5part_float64_t *x,
414 	h5part_float64_t *y,
415 	h5part_float64_t *z,
416 	const int l_field_name
417 	) {
418 
419 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
420 
421 	char *field_name2 =  _H5Part_strdupfor2c ( field_name, l_field_name );
422 
423 	h5part_int64_t herr = H5Block3dGetFieldOrigin (
424 		filehandle, field_name2, x, y, z );
425 
426 	free ( field_name2 );
427 	return herr;
428 }
429 
430 h5part_int64_t
h5bl_3d_set_field_origin(h5part_int64_t * f,const char * field_name,const h5part_float64_t * x,const h5part_float64_t * y,const h5part_float64_t * z,const int l_field_name)431 h5bl_3d_set_field_origin (
432 	h5part_int64_t *f,
433 	const char *field_name,
434 	const h5part_float64_t *x,
435 	const h5part_float64_t *y,
436 	const h5part_float64_t *z,
437 	const int l_field_name
438 	) {
439 
440 	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
441 
442 	char *field_name2 =  _H5Part_strdupfor2c ( field_name, l_field_name );
443 
444 	h5part_int64_t herr = H5Block3dSetFieldOrigin (
445 		filehandle, field_name2, *x, *y, *z );
446 
447 	free ( field_name2 );
448 	return herr;
449 }
450