On Mon, 25 Apr 2011 01:35:26 -0500 "Larry Knox" <[email protected]> wrote: >Hi Corey, > >-----Original Message----- >From: [email protected] [mailto:[email protected]] >On Behalf Of Corey Bettenhausen >Sent: Friday, April 22, 2011 11:39 AM >To: HDF Users Discussion List >Subject: [Hdf-forum] Scalar vs array attributes, HDF5, ncdump > >Hello, >I'm trying to create HDF5 files that are as compatible as possible with the >netCDF library and its tools. I recently came across an issue that I can't >figure out. > >ncdump (v4.1.2) cannot read scalar, numeric attributes written with the HDF5 >library. However, it can if they're written as a single element array. I've >attached a short Fortran program and example output, HDF5 files. Any >thoughts on what's causing this incompatibility? >Regards, >-Corey > >I ran into a similar problem a few months ago with a Simple 1x1 attribute of >type H5T_STD_I32LE. I couldn't remember quite what the issue was, so I used >gdb to trace the error message for that particular attribute type to this >code in nc4file.c line 872: > > > /* All netcdf attributes are 1-D only. */ > if (att_ndims != 1) > BAIL(NC_EATTMETA); > >According to the comments in the entire section of code that contains these >lines, netCDF-4 supports: 1. Zero length attributes. 2. Scalar, NC_CHAR, >H5ST_C_S1, variable length string attributes, and 3. 1 dimensional >attributes of other (i.e. numeric) types. Scalar, numeric attributes fail >because they have dimension 0 but att_npoints (length) > 0, therefore they >don't fall in any of the three supported categories. The section of code, >lines 847-878 of nc4file.c is below. > >I don't know for sure why netCDF-4 limits attributes to these 3 categories, >but I plan to ask, in the hope they can be expanded. > >Regards, >Larry > >Nc4file.c:847 - 878 > > /* If both att_ndims and att_npoints are zero, then this is a > * zero length att. */ > if (att_ndims == 0 && att_npoints == 0) > { > dims[0] = 0; > } > else if (att->xtype == NC_CHAR) > { > /* NC_CHAR attributes are written as a scalar in HDF5, of type > * H5T_C_S1, of variable length. */ > if (att_ndims == 0) > { > if (!(dims[0] = H5Tget_size(file_typeid))) > BAIL(NC_EATTMETA); > } > else > { > /* This is really a string type! */ > att->xtype = NC_STRING; > dims[0] = att_npoints; > } > } > else > { > /* All netcdf attributes are 1-D only. */ > if (att_ndims != 1) > BAIL(NC_EATTMETA); > > /* Read the size of this attribute. */ > if (H5Sget_simple_extent_dims(spaceid, dims, NULL) < 0) > BAIL(NC_EATTMETA); > }
Hi Larry, Thanks for the information. So it seems it's a reading problem on netCDF's side rather than a writing issue on the the HDF5 side. I sent an email to the netCDF support email address as well last week regarding this issue. I've been assigned ticket #GSV-822191, but haven't heard anything further yet. Cheers, -Corey _______________________________________________ Hdf-forum is for HDF software users discussion. [email protected] http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
