summaryrefslogtreecommitdiffstats
path: root/tools/h4toh5/h4toh5vdata.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/h4toh5/h4toh5vdata.c')
-rw-r--r--tools/h4toh5/h4toh5vdata.c858
1 files changed, 0 insertions, 858 deletions
diff --git a/tools/h4toh5/h4toh5vdata.c b/tools/h4toh5/h4toh5vdata.c
deleted file mode 100644
index d1cd389..0000000
--- a/tools/h4toh5/h4toh5vdata.c
+++ /dev/null
@@ -1,858 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * Copyright (C) 2000 National Center for Supercomputing Applications.
- * All rights reserved.
- *
- *-------------------------------------------------------------------------
- */
-
-/******************************************************************************
-
- Description:
-
-1. converter
-
-See HDF4 to HDF5 mapping specification at
-(http://hdf.ncsa.uiuc.edu/HDF5/papers/h4toh5) for the default mapping
-from HDF4 object to HDF5 object.
-
-The whole converter includes 10 files, h4toh5util.h, h4toh5main.h, h4toh5util.c, h4toh5main.c, h4toh5sds.c, h4toh5image.c,h4toh5vdata.c,h4toh5vgroup.c,h4toh5pal.c and h4toh5anno.c.
-
-2. this file
-
-Converting an hdf4 independent vdata object into an hdf5 dataset of compound dataset.
-
-Author: Kent Yang(ymuqun@ncsa.uiuc.edu)
-
-
-*****************************************************************************/
-
-#include "h4toh5main.h"
-#include <assert.h>
-
-/*-------------------------------------------------------------------------
- * Function: Vdata_h4_to_h5
- *
- * Purpose: translate Vdata object into hdf5 dataset
- *
- * Return: FAIL if failed, SUCCEED if successful.
- *
- * In :
- vdata_id: RI identifier
- group_id: hdf5 group id
- Out:
-
- Modification:
- *-------------------------------------------------------------------------
- */
-
-int Vdata_h4_to_h5(int32 file_id,int32 vdata_id, hid_t group_id,int h4_attr) {
-
- /* define variables for hdf4. */
-
- int32 istat;
- int32 n_records;
-
- int32 vdata_ref;
- int32 vdata_tag;
-
- int32 interlace_mode;
-
- int32 vdata_size;
- int32 vdatamem_size;
-
- int32 field_index;
- int32 fieldorder;
- int32 fieldtype;
-
- int i;
- int32 nfields;
- int num_vd_attrs;
- int num_vd_field_attrs;
-
- VOIDP vd_data;
-
- char vdlabel[LABEL_LENG];
- char vdata_name[MAX_NC_NAME];
- char fieldname[MAX_NC_NAME];
- char vdata_class[VSNAMELENMAX];
- char field_name_list[VSFIELDMAX*FIELDNAMELENMAX];
-
- /* define varibles for hdf5. */
-
- hid_t h5d_sid;
- hid_t h5dset;
-
- hid_t h5_ctype;
- hid_t h5_cmemtype;
- hid_t create_plist;
-
- hid_t* h5memtype = NULL;
- hid_t* h5type = NULL;
-
- size_t* h4memsize = NULL;
- size_t* h4size = NULL;
- hsize_t h5_vddims[1];
- hsize_t h5_maxvddims[1];
- hsize_t h5_chunkdims[1];
- char* h5cvdata_name;
-
- int check_vdname;
-
- /* Zeroing out memory for vdlabel,vdata_class,vdata_name */
-
- h4toh5_ZeroMemory(vdata_name,MAX_NC_NAME);
- h4toh5_ZeroMemory(fieldname,MAX_NC_NAME);
- h4toh5_ZeroMemory(vdata_class,VSNAMELENMAX);
- h4toh5_ZeroMemory(field_name_list,VSFIELDMAX*FIELDNAMELENMAX);
- h4toh5_ZeroMemory(vdlabel,10);
-
- /* get absolute path of vdata name. */
-
- vdata_ref = VSQueryref(vdata_id);
- if (vdata_ref == FAIL) {
- printf("error in getting reference number. \n");
- return FAIL;
- }
-
- vdata_tag = VSQuerytag(vdata_id);
- if (vdata_tag == FAIL) {
- printf("error in getting object tag number. \n");
- return FAIL;
- }
-
- /* get the class name */
-
- if(VSgetclass(vdata_id,vdata_class) == FAIL) {
- printf("error in obtaining class name. \n");
- return FAIL;
- }
-
- /* get number of record,field_name,Size of a record and
- Name of the vdata*/
-
- if(VSQueryvsize(vdata_id,&vdata_size)==FAIL) {
- printf("error in getting size of vdata. \n");
- return FAIL;
- }
-
- if(vdata_size == 0) {/* empty vdata set. */
- return SUCCEED;
- }
-
- /* obtain number of records, field name list, vdata name. */
- if(VSinquire(vdata_id,&n_records,&interlace_mode,
- field_name_list,&vdata_size,vdata_name) == FAIL) {
- printf("error in inquiring vdata. \n");
- return FAIL;
- }
-
- vdatamem_size = 0;
- vdata_size = 0;
- nfields = VFnfields(vdata_id);
-
- if (nfields == FAIL) {
- printf("error in obtaining number of vdata fields. \n");
- return FAIL;
- }
-
- assert(nfields>0);
- h5memtype = calloc((size_t)nfields,sizeof(hid_t));
- h5type = calloc((size_t)nfields,sizeof(hid_t));
- h4memsize = calloc((size_t)nfields,sizeof(size_t));
- h4size = calloc((size_t)nfields,sizeof(size_t));
-
- for (i=0;i<nfields;i++) {
-
- /* obtain field type. */
- fieldtype = VFfieldtype(vdata_id,i);
- if(fieldtype == FAIL){
- printf("error in obtaining field type. \n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- return FAIL;
- }
-
- /* obtain field order.*/
- fieldorder = VFfieldorder(vdata_id,i);
- /* printf("fieldorder %d\n",fieldorder);*/
- if(fieldorder == FAIL){
- printf("error in obtaining field order. \n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- return FAIL;
- }
-
- /* datatype conversion from hdf4 to hdf5.
- the corresponding memory data type is also converted.*/
- if(h4type_to_h5type(fieldtype,&h5memtype[i],&h4memsize[i],
- &h4size[i],&h5type[i])== FAIL){
- printf("error in doing datatype conversion at vdata routine. \n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- return FAIL;
- }
-
- vdatamem_size +=fieldorder*h4memsize[i];
- vdata_size +=fieldorder*h4size[i];
-
- }
-
- vd_data = malloc((size_t)(vdatamem_size*n_records));
-
- istat = VSsetfields(vdata_id,field_name_list);
-
- if(istat == FAIL) {
- printf("error setting fields of vdata.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- istat = VSread(vdata_id,(uint8*)vd_data,n_records,FULL_INTERLACE);
-
- if(istat == FAIL) {
- printf("error in obtaining vdata. \n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- for (i=0;i<nfields;i++) {
- /* obtain field order.*/
- fieldorder = VFfieldorder(vdata_id,i);
- if(fieldorder == FAIL){
- printf("error in obtaining field order. \n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- return FAIL;
- }
- }
- /* create hdf5 compound datatype for both memory and file.*/
-
- h5_ctype = H5Tcreate(H5T_COMPOUND, (size_t)vdata_size);
- h5_cmemtype = H5Tcreate(H5T_COMPOUND,(size_t)vdatamem_size);
-
- if(gen_h5comptype(vdata_id,nfields,h4size,h4memsize,h5type,h5memtype,
- h5_ctype,h5_cmemtype)==FAIL){
- printf("error in generating h5 compound data type.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- h5_vddims[0] = n_records;
- h5_maxvddims[0] = H5S_UNLIMITED;
-
- h5d_sid = H5Screate_simple(1,h5_vddims,h5_maxvddims);
- if(h5d_sid <0){
- printf("error in obtaining space id.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- /* choose a number that is not returned from the func.*/
- check_vdname = -3;
-
- /* obtain hdf5 vdata name. */
- h5cvdata_name = get_name(vdata_ref,estnum_vd,vd_hashtab,&check_vdname);
-
- if (h5cvdata_name == NULL && check_vdname == 0 ) {
- printf("error,cannot find vdata \n");
- return FAIL;
- }
-
- if (h5cvdata_name == NULL && check_vdname == -1) {
- printf("error,group name is not defined.\n");
- return FAIL;
- }
-
- if (h5cvdata_name == NULL && check_vdname == -2 ) {
- printf("cannot allocate memory for vdata.\n");
- return FAIL;
- }
-
- h5_chunkdims[0] = h5_vddims[0];
- create_plist = H5Pcreate(H5P_DATASET_CREATE);
- if (H5Pset_chunk(create_plist,1,h5_chunkdims)<0){
- printf("failed to set up chunking information for ");
- printf("property list.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- free(h5cvdata_name);
- H5Pclose(create_plist);
- return FAIL;
- }
- h5dset = H5Dcreate(group_id,h5cvdata_name,h5_ctype,h5d_sid,create_plist);
- if(h5dset <0) {
- printf("error in obtaining dataset.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- free(h5cvdata_name);
- return FAIL;
- }
- free(h5cvdata_name);
-
- if(H5Dwrite(h5dset,h5_cmemtype,H5S_ALL,H5S_ALL,H5P_DEFAULT,vd_data)<0){
- printf("error in writing dataset converted from vdata.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- /* handle vdata attributes and vdata field attributes. */
-
- num_vd_attrs = VSfnattrs(vdata_id,_HDF_VDATA);
-
- if (num_vd_attrs == FAIL) {
- printf("error in obtaining attributes of vdata.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- /* when field_index = -1, only transfer vdata attribute.*/
-
- field_index = -1;
- if(vdata_transattrs(vdata_id,h5dset,num_vd_attrs,field_index,NULL)==FAIL){
- printf("error in translating vdata attibutes.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- for (i =0;i< nfields;i++) {
-
- if(VFfieldname(vdata_id,i)== NULL) {
- printf("error in obtaining field name. \n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- strcpy(fieldname,VFfieldname(vdata_id,i));
- num_vd_field_attrs = VSfnattrs(vdata_id,i);
- if(num_vd_field_attrs == FAIL){
- printf("error in number of vd field attribute \n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- if(vdata_transattrs(vdata_id,h5dset,num_vd_field_attrs,i,fieldname)
- ==FAIL){
- printf("error in transfering vdata attributes.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
- }
- /* converting annotations of vdata into corresponding hdf5 attribute.*/
- if( Annoobj_h4_to_h5(file_id,vdata_ref,vdata_tag,h5dset)== FAIL){
- printf("fail to convert HDF4 VDATA annotation into hdf5 attributes.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- /* converting predefined attributes. */
-
- if(h4_attr != 0) {
- istat = VSisattr(vdata_id);
- if (istat == FAIL) {
- printf("error in checking vdata attribute. \n");
- VSdetach(vdata_id);
- return FAIL;
- }
-
- if(istat) strcpy(vdlabel,VDATTRLAB);
- else strcpy(vdlabel,VDATALABEL);
- if(h4_transpredattrs(h5dset,HDF4_OBJECT_TYPE,vdlabel)==FAIL){
- printf("error in transfering vdata attributes.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
-
- if(vdata_name[0] != '\0') {
- if(h4_transpredattrs(h5dset,HDF4_OBJECT_NAME,vdata_name)==FAIL){
- printf("error in transfering vdata attributes.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
- }
-
- if(h4_transnumattr(h5dset,HDF4_REF_NUM,(uint16)vdata_ref)==FAIL){
- printf("error in transfering vdata attributes.\n");
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return FAIL;
- }
- }
- H5Sclose(h5d_sid);
- H5Dclose(h5dset);
- VSdetach(vdata_id);
- free(h5memtype);
- free(h5type);
- free(h4memsize);
- free(h4size);
- free(vd_data);
- return SUCCEED;
-}
-
-/*-------------------------------------------------------------------------
- * Function: vdata_transattrs
- *
- * Purpose: translate Vdata attributes into attributes of the
- corresponding hdf5 dataset
- *
- * Return: FAIL if failed, SUCCEED if successful.
- *
- * In :
- vdata_id: vdata identifier
- h5dset: hdf5 dataset
- snum_vdattrs: number of vd attributes
- field_index: index of vdata fields
- attr_name: vdata(or vdata field) attribute name
- Out:
- Modifications:
-
- *-------------------------------------------------------------------------
- */
-
-int vdata_transattrs(int32 vdata_id,hid_t h5dset,int snum_vdattrs,
- int field_index,char* attr_name){
-
- char svdattr_name[2*MAX_NC_NAME];
- char* svdrepattr_name;
- char refstr[MAXREF_LENGTH];
-
- int32 count_svdadata;
- int32 svd_atype;
-
- size_t sh4_amemsize;
- size_t sh4_asize;
-
- hid_t sh5a_sid;
- hid_t sh5a_id;
- hid_t sh5_atype;
- hid_t sh5_amemtype;
- hid_t sh5str_type;
- hid_t sh5str_memtype;
-
- hsize_t sh5dims[1];
- void* svd_adata;
- herr_t sret;
- int i;
-
- /* zeroing out memory for svdattr_name and refstr */
- h4toh5_ZeroMemory(svdattr_name,2*MAX_NC_NAME);
- h4toh5_ZeroMemory(refstr,MAXREF_LENGTH);
-
- /* separate vdata attribute from vdata field attributes. */
-
- if (field_index < -1) {
- printf("error: check_field should be either -1(vdata) or ");
- printf(">=0(vdata field).\n");
- return FAIL;
- }
-
- for (i = 0;i < snum_vdattrs; i++) {
-
- /* if the field_index is 0, no field attribute exists, only
- VDATA attributes are converted.*/
-
- if (VSattrinfo(vdata_id,field_index,i,svdattr_name,&svd_atype,
- &count_svdadata,NULL)== FAIL){
- printf("unable to obtain attribute information. \n");
- return FAIL;
- }
-
- if(svdattr_name[0] == '\0') {
- svdrepattr_name = trans_obj_name(DFTAG_VG,i);
- strcpy(svdattr_name,svdrepattr_name);
- free(svdrepattr_name);
- }
-
- if (field_index == -1);
-
- else if (field_index != -1 && attr_name != NULL) {
-
- strcat(svdattr_name,":");
- strcat(svdattr_name,attr_name);
- }
-
- else {
-
- strcat(svdattr_name,":");
- strcat(svdattr_name,"HDF4_VDATA_ATTR_");
- if(conv_int_str((uint16)field_index,refstr)==FAIL) {
- printf("error in converting vdata field index to string.\n");
- return FAIL;
- }
- strcat(svdattr_name,refstr);
-
- }
-
- /* converting attribute data type into the corresponding hdf5 data type */
-
- if(h4type_to_h5type(svd_atype,&sh5_amemtype,&sh4_amemsize,
- &sh4_asize,&sh5_atype)==FAIL){
- printf("fail to translate vdata attribute datatype from H4 to H5.\n");
- return FAIL;
- }
-
- svd_adata = malloc(sh4_amemsize * count_svdadata);
-
- if(svd_adata == NULL) {
- printf("fail to allocate memory for vdata attribute data.\n");
- return FAIL;
- }
-
- if(VSgetattr(vdata_id,field_index,i,(VOIDP)svd_adata)==FAIL){
- printf("error in getting attributes of vdata. \n");
- free(svd_adata);
- return FAIL;
- }
-
- /* now do attribute-transferring:
- 1. deal with string data type
- 2. set attribute space
- 3. get attribute name */
-
- if (sh5_atype == H5T_STRING) {
-
- if ((sh5str_type = mkstr(count_svdadata,
- H5T_STR_SPACEPAD))<0) {
- printf("error in making string for vdata attribute. \n");
- free(svd_adata);
- return FAIL;
- }
-
- if ((sh5str_memtype = mkstr((int)(count_svdadata*sh4_amemsize),
- H5T_STR_SPACEPAD))<0) {
- printf("error in making memory string for vdata attribute. \n");
- free(svd_adata);
- return FAIL;
- }
-
- sh5a_sid = H5Screate(H5S_SCALAR);
-
- if (sh5a_sid < 0) {
- printf("failed to create attribute space for ");
- printf("HDF4_OBJECT_TYPE VDATA. \n");
- free(svd_adata);
- return FAIL;
- }
-
-
- sh5a_id = H5Acreate(h5dset,svdattr_name,sh5str_type,
- sh5a_sid,H5P_DEFAULT);
-
- if (sh5a_id <0) {
- printf("failed to obtain attribute id for");
- printf(" HDF4_OBJECT_TYPE VDATA. \n");
- H5Sclose(sh5a_sid);
- free(svd_adata);
- return FAIL;
- }
-
- sret = H5Awrite(sh5a_id,sh5str_memtype,(void *)svd_adata);
-
- if (sret <0) {
- printf("fail to write vdata attr into hdf5 dataset attr\n ");
- H5Sclose(sh5a_sid);
- H5Aclose(sh5a_id);
- free(svd_adata);
- return FAIL;
- }
-
- free(svd_adata);
- sret = H5Sclose(sh5a_sid);
- sret = H5Aclose(sh5a_id);
- }
-
- else {
-
- if(count_svdadata == 1) {
- sh5a_sid = H5Screate(H5S_SCALAR);
-
- if (sh5a_sid < 0) {
- printf("failed to create scalar space id for hdf5 attribute ");
- printf("of dataset converted from attribute of VDATA.\n");
- free(svd_adata);
- return FAIL;
- }
- }
- else {
- sh5dims[0] = count_svdadata;
- sh5a_sid = H5Screate_simple(1,sh5dims,NULL);
-
- if (sh5a_sid < 0) {
- printf("failed to create simple space id for hdf5 attribute ");
- printf("of dataset converted from attribute of VDATA.\n");
- free(svd_adata);
- return FAIL;
- }
- }
-
- sh5a_id = H5Acreate(h5dset,svdattr_name,sh5_atype,
- sh5a_sid,H5P_DEFAULT);
-
- if(sh5a_id <0) {
- printf("failed to create attribute id for hdf5 attribute ");
- printf("of dataset converted from attribute of VDATA.\n");
- H5Sclose(sh5a_sid);
- free(svd_adata);
- return FAIL;
- }
-
- sret = H5Awrite(sh5a_id,sh5_amemtype,(void *)svd_adata);
-
- if(sret <0) {
- printf("failed to write attribute data for hdf5 attribute ");
- printf("of dataset converted from attribute of VDATA.\n");
- H5Sclose(sh5a_sid);
- H5Aclose(sh5a_id);
- free(svd_adata);
- return FAIL;
- }
-
- sret = H5Aclose(sh5a_id);
- sret = H5Sclose(sh5a_sid);
- free(svd_adata);
- }
- }
- return SUCCEED;
-}
-/*-------------------------------------------------------------------------
- * Function: gen_h5comptype
- *
- * Purpose: generate hdf5 compound data type
-
- *
- * Return: FAIL if failed, SUCCEED if successful.
- *
- * In :
- vdata_id: vdata identifier
- nfields: number of fields
- sh4size: pointer to datatype size in memory
- sh4memsize: pointer to datatype size in memory
- sh5type: pointer to hdf5 datatype
- sh5memtype: pointer to actual hdf5 datatype in memory
- h5_ctype: hdf5 compound datatype
- h5_cmemtype: hdf5 compound datatype in memory
- Out:
- Modifications:
-
- *-------------------------------------------------------------------------
- */
-
-int gen_h5comptype(int32 vdata_id,int32 nfields,
- size_t* sh4size,size_t* sh4memsize,
- hid_t* sh5type,hid_t* sh5memtype,
- hid_t h5_ctype,hid_t h5_cmemtype) {
-
- char* fieldname;
- int32 fieldorder;
- size_t fil_offset;
- size_t mem_offset;
- hsize_t fielddim[1];
- hid_t h5str_type;
- int check_ifstr;/* flag to check if the h5 type is string.*/
- int i;
-
-
- check_ifstr = 0;
- fil_offset = 0;
- mem_offset = 0;
-
-
- for (i =0;i< nfields;i++) {
-
- fieldname = NULL;
- fieldorder = VFfieldorder(vdata_id,i);
-
- if(fieldorder == FAIL){
- printf("error in obtaining fieldorder.\n");
- return FAIL;
- }
-
- fieldname = VFfieldname(vdata_id,i);
- if(fieldname == NULL){
- printf("fail to obtain Vdata field name. \n");
- return FAIL;
- }
-
-
- /* when vdata is a character array, we will write the whole
- array as one hdf5 type string. */
-
- if(sh5type[i] == H5T_STRING) {
-
- if ((h5str_type = mkstr((int)(sh4size[i]*fieldorder),H5T_STR_SPACEPAD))<0) {
- printf("error in making string of hdf5 string. \n");
- return FAIL;
- }
- sh5type[i] = h5str_type;
- check_ifstr = 1;
- }
-
- if (sh5memtype[i] == H5T_STRING) {
-
- if((h5str_type = mkstr((int)(sh4memsize[i]*fieldorder),H5T_STR_SPACEPAD))<0){
- printf("error in making string for VDATA in memory. \n");
- return FAIL;
- }
- sh5memtype[i] = h5str_type;
-
- }
-
- fielddim[0] = fieldorder;
-
- /* if field type is an array, use H5Tinsert_array.
- When the data type is H5T_STRING,
- we will treat the the vdata as a HDF5 scalar type.*/
-
- if (fielddim[0] == 1 || check_ifstr == 1) {
-
- if(H5Tinsert(h5_ctype,fieldname,fil_offset,sh5type[i])<0) {
- printf("error inserting hdf5 compound datatype while ");
- printf("converting vdata.\n");
- return FAIL;
- }
-
- if(H5Tinsert(h5_cmemtype,fieldname,mem_offset,sh5memtype[i])<0){
- printf("error inserting hdf5 compound datatype of memory");
- printf(" while converting vdata.\n");
- return FAIL;
- }
- }
-
- else {
- hid_t arr_type; /* Array datatype for inserting fields */
-
- /* Create array datatype */
- if((arr_type=H5Tarray_create(sh5type[i],1,fielddim,NULL))<0) {
- printf("error creating array datatype.\n");
- return FAIL;
- }
-
- if(H5Tinsert(h5_ctype,fieldname,fil_offset,arr_type)<0) {
- printf("error inserting array into hdf5 compound datatype. \n");
- return FAIL;
- }
-
- /* Close array datatype */
- if(H5Tclose(arr_type)<0) {
- printf("error closing array datatype.\n");
- return FAIL;
- }
-
- /* Create array datatype */
- if((arr_type=H5Tarray_create(sh5memtype[i],1,fielddim,NULL))<0) {
- printf("error creating array datatype.\n");
- return FAIL;
- }
-
- if(H5Tinsert(h5_cmemtype,fieldname,mem_offset,arr_type)<0) {
- printf("error inserting array into hdf5 compound datatype for memory. \n");
- return FAIL;
- }
-
- /* Close array datatype */
- if(H5Tclose(arr_type)<0) {
- printf("error closing array datatype.\n");
- return FAIL;
- }
-
- }
-
- if( check_ifstr == 1) {
- fil_offset = fil_offset + sh4size[i]*fieldorder;
- mem_offset = mem_offset + sh4memsize[i]*fieldorder;
- check_ifstr = 0;
- }
- else {
-
- fil_offset = fil_offset + sh4size[i]*fieldorder;
- mem_offset = mem_offset + sh4memsize[i]*fieldorder;
- }
-
- }
-
- return SUCCEED;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-