#include #include #include "testframe.h" #include "params.h" static void test_read_field_attribs( h5_file_t *file, const char *field_name, int position) { h5_err_t status; char name[ATTR_NAME_SIZE]; char str[ATTR_NAME_SIZE]; h5_int32_t i32; h5_int64_t i64; h5_float32_t f32; h5_float64_t f64; TEST("Reading field attributes"); i64 = H5BlockGetNumFieldAttribs(file, field_name); VALUE(i64 % 5, 0, "file attribute count"); get_attr_name(name, "str", position); status = H5BlockReadFieldAttribString( file, field_name, name, str); RETURN(status, H5_SUCCESS, "H5BlockReadFieldAttribString"); SVALUE(str, ATTR_STR_VAL, "string attribute"); get_attr_name(name, "i32", position); status = H5BlockReadFieldAttribInt32( file, field_name, name, &i32); RETURN(status, H5_SUCCESS, "H5BlockReadFieldAttribInt32"); IVALUE(i32, ATTR_INT32_VAL, "int32 attribute"); get_attr_name(name, "i64", position); status = H5BlockReadFieldAttribInt64( file, field_name, name, &i64); RETURN(status, H5_SUCCESS, "H5BlockReadFieldAttribInt64"); IVALUE(i64, ATTR_INT64_VAL, "int64 attribute"); get_attr_name(name, "f32", position); status = H5BlockReadFieldAttribFloat32( file, field_name, name, &f32); RETURN(status, H5_SUCCESS, "H5BlockReadFieldAttribFloat32"); FVALUE(f32, ATTR_FLOAT_VAL, "float32 attribute"); get_attr_name(name, "f64", position); status = H5BlockReadFieldAttribFloat64( file, field_name, name, &f64); RETURN(status, H5_SUCCESS, "H5BlockReadFieldAttribFloat64"); FVALUE(f64, ATTR_FLOAT_VAL, "float64 attribute"); } static void test_read_data64(h5_file_t *file, int step) { extern h5_size_t grid[3]; extern h5_size_t layout[6]; int i,t; int rank, nprocs; h5_err_t status; h5_int64_t val, type[2]; char name[4]; h5_size_t field_rank[2], field_dims[6], elem_rank[2]; double *e; double *ex,*ey,*ez; h5_int64_t *id; const size_t nelems = (layout[1] - layout[0] + 1) * (layout[3] - layout[2] + 1) * (layout[5] - layout[4] + 1); e=(double*)malloc(nelems*sizeof(double)); ex=(double*)malloc(nelems*sizeof(double)); ey=(double*)malloc(nelems*sizeof(double)); ez=(double*)malloc(nelems*sizeof(double)); id=(h5_int64_t*)malloc(nelems*sizeof(h5_int64_t)); TEST("Verifying dataset info"); #if defined(PARALLEL_IO) MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); #else nprocs = 1; rank = 2; #endif status = H5SetStep(file, step); RETURN(status, H5_SUCCESS, "H5SetStep"); val = H5BlockGetNumFields(file); IVALUE(val, 3, "field count"); for (i=0; i<3; i++) { status = H5BlockGetFieldInfo( file, i, name, 4, field_rank, field_dims, elem_rank, type); RETURN(status, H5_SUCCESS, "H5BlockGetFieldInfo"); status = H5BlockGetFieldInfoByName( file, name, field_rank+1, field_dims+3, elem_rank+1, type+1); RETURN(status, H5_SUCCESS, "H5BlockGetFieldInfoByName"); IVALUE(field_rank[0], field_rank[1], "field rank"); IVALUE(field_dims[0], field_dims[3], "field dims x"); IVALUE(field_dims[1], field_dims[4], "field dims y"); IVALUE(field_dims[2], field_dims[5], "field dims z"); IVALUE(elem_rank[0], elem_rank[1], "elem rank"); IVALUE(type[0], type[1], "field type"); IVALUE(field_rank[0], 3, "field rank"); IVALUE(field_dims[0], grid[0]*NBLOCKX, "field dims x"); IVALUE(field_dims[1], grid[1]*NBLOCKY, "field dims y"); IVALUE(field_dims[2], grid[2]*NBLOCKZ, "field dims z"); if (i==1) { CVALUE(name[0], 'e', "field name"); IVALUE(elem_rank[0], 1, "elem rank"); IVALUE(type[0], H5_FLOAT64_T, "field type"); } else if (i==0) { CVALUE(name[0], 'E', "field name"); IVALUE(elem_rank[0], 3, "elem rank"); IVALUE(type[1], H5_FLOAT64_T, "field type"); } else if (i==2) { CVALUE(name[0], 'i', "field name"); IVALUE(elem_rank[0], 1, "elem rank"); IVALUE(type[1], H5_INT64_T, "field type"); } } #if defined(PARALLEL_IO) TEST("Setting throttle"); status = H5SetThrottle(file, 3); RETURN(status, H5_SUCCESS, "H5SetThrottle"); #endif TEST("Reading 64-bit data"); for (t=step; t