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