122e913f08
* read/write call variants for different datatypes * HDF5 properties tuned for lustre filesystems and the Cray XT (enabled using flags passed during file open) * HDF5 chunking for field data * HDF5 alignment (set during file open) * support for both HDF5 1.6 and 1.8 using #if statements * a new error reporting level: debug_detail (HDF5 errors are now printed at debug level 1 by default) These changes have undergone limited testing. I will begin using this version for my H5Part projects so that I can test it more thoroughly. ~Mark
432 lines
11 KiB
C
432 lines
11 KiB
C
|
|
#include "H5Part.h"
|
|
#include "H5PartPrivate.h"
|
|
#include "H5Block.h"
|
|
#include "H5BlockReadWrite.h"
|
|
#include "Underscore.h"
|
|
|
|
#if defined(F77_SINGLE_UNDERSCORE)
|
|
#define F77NAME(a,b) a
|
|
#elif defined(F77_CRAY_UNDERSCORE)
|
|
#define F77NAME(a,b) b
|
|
#elif defined(F77_NO_UNDERSCORE)
|
|
#else
|
|
#error Error, no way to determine how to construct fortran bindings
|
|
#endif
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_write_scalar_field_r8 F77NAME ( \
|
|
h5bl_3d_write_scalar_field_r8_, \
|
|
H5BL_3D_WRITE_SCALAR_FIELD_R8 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_write_scalar_field_r8 (
|
|
h5part_int64_t *f,
|
|
const char *field_name,
|
|
const h5part_float64_t *data,
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWriteScalarFieldFloat64 (
|
|
filehandle, field_name2, data );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_read_scalar_field_r8 F77NAME ( \
|
|
h5bl_3d_read_scalar_field_r8_, \
|
|
H5BL_3D_READ_SCALAR_FIELD_R8 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_read_scalar_field_r8 (
|
|
h5part_int64_t *f,
|
|
const char *field_name,
|
|
h5part_float64_t *data,
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWriteScalarFieldFloat64 (
|
|
filehandle, field_name2, data );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_write_3dvector_field_r8 F77NAME ( \
|
|
h5bl_3d_write_3dvector_field_r8_, \
|
|
H5BL_3D_WRITE_3DVECTOR_FIELD_R8 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_write_3dvector_field_r8 (
|
|
h5part_int64_t *f, /*!< file handle */
|
|
const char *field_name, /*!< name of the data set */
|
|
const h5part_float64_t *xval, /*!< array of x component data */
|
|
const h5part_float64_t *yval, /*!< array of y component data */
|
|
const h5part_float64_t *zval, /*!< array of z component data */
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWrite3dVectorFieldFloat64 (
|
|
filehandle, field_name2, xval, yval, zval );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_read_3dvector_field_r8 F77NAME ( \
|
|
h5bl_3d_read_3dvector_field_r8_, \
|
|
H5BL_3D_READ_3DVECTOR_FIELD_R8 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_read_3dvector_field_r8 (
|
|
h5part_int64_t *f, /*!< file handle */
|
|
const char *field_name, /*!< name of the data set */
|
|
h5part_float64_t *xval, /*!< array of x component data */
|
|
h5part_float64_t *yval, /*!< array of y component data */
|
|
h5part_float64_t *zval, /*!< array of z component data */
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dRead3dVectorFieldFloat64 (
|
|
filehandle, field_name2, xval, yval, zval );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_write_scalar_field_r4 F77NAME ( \
|
|
h5bl_3d_write_scalar_field_r4_, \
|
|
H5BL_3D_WRITE_SCALAR_FIELD_R4 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_write_scalar_field_r4 (
|
|
h5part_int64_t *f,
|
|
const char *field_name,
|
|
const h5part_float32_t *data,
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWriteScalarFieldFloat32 (
|
|
filehandle, field_name2, data );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_read_scalar_field_r4 F77NAME ( \
|
|
h5bl_3d_read_scalar_field_r4_, \
|
|
H5BL_3D_READ_SCALAR_FIELD_R4 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_read_scalar_field_r4 (
|
|
h5part_int64_t *f,
|
|
const char *field_name,
|
|
h5part_float32_t *data,
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWriteScalarFieldFloat32 (
|
|
filehandle, field_name2, data );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_write_3dvector_field_r4 F77NAME ( \
|
|
h5bl_3d_write_3dvector_field_r4_, \
|
|
H5BL_3D_WRITE_3DVECTOR_FIELD_R4 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_write_3dvector_field_r4 (
|
|
h5part_int64_t *f, /*!< file handle */
|
|
const char *field_name, /*!< name of the data set */
|
|
const h5part_float32_t *xval, /*!< array of x component data */
|
|
const h5part_float32_t *yval, /*!< array of y component data */
|
|
const h5part_float32_t *zval, /*!< array of z component data */
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWrite3dVectorFieldFloat32 (
|
|
filehandle, field_name2, xval, yval, zval );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_read_3dvector_field_r4 F77NAME ( \
|
|
h5bl_3d_read_3dvector_field_r4_, \
|
|
H5BL_3D_READ_3DVECTOR_FIELD_R4 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_read_3dvector_field_r4 (
|
|
h5part_int64_t *f, /*!< file handle */
|
|
const char *field_name, /*!< name of the data set */
|
|
h5part_float32_t *xval, /*!< array of x component data */
|
|
h5part_float32_t *yval, /*!< array of y component data */
|
|
h5part_float32_t *zval, /*!< array of z component data */
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dRead3dVectorFieldFloat32 (
|
|
filehandle, field_name2, xval, yval, zval );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_write_scalar_field_i8 F77NAME ( \
|
|
h5bl_3d_write_scalar_field_i8_, \
|
|
H5BL_3D_WRITE_SCALAR_FIELD_I8 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_write_scalar_field_i8 (
|
|
h5part_int64_t *f,
|
|
const char *field_name,
|
|
const h5part_int64_t *data,
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWriteScalarFieldInt64 (
|
|
filehandle, field_name2, data );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_read_scalar_field_i8 F77NAME ( \
|
|
h5bl_3d_read_scalar_field_i8_, \
|
|
H5BL_3D_READ_SCALAR_FIELD_I8 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_read_scalar_field_i8 (
|
|
h5part_int64_t *f,
|
|
const char *field_name,
|
|
h5part_int64_t *data,
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWriteScalarFieldInt64 (
|
|
filehandle, field_name2, data );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_write_3dvector_field_i8 F77NAME ( \
|
|
h5bl_3d_write_3dvector_field_i8_, \
|
|
H5BL_3D_WRITE_3DVECTOR_FIELD_I8 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_write_3dvector_field_i8 (
|
|
h5part_int64_t *f, /*!< file handle */
|
|
const char *field_name, /*!< name of the data set */
|
|
const h5part_int64_t *xval, /*!< array of x component data */
|
|
const h5part_int64_t *yval, /*!< array of y component data */
|
|
const h5part_int64_t *zval, /*!< array of z component data */
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWrite3dVectorFieldInt64 (
|
|
filehandle, field_name2, xval, yval, zval );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_read_3dvector_field_i8 F77NAME ( \
|
|
h5bl_3d_read_3dvector_field_i8_, \
|
|
H5BL_3D_READ_3DVECTOR_FIELD_I8 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_read_3dvector_field_i8 (
|
|
h5part_int64_t *f, /*!< file handle */
|
|
const char *field_name, /*!< name of the data set */
|
|
h5part_int64_t *xval, /*!< array of x component data */
|
|
h5part_int64_t *yval, /*!< array of y component data */
|
|
h5part_int64_t *zval, /*!< array of z component data */
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dRead3dVectorFieldInt64 (
|
|
filehandle, field_name2, xval, yval, zval );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_write_scalar_field_i4 F77NAME ( \
|
|
h5bl_3d_write_scalar_field_i4_, \
|
|
H5BL_3D_WRITE_SCALAR_FIELD_I4 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_write_scalar_field_i4 (
|
|
h5part_int64_t *f,
|
|
const char *field_name,
|
|
const h5part_int32_t *data,
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWriteScalarFieldInt32 (
|
|
filehandle, field_name2, data );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_read_scalar_field_i4 F77NAME ( \
|
|
h5bl_3d_read_scalar_field_i4_, \
|
|
H5BL_3D_READ_SCALAR_FIELD_I4 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_read_scalar_field_i4 (
|
|
h5part_int64_t *f,
|
|
const char *field_name,
|
|
h5part_int32_t *data,
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWriteScalarFieldInt32 (
|
|
filehandle, field_name2, data );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_write_3dvector_field_i4 F77NAME ( \
|
|
h5bl_3d_write_3dvector_field_i4_, \
|
|
H5BL_3D_WRITE_3DVECTOR_FIELD_I4 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_write_3dvector_field_i4 (
|
|
h5part_int64_t *f, /*!< file handle */
|
|
const char *field_name, /*!< name of the data set */
|
|
const h5part_int32_t *xval, /*!< array of x component data */
|
|
const h5part_int32_t *yval, /*!< array of y component data */
|
|
const h5part_int32_t *zval, /*!< array of z component data */
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dWrite3dVectorFieldInt32 (
|
|
filehandle, field_name2, xval, yval, zval );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|
|
|
|
#if ! defined(F77_NO_UNDERSCORE)
|
|
#define h5bl_3d_read_3dvector_field_i4 F77NAME ( \
|
|
h5bl_3d_read_3dvector_field_i4_, \
|
|
H5BL_3D_READ_3DVECTOR_FIELD_I4 )
|
|
#endif
|
|
|
|
h5part_int64_t
|
|
h5bl_3d_read_3dvector_field_i4 (
|
|
h5part_int64_t *f, /*!< file handle */
|
|
const char *field_name, /*!< name of the data set */
|
|
h5part_int32_t *xval, /*!< array of x component data */
|
|
h5part_int32_t *yval, /*!< array of y component data */
|
|
h5part_int32_t *zval, /*!< array of z component data */
|
|
const int l_field_name
|
|
) {
|
|
|
|
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
|
|
|
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
|
|
|
h5part_int64_t herr = H5Block3dRead3dVectorFieldInt32 (
|
|
filehandle, field_name2, xval, yval, zval );
|
|
|
|
free ( field_name2 );
|
|
return herr;
|
|
}
|