1 
2 #include <stdlib.h>
3 #include <string.h>
4 
5 #include <vtk_hdf5.h>
6 #include "H5Part.h"
7 #include "H5PartErrors.h"
8 #include "H5PartPrivate.h"
9 
10 #include "H5BlockTypes.h"
11 #include "H5Block.h"
12 #include "H5BlockPrivate.h"
13 #include "H5BlockErrors.h"
14 
15 /*!
16   \ingroup h5block_data
17 
18   Write a 3-dimensional field \c name from the buffer starting at \c data
19   to the current time-step using the defined field layout. Values are
20   floating points (64-bit).
21 
22   You must use the Fortran indexing scheme to access items in \c data.
23 
24   \return \c H5PART_SUCCESS or error code
25 */
26 h5part_int64_t
H5Block3dWriteScalarFieldFloat64(H5PartFile * f,const char * name,const h5part_float64_t * data)27 H5Block3dWriteScalarFieldFloat64 (
28 	H5PartFile *f,		  /*!< IN: file handle */
29 	const char *name,	       /*!< IN: name of dataset to write */
30 	const h5part_float64_t *data      /*!< IN: scalar data to write */
31 	) {
32 
33 	SET_FNAME ( "H5Block3dWriteScalarFieldFloat64" );
34 	BLOCK_INIT ( f );
35 	CHECK_WRITABLE_MODE ( f );
36 	CHECK_TIMEGROUP ( f );
37 	CHECK_LAYOUT ( f );
38 
39 	h5part_int64_t herr = _H5Block_create_field_group ( f, name );
40 	if ( herr < 0 ) return herr;
41 
42 	herr = _H5Block_write_data ( f, "0", data, H5T_NATIVE_DOUBLE );
43 	if ( herr < 0 ) return herr;
44 
45 	herr = _H5Block_close_field_group ( f );
46 	if ( herr < 0 ) return herr;
47 
48 	return H5PART_SUCCESS;
49 }
50 
51 /*!
52   \ingroup h5block_data
53 
54   Read a 3-dimensional field \c name into the buffer starting at \c data from
55   the current time-step using the defined field layout. Values are
56   floating points (64-bit).
57 
58   You must use the Fortran indexing scheme to access items in \c data.
59 
60   \return \c H5PART_SUCCESS or error code
61 */
62 h5part_int64_t
H5Block3dReadScalarFieldFloat64(H5PartFile * f,const char * name,h5part_float64_t * data)63 H5Block3dReadScalarFieldFloat64 (
64 	H5PartFile *f,		  /*!< IN: file handle */
65 	const char *name,	       /*!< IN: name of dataset to read */
66 	h5part_float64_t *data	  /*!< OUT: ptr to read buffer */
67 	) {
68 
69 	SET_FNAME ( "H5Block3dReadScalarFieldFloat64" );
70 	BLOCK_INIT ( f );
71 	CHECK_TIMEGROUP ( f );
72 	CHECK_LAYOUT ( f );
73 
74 	h5part_int64_t herr = _H5Block_open_field_group ( f, name );
75 	if ( herr < 0 ) return herr;
76 
77 	herr = _H5Block_read_data ( f, "0", data, H5T_NATIVE_DOUBLE );
78 	if ( herr < 0 ) return herr;
79 
80 	herr = _H5Block_close_field_group ( f );
81 	if ( herr < 0 ) return herr;
82 
83 	return H5PART_SUCCESS;
84 }
85 
86 /*!
87   \ingroup h5block_data
88 */
89 /*!
90   Write a 3-dimensional field \c name with 3-dimensional vectors as values
91   from the buffers starting at \c x_data, \c y_data and \c z_data to the
92   current time-step using the defined field layout. Values are 3-dimensional
93   vectors with floating points (64-bit) values.
94 
95   You must use the Fortran indexing scheme to access items in \c data.
96 
97   \return \c H5PART_SUCCESS or error code
98 */
99 h5part_int64_t
H5Block3dWrite3dVectorFieldFloat64(H5PartFile * f,const char * name,const h5part_float64_t * x_data,const h5part_float64_t * y_data,const h5part_float64_t * z_data)100 H5Block3dWrite3dVectorFieldFloat64 (
101 	H5PartFile *f,		  /*!< IN: file handle */
102 	const char *name,	       /*!< IN: name of dataset to write */
103 	const h5part_float64_t *x_data, /*!< IN: X axis data */
104 	const h5part_float64_t *y_data, /*!< IN: Y axis data */
105 	const h5part_float64_t *z_data  /*!< IN: Z axis data */
106 	) {
107 
108 	SET_FNAME ( "H5Block3dWrite3dVectorFieldFloat64" );
109 	BLOCK_INIT ( f );
110 	CHECK_WRITABLE_MODE ( f );
111 	CHECK_TIMEGROUP ( f );
112 	CHECK_LAYOUT ( f );
113 
114 	h5part_int64_t herr = _H5Block_create_field_group ( f, name );
115 	if ( herr < 0 ) return herr;
116 
117 	herr = _H5Block_write_data ( f, "0", x_data, H5T_NATIVE_DOUBLE );
118 	if ( herr < 0 ) return herr;
119 	herr = _H5Block_write_data ( f, "1", y_data, H5T_NATIVE_DOUBLE );
120 	if ( herr < 0 ) return herr;
121 	herr = _H5Block_write_data ( f, "2", z_data, H5T_NATIVE_DOUBLE );
122 	if ( herr < 0 ) return herr;
123 
124 	herr = _H5Block_close_field_group ( f );
125 	if ( herr < 0 ) return herr;
126 
127 	return H5PART_SUCCESS;
128 }
129 
130 /*!
131   \ingroup h5block_data
132 */
133 /*!
134   Read a 3-dimensional field \c name with 3-dimensional vectors as values
135   from the buffers starting at \c x_data, \c y_data and \c z_data to the
136   current time-step using the defined field layout. Values are 3-dimensional
137   vectors with floating points (64-bit) values.
138 
139   You must use the Fortran indexing scheme to access items in \c data.
140 
141   \return \c H5PART_SUCCESS or error code
142 */
143 h5part_int64_t
H5Block3dRead3dVectorFieldFloat64(H5PartFile * f,const char * name,h5part_float64_t * x_data,h5part_float64_t * y_data,h5part_float64_t * z_data)144 H5Block3dRead3dVectorFieldFloat64 (
145 	H5PartFile *f,		  /*!< IN: file handle */
146 	const char *name,	       /*!< IN: name of dataset to write */
147 	h5part_float64_t *x_data, /*!< OUT: X axis data */
148 	h5part_float64_t *y_data, /*!< OUT: Y axis data */
149 	h5part_float64_t *z_data  /*!< OUT: Z axis data */
150 	) {
151 
152 	SET_FNAME ( "H5Block3dRead3dVectorFieldFloat64" );
153 	BLOCK_INIT ( f );
154 	CHECK_TIMEGROUP ( f );
155 	CHECK_LAYOUT ( f );
156 
157 	h5part_int64_t herr = _H5Block_open_field_group ( f, name );
158 	if ( herr < 0 ) return herr;
159 
160 	herr = _H5Block_read_data ( f, "0", x_data, H5T_NATIVE_DOUBLE );
161 	if ( herr < 0 ) return herr;
162 	herr = _H5Block_read_data ( f, "1", y_data, H5T_NATIVE_DOUBLE );
163 	if ( herr < 0 ) return herr;
164 	herr = _H5Block_read_data ( f, "2", z_data, H5T_NATIVE_DOUBLE );
165 	if ( herr < 0 ) return herr;
166 
167 	herr = _H5Block_close_field_group ( f );
168 	if ( herr < 0 ) return herr;
169 
170 	return H5PART_SUCCESS;
171 }
172 
173 /*!
174   \ingroup h5block_data
175 
176   Write a 3-dimensional field \c name from the buffer starting at \c data
177   to the current time-step using the defined field layout. Values are
178   floating points (32-bit).
179 
180   You must use the Fortran indexing scheme to access items in \c data.
181 
182   \return \c H5PART_SUCCESS or error code
183 */
184 h5part_int64_t
H5Block3dWriteScalarFieldFloat32(H5PartFile * f,const char * name,const h5part_float32_t * data)185 H5Block3dWriteScalarFieldFloat32 (
186 	H5PartFile *f,		  /*!< IN: file handle */
187 	const char *name,	       /*!< IN: name of dataset to write */
188 	const h5part_float32_t *data      /*!< IN: scalar data to write */
189 	) {
190 
191 	SET_FNAME ( "H5Block3dWriteScalarFieldFloat32" );
192 	BLOCK_INIT ( f );
193 	CHECK_WRITABLE_MODE ( f );
194 	CHECK_TIMEGROUP ( f );
195 	CHECK_LAYOUT ( f );
196 
197 	h5part_int64_t herr = _H5Block_create_field_group ( f, name );
198 	if ( herr < 0 ) return herr;
199 
200 	herr = _H5Block_write_data ( f, "0", data, H5T_NATIVE_FLOAT );
201 	if ( herr < 0 ) return herr;
202 
203 	herr = _H5Block_close_field_group ( f );
204 	if ( herr < 0 ) return herr;
205 
206 	return H5PART_SUCCESS;
207 }
208 
209 /*!
210   \ingroup h5block_data
211 
212   Read a 3-dimensional field \c name into the buffer starting at \c data from
213   the current time-step using the defined field layout. Values are
214   floating points (32-bit).
215 
216   You must use the Fortran indexing scheme to access items in \c data.
217 
218   \return \c H5PART_SUCCESS or error code
219 */
220 h5part_int64_t
H5Block3dReadScalarFieldFloat32(H5PartFile * f,const char * name,h5part_float32_t * data)221 H5Block3dReadScalarFieldFloat32 (
222 	H5PartFile *f,		  /*!< IN: file handle */
223 	const char *name,	       /*!< IN: name of dataset to read */
224 	h5part_float32_t *data	  /*!< OUT: ptr to read buffer */
225 	) {
226 
227 	SET_FNAME ( "H5Block3dReadScalarFieldFloat32" );
228 	BLOCK_INIT ( f );
229 	CHECK_TIMEGROUP ( f );
230 	CHECK_LAYOUT ( f );
231 
232 	h5part_int64_t herr = _H5Block_open_field_group ( f, name );
233 	if ( herr < 0 ) return herr;
234 
235 	herr = _H5Block_read_data ( f, "0", data, H5T_NATIVE_FLOAT );
236 	if ( herr < 0 ) return herr;
237 
238 	herr = _H5Block_close_field_group ( f );
239 	if ( herr < 0 ) return herr;
240 
241 	return H5PART_SUCCESS;
242 }
243 
244 /*!
245   \ingroup h5block_data
246 */
247 /*!
248   Write a 3-dimensional field \c name with 3-dimensional vectors as values
249   from the buffers starting at \c x_data, \c y_data and \c z_data to the
250   current time-step using the defined field layout. Values are 3-dimensional
251   vectors with floating points (32-bit) values.
252 
253   You must use the Fortran indexing scheme to access items in \c data.
254 
255   \return \c H5PART_SUCCESS or error code
256 */
257 h5part_int64_t
H5Block3dWrite3dVectorFieldFloat32(H5PartFile * f,const char * name,const h5part_float32_t * x_data,const h5part_float32_t * y_data,const h5part_float32_t * z_data)258 H5Block3dWrite3dVectorFieldFloat32 (
259 	H5PartFile *f,		  /*!< IN: file handle */
260 	const char *name,	       /*!< IN: name of dataset to write */
261 	const h5part_float32_t *x_data, /*!< IN: X axis data */
262 	const h5part_float32_t *y_data, /*!< IN: Y axis data */
263 	const h5part_float32_t *z_data  /*!< IN: Z axis data */
264 	) {
265 
266 	SET_FNAME ( "H5Block3dWrite3dVectorFieldFloat32" );
267 	BLOCK_INIT ( f );
268 	CHECK_WRITABLE_MODE ( f );
269 	CHECK_TIMEGROUP ( f );
270 	CHECK_LAYOUT ( f );
271 
272 	h5part_int64_t herr = _H5Block_create_field_group ( f, name );
273 	if ( herr < 0 ) return herr;
274 
275 	herr = _H5Block_write_data ( f, "0", x_data, H5T_NATIVE_FLOAT );
276 	if ( herr < 0 ) return herr;
277 	herr = _H5Block_write_data ( f, "1", y_data, H5T_NATIVE_FLOAT );
278 	if ( herr < 0 ) return herr;
279 	herr = _H5Block_write_data ( f, "2", z_data, H5T_NATIVE_FLOAT );
280 	if ( herr < 0 ) return herr;
281 
282 	herr = _H5Block_close_field_group ( f );
283 	if ( herr < 0 ) return herr;
284 
285 	return H5PART_SUCCESS;
286 }
287 
288 /*!
289   \ingroup h5block_data
290 */
291 /*!
292   Read a 3-dimensional field \c name with 3-dimensional vectors as values
293   from the buffers starting at \c x_data, \c y_data and \c z_data to the
294   current time-step using the defined field layout. Values are 3-dimensional
295   vectors with floating points (32-bit) values.
296 
297   You must use the Fortran indexing scheme to access items in \c data.
298 
299   \return \c H5PART_SUCCESS or error code
300 */
301 h5part_int64_t
H5Block3dRead3dVectorFieldFloat32(H5PartFile * f,const char * name,h5part_float32_t * x_data,h5part_float32_t * y_data,h5part_float32_t * z_data)302 H5Block3dRead3dVectorFieldFloat32 (
303 	H5PartFile *f,		  /*!< IN: file handle */
304 	const char *name,	       /*!< IN: name of dataset to write */
305 	h5part_float32_t *x_data, /*!< OUT: X axis data */
306 	h5part_float32_t *y_data, /*!< OUT: Y axis data */
307 	h5part_float32_t *z_data  /*!< OUT: Z axis data */
308 	) {
309 
310 	SET_FNAME ( "H5Block3dRead3dVectorFieldFloat32" );
311 	BLOCK_INIT ( f );
312 	CHECK_TIMEGROUP ( f );
313 	CHECK_LAYOUT ( f );
314 
315 	h5part_int64_t herr = _H5Block_open_field_group ( f, name );
316 	if ( herr < 0 ) return herr;
317 
318 	herr = _H5Block_read_data ( f, "0", x_data, H5T_NATIVE_FLOAT );
319 	if ( herr < 0 ) return herr;
320 	herr = _H5Block_read_data ( f, "1", y_data, H5T_NATIVE_FLOAT );
321 	if ( herr < 0 ) return herr;
322 	herr = _H5Block_read_data ( f, "2", z_data, H5T_NATIVE_FLOAT );
323 	if ( herr < 0 ) return herr;
324 
325 	herr = _H5Block_close_field_group ( f );
326 	if ( herr < 0 ) return herr;
327 
328 	return H5PART_SUCCESS;
329 }
330 
331 /*!
332   \ingroup h5block_data
333 
334   Write a 3-dimensional field \c name from the buffer starting at \c data
335   to the current time-step using the defined field layout. Values are
336   integers (64-bit).
337 
338   You must use the Fortran indexing scheme to access items in \c data.
339 
340   \return \c H5PART_SUCCESS or error code
341 */
342 h5part_int64_t
H5Block3dWriteScalarFieldInt64(H5PartFile * f,const char * name,const h5part_int64_t * data)343 H5Block3dWriteScalarFieldInt64 (
344 	H5PartFile *f,		  /*!< IN: file handle */
345 	const char *name,	       /*!< IN: name of dataset to write */
346 	const h5part_int64_t *data      /*!< IN: scalar data to write */
347 	) {
348 
349 	SET_FNAME ( "H5Block3dWriteScalarFieldInt64" );
350 	BLOCK_INIT ( f );
351 	CHECK_WRITABLE_MODE ( f );
352 	CHECK_TIMEGROUP ( f );
353 	CHECK_LAYOUT ( f );
354 
355 	h5part_int64_t herr = _H5Block_create_field_group ( f, name );
356 	if ( herr < 0 ) return herr;
357 
358 	herr = _H5Block_write_data ( f, "0", data, H5T_NATIVE_INT64 );
359 	if ( herr < 0 ) return herr;
360 
361 	herr = _H5Block_close_field_group ( f );
362 	if ( herr < 0 ) return herr;
363 
364 	return H5PART_SUCCESS;
365 }
366 
367 /*!
368   \ingroup h5block_data
369 
370   Read a 3-dimensional field \c name into the buffer starting at \c data from
371   the current time-step using the defined field layout. Values are
372   integers (64-bit).
373 
374   You must use the Fortran indexing scheme to access items in \c data.
375 
376   \return \c H5PART_SUCCESS or error code
377 */
378 h5part_int64_t
H5Block3dReadScalarFieldInt64(H5PartFile * f,const char * name,h5part_int64_t * data)379 H5Block3dReadScalarFieldInt64 (
380 	H5PartFile *f,		  /*!< IN: file handle */
381 	const char *name,	       /*!< IN: name of dataset to read */
382 	h5part_int64_t *data	  /*!< OUT: ptr to read buffer */
383 	) {
384 
385 	SET_FNAME ( "H5Block3dReadScalarFieldInt64" );
386 	BLOCK_INIT ( f );
387 	CHECK_TIMEGROUP ( f );
388 	CHECK_LAYOUT ( f );
389 
390 	h5part_int64_t herr = _H5Block_open_field_group ( f, name );
391 	if ( herr < 0 ) return herr;
392 
393 	herr = _H5Block_read_data ( f, "0", data, H5T_NATIVE_INT64 );
394 	if ( herr < 0 ) return herr;
395 
396 	herr = _H5Block_close_field_group ( f );
397 	if ( herr < 0 ) return herr;
398 
399 	return H5PART_SUCCESS;
400 }
401 
402 /*!
403   \ingroup h5block_data
404 */
405 /*!
406   Write a 3-dimensional field \c name with 3-dimensional vectors as values
407   from the buffers starting at \c x_data, \c y_data and \c z_data to the
408   current time-step using the defined field layout. Values are 3-dimensional
409   vectors with integers (64-bit) values.
410 
411   You must use the Fortran indexing scheme to access items in \c data.
412 
413   \return \c H5PART_SUCCESS or error code
414 */
415 h5part_int64_t
H5Block3dWrite3dVectorFieldInt64(H5PartFile * f,const char * name,const h5part_int64_t * x_data,const h5part_int64_t * y_data,const h5part_int64_t * z_data)416 H5Block3dWrite3dVectorFieldInt64 (
417 	H5PartFile *f,		  /*!< IN: file handle */
418 	const char *name,	       /*!< IN: name of dataset to write */
419 	const h5part_int64_t *x_data, /*!< IN: X axis data */
420 	const h5part_int64_t *y_data, /*!< IN: Y axis data */
421 	const h5part_int64_t *z_data  /*!< IN: Z axis data */
422 	) {
423 
424 	SET_FNAME ( "H5Block3dWrite3dVectorFieldInt64" );
425 	BLOCK_INIT ( f );
426 	CHECK_WRITABLE_MODE ( f );
427 	CHECK_TIMEGROUP ( f );
428 	CHECK_LAYOUT ( f );
429 
430 	h5part_int64_t herr = _H5Block_create_field_group ( f, name );
431 	if ( herr < 0 ) return herr;
432 
433 	herr = _H5Block_write_data ( f, "0", x_data, H5T_NATIVE_INT64 );
434 	if ( herr < 0 ) return herr;
435 	herr = _H5Block_write_data ( f, "1", y_data, H5T_NATIVE_INT64 );
436 	if ( herr < 0 ) return herr;
437 	herr = _H5Block_write_data ( f, "2", z_data, H5T_NATIVE_INT64 );
438 	if ( herr < 0 ) return herr;
439 
440 	herr = _H5Block_close_field_group ( f );
441 	if ( herr < 0 ) return herr;
442 
443 	return H5PART_SUCCESS;
444 }
445 
446 /*!
447   \ingroup h5block_data
448 */
449 /*!
450   Read a 3-dimensional field \c name with 3-dimensional vectors as values
451   from the buffers starting at \c x_data, \c y_data and \c z_data to the
452   current time-step using the defined field layout. Values are 3-dimensional
453   vectors with integers (64-bit) values.
454 
455   You must use the Fortran indexing scheme to access items in \c data.
456 
457   \return \c H5PART_SUCCESS or error code
458 */
459 h5part_int64_t
H5Block3dRead3dVectorFieldInt64(H5PartFile * f,const char * name,h5part_int64_t * x_data,h5part_int64_t * y_data,h5part_int64_t * z_data)460 H5Block3dRead3dVectorFieldInt64 (
461 	H5PartFile *f,		  /*!< IN: file handle */
462 	const char *name,	       /*!< IN: name of dataset to write */
463 	h5part_int64_t *x_data, /*!< OUT: X axis data */
464 	h5part_int64_t *y_data, /*!< OUT: Y axis data */
465 	h5part_int64_t *z_data  /*!< OUT: Z axis data */
466 	) {
467 
468 	SET_FNAME ( "H5Block3dRead3dVectorFieldInt64" );
469 	BLOCK_INIT ( f );
470 	CHECK_TIMEGROUP ( f );
471 	CHECK_LAYOUT ( f );
472 
473 	h5part_int64_t herr = _H5Block_open_field_group ( f, name );
474 	if ( herr < 0 ) return herr;
475 
476 	herr = _H5Block_read_data ( f, "0", x_data, H5T_NATIVE_INT64 );
477 	if ( herr < 0 ) return herr;
478 	herr = _H5Block_read_data ( f, "1", y_data, H5T_NATIVE_INT64 );
479 	if ( herr < 0 ) return herr;
480 	herr = _H5Block_read_data ( f, "2", z_data, H5T_NATIVE_INT64 );
481 	if ( herr < 0 ) return herr;
482 
483 	herr = _H5Block_close_field_group ( f );
484 	if ( herr < 0 ) return herr;
485 
486 	return H5PART_SUCCESS;
487 }
488 
489 /*!
490   \ingroup h5block_data
491 
492   Write a 3-dimensional field \c name from the buffer starting at \c data
493   to the current time-step using the defined field layout. Values are
494   integers (32-bit).
495 
496   You must use the Fortran indexing scheme to access items in \c data.
497 
498   \return \c H5PART_SUCCESS or error code
499 */
500 h5part_int64_t
H5Block3dWriteScalarFieldInt32(H5PartFile * f,const char * name,const h5part_int32_t * data)501 H5Block3dWriteScalarFieldInt32 (
502 	H5PartFile *f,		  /*!< IN: file handle */
503 	const char *name,	       /*!< IN: name of dataset to write */
504 	const h5part_int32_t *data      /*!< IN: scalar data to write */
505 	) {
506 
507 	SET_FNAME ( "H5Block3dWriteScalarFieldInt32" );
508 	BLOCK_INIT ( f );
509 	CHECK_WRITABLE_MODE ( f );
510 	CHECK_TIMEGROUP ( f );
511 	CHECK_LAYOUT ( f );
512 
513 	h5part_int64_t herr = _H5Block_create_field_group ( f, name );
514 	if ( herr < 0 ) return herr;
515 
516 	herr = _H5Block_write_data ( f, "0", data, H5T_NATIVE_INT32 );
517 	if ( herr < 0 ) return herr;
518 
519 	herr = _H5Block_close_field_group ( f );
520 	if ( herr < 0 ) return herr;
521 
522 	return H5PART_SUCCESS;
523 }
524 
525 /*!
526   \ingroup h5block_data
527 
528   Read a 3-dimensional field \c name into the buffer starting at \c data from
529   the current time-step using the defined field layout. Values are
530   integers (32-bit).
531 
532   You must use the Fortran indexing scheme to access items in \c data.
533 
534   \return \c H5PART_SUCCESS or error code
535 */
536 h5part_int64_t
H5Block3dReadScalarFieldInt32(H5PartFile * f,const char * name,h5part_int32_t * data)537 H5Block3dReadScalarFieldInt32 (
538 	H5PartFile *f,		  /*!< IN: file handle */
539 	const char *name,	       /*!< IN: name of dataset to read */
540 	h5part_int32_t *data	  /*!< OUT: ptr to read buffer */
541 	) {
542 
543 	SET_FNAME ( "H5Block3dReadScalarFieldInt32" );
544 	BLOCK_INIT ( f );
545 	CHECK_TIMEGROUP ( f );
546 	CHECK_LAYOUT ( f );
547 
548 	h5part_int64_t herr = _H5Block_open_field_group ( f, name );
549 	if ( herr < 0 ) return herr;
550 
551 	herr = _H5Block_read_data ( f, "0", data, H5T_NATIVE_INT32 );
552 	if ( herr < 0 ) return herr;
553 
554 	herr = _H5Block_close_field_group ( f );
555 	if ( herr < 0 ) return herr;
556 
557 	return H5PART_SUCCESS;
558 }
559 
560 /*!
561   \ingroup h5block_data
562 */
563 /*!
564   Write a 3-dimensional field \c name with 3-dimensional vectors as values
565   from the buffers starting at \c x_data, \c y_data and \c z_data to the
566   current time-step using the defined field layout. Values are 3-dimensional
567   vectors with integers (32-bit) values.
568 
569   You must use the Fortran indexing scheme to access items in \c data.
570 
571   \return \c H5PART_SUCCESS or error code
572 */
573 h5part_int64_t
H5Block3dWrite3dVectorFieldInt32(H5PartFile * f,const char * name,const h5part_int32_t * x_data,const h5part_int32_t * y_data,const h5part_int32_t * z_data)574 H5Block3dWrite3dVectorFieldInt32 (
575 	H5PartFile *f,		  /*!< IN: file handle */
576 	const char *name,	       /*!< IN: name of dataset to write */
577 	const h5part_int32_t *x_data, /*!< IN: X axis data */
578 	const h5part_int32_t *y_data, /*!< IN: Y axis data */
579 	const h5part_int32_t *z_data  /*!< IN: Z axis data */
580 	) {
581 
582 	SET_FNAME ( "H5Block3dWrite3dVectorFieldInt32" );
583 	BLOCK_INIT ( f );
584 	CHECK_WRITABLE_MODE ( f );
585 	CHECK_TIMEGROUP ( f );
586 	CHECK_LAYOUT ( f );
587 
588 	h5part_int64_t herr = _H5Block_create_field_group ( f, name );
589 	if ( herr < 0 ) return herr;
590 
591 	herr = _H5Block_write_data ( f, "0", x_data, H5T_NATIVE_INT32 );
592 	if ( herr < 0 ) return herr;
593 	herr = _H5Block_write_data ( f, "1", y_data, H5T_NATIVE_INT32 );
594 	if ( herr < 0 ) return herr;
595 	herr = _H5Block_write_data ( f, "2", z_data, H5T_NATIVE_INT32 );
596 	if ( herr < 0 ) return herr;
597 
598 	herr = _H5Block_close_field_group ( f );
599 	if ( herr < 0 ) return herr;
600 
601 	return H5PART_SUCCESS;
602 }
603 
604 /*!
605   \ingroup h5block_data
606 */
607 /*!
608   Read a 3-dimensional field \c name with 3-dimensional vectors as values
609   from the buffers starting at \c x_data, \c y_data and \c z_data to the
610   current time-step using the defined field layout. Values are 3-dimensional
611   vectors with integers (32-bit) values.
612 
613   You must use the Fortran indexing scheme to access items in \c data.
614 
615   \return \c H5PART_SUCCESS or error code
616 */
617 h5part_int64_t
H5Block3dRead3dVectorFieldInt32(H5PartFile * f,const char * name,h5part_int32_t * x_data,h5part_int32_t * y_data,h5part_int32_t * z_data)618 H5Block3dRead3dVectorFieldInt32 (
619 	H5PartFile *f,		  /*!< IN: file handle */
620 	const char *name,	       /*!< IN: name of dataset to write */
621 	h5part_int32_t *x_data, /*!< OUT: X axis data */
622 	h5part_int32_t *y_data, /*!< OUT: Y axis data */
623 	h5part_int32_t *z_data  /*!< OUT: Z axis data */
624 	) {
625 
626 	SET_FNAME ( "H5Block3dRead3dVectorFieldInt32" );
627 	BLOCK_INIT ( f );
628 	CHECK_TIMEGROUP ( f );
629 	CHECK_LAYOUT ( f );
630 
631 	h5part_int64_t herr = _H5Block_open_field_group ( f, name );
632 	if ( herr < 0 ) return herr;
633 
634 	herr = _H5Block_read_data ( f, "0", x_data, H5T_NATIVE_INT32 );
635 	if ( herr < 0 ) return herr;
636 	herr = _H5Block_read_data ( f, "1", y_data, H5T_NATIVE_INT32 );
637 	if ( herr < 0 ) return herr;
638 	herr = _H5Block_read_data ( f, "2", z_data, H5T_NATIVE_INT32 );
639 	if ( herr < 0 ) return herr;
640 
641 	herr = _H5Block_close_field_group ( f );
642 	if ( herr < 0 ) return herr;
643 
644 	return H5PART_SUCCESS;
645 }
646 
647 /*!
648   \ingroup h5block_attrib
649 
650   Write \c attrib_value with type floating points (64-bit) as attribute \c attrib_name
651   to field \c field_name.
652 
653   \return \c H5PART_SUCCESS or error code
654 */
655 h5part_int64_t
H5BlockWriteFieldAttribFloat64(H5PartFile * f,const char * field_name,const char * attrib_name,const h5part_float64_t * attrib_value,const h5part_int64_t attrib_nelem)656 H5BlockWriteFieldAttribFloat64 (
657 	H5PartFile *f,				/*!< IN: file handle */
658 	const char *field_name,			/*!< IN: field name */
659 	const char *attrib_name,		/*!< IN: attribute name */
660 	const h5part_float64_t *attrib_value,		/*!< IN: attribute value */
661 	const h5part_int64_t attrib_nelem	/*!< IN: number of elements */
662 	) {
663 
664 	SET_FNAME ( "H5BlockWriteFieldAttribFloat64" );
665 	BLOCK_INIT ( f );
666 	CHECK_WRITABLE_MODE( f );
667 	CHECK_TIMEGROUP( f );
668 
669 	return _write_field_attrib (
670 		f,
671 		field_name,
672 		attrib_name,
673                 H5T_NATIVE_DOUBLE,
674                 attrib_value,
675 		attrib_nelem );
676 }
677 
678 /*!
679   \ingroup h5block_attrib
680 
681   Write \c attrib_value with type floating points (32-bit) as attribute \c attrib_name
682   to field \c field_name.
683 
684   \return \c H5PART_SUCCESS or error code
685 */
686 h5part_int64_t
H5BlockWriteFieldAttribFloat32(H5PartFile * f,const char * field_name,const char * attrib_name,const h5part_float32_t * attrib_value,const h5part_int64_t attrib_nelem)687 H5BlockWriteFieldAttribFloat32 (
688 	H5PartFile *f,				/*!< IN: file handle */
689 	const char *field_name,			/*!< IN: field name */
690 	const char *attrib_name,		/*!< IN: attribute name */
691 	const h5part_float32_t *attrib_value,		/*!< IN: attribute value */
692 	const h5part_int64_t attrib_nelem	/*!< IN: number of elements */
693 	) {
694 
695 	SET_FNAME ( "H5BlockWriteFieldAttribFloat32" );
696 	BLOCK_INIT ( f );
697 	CHECK_WRITABLE_MODE( f );
698 	CHECK_TIMEGROUP( f );
699 
700 	return _write_field_attrib (
701 		f,
702 		field_name,
703 		attrib_name,
704                 H5T_NATIVE_FLOAT,
705                 attrib_value,
706 		attrib_nelem );
707 }
708 
709 /*!
710   \ingroup h5block_attrib
711 
712   Write \c attrib_value with type integers (64-bit) as attribute \c attrib_name
713   to field \c field_name.
714 
715   \return \c H5PART_SUCCESS or error code
716 */
717 h5part_int64_t
H5BlockWriteFieldAttribInt64(H5PartFile * f,const char * field_name,const char * attrib_name,const h5part_int64_t * attrib_value,const h5part_int64_t attrib_nelem)718 H5BlockWriteFieldAttribInt64 (
719 	H5PartFile *f,				/*!< IN: file handle */
720 	const char *field_name,			/*!< IN: field name */
721 	const char *attrib_name,		/*!< IN: attribute name */
722 	const h5part_int64_t *attrib_value,		/*!< IN: attribute value */
723 	const h5part_int64_t attrib_nelem	/*!< IN: number of elements */
724 	) {
725 
726 	SET_FNAME ( "H5BlockWriteFieldAttribInt64" );
727 	BLOCK_INIT ( f );
728 	CHECK_WRITABLE_MODE( f );
729 	CHECK_TIMEGROUP( f );
730 
731 	return _write_field_attrib (
732 		f,
733 		field_name,
734 		attrib_name,
735                 H5T_NATIVE_INT64,
736                 attrib_value,
737 		attrib_nelem );
738 }
739 
740 /*!
741   \ingroup h5block_attrib
742 
743   Write \c attrib_value with type integers (32-bit) as attribute \c attrib_name
744   to field \c field_name.
745 
746   \return \c H5PART_SUCCESS or error code
747 */
748 h5part_int64_t
H5BlockWriteFieldAttribInt32(H5PartFile * f,const char * field_name,const char * attrib_name,const h5part_int32_t * attrib_value,const h5part_int64_t attrib_nelem)749 H5BlockWriteFieldAttribInt32 (
750 	H5PartFile *f,				/*!< IN: file handle */
751 	const char *field_name,			/*!< IN: field name */
752 	const char *attrib_name,		/*!< IN: attribute name */
753 	const h5part_int32_t *attrib_value,		/*!< IN: attribute value */
754 	const h5part_int64_t attrib_nelem	/*!< IN: number of elements */
755 	) {
756 
757 	SET_FNAME ( "H5BlockWriteFieldAttribInt32" );
758 	BLOCK_INIT ( f );
759 	CHECK_WRITABLE_MODE( f );
760 	CHECK_TIMEGROUP( f );
761 
762 	return _write_field_attrib (
763 		f,
764 		field_name,
765 		attrib_name,
766                 H5T_NATIVE_INT32,
767                 attrib_value,
768 		attrib_nelem );
769 }
770