[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[netCDF #QCX-463169]: possible bug in 4.3.3.1 with unlimited dimensions in NetCDF-4 format?



Hello Ellen,

Thank you very much for the test program! I've duplicated your error, and am 
currently working on narrowing down when the bug was introduced.  I've created 
a ticket in our JIRA system, which can be viewed at 
https://bugtracking.unidata.ucar.edu/browse/NCF-326, if you are interested.

I will follow up with you once we know more, thanks again!

-Ward


> Hello,
> 
> I just upgraded from NetCDF 4.1.3 to NetCDF 4.3.3.1 and am seeing a
> problem in our regression test when writing unlimited dimensions to a
> NetCDF-4 format file.  Specifically, if the unlimited dimension is last
> instead of the first in the dimension list, or if I declare more than
> one unlimited dimension, the program errors with the NC_EEDGE error:
> 
> Error: NetCDF: Start+count exceeds dimension bound
> 
> This does not occur in our current NetCDF version 4.1.3.
> 
> To isolate the issue, I built NetCDF 4.3.3.1 outside of our build
> infrastructure and wrote a standalone C program to write to a NetCDF-4
> file, so I am bypassing MATLAB completely.
> 
> Can you please help me determine if this is a bug in the NetCDF code,
> specifically in dvarput.c?
> 
> Below is the standalone C program that will throw the error above when
> 
> Thank you!
> 
> Ellen Johnson
> Software Engineer
> Image and Scientific File Formats
> MathWorks
> 
> 
> 
> #include <stdio.h>
> #include <string.h>
> #include <netcdf.h>
> 
> #define FILE_NAME "unlim.nc"
> 
> /* 3D matrix, 6 x 4 x 3 */
> 
> #define NDIMS 3
> #define X_LEN 6
> #define Y_LEN 4
> #define Z_LEN 3
> 
> /* Handle errors by printing an error message */
> 
> #define ERR(e) {printf("Error: %s\n", nc_strerror(e)); return 2;}
> 
> int
> main()
> 
> {
> size_t start[NDIMS] = {0, 0, 0};
> size_t count[NDIMS] = {X_LEN, Y_LEN, Z_LEN};
> ptrdiff_t stride[NDIMS] = {1, 1, 1};
> float mydata[X_LEN * Y_LEN * Z_LEN];
> int i;
> int retval;
> 
> int ncid, varid;
> int dimids[NDIMS];
> 
> for (i = 0; i < (X_LEN * Y_LEN * Z_LEN); i++)
> mydata[i] = i;
> 
> 
> /* create the file in NetCDF-4 format */
> if ((retval = nc_create(FILE_NAME, NC_NETCDF4, &ncid)))
> ERR(retval);
> 
> 
> /* define dimensions */
> if ((retval = nc_def_dim(ncid, "time", X_LEN, &dimids[0])))
> ERR(retval);
> 
> if ((retval = nc_def_dim(ncid, "lat", Y_LEN, &dimids[1])))
> ERR(retval);
> 
> if ((retval = nc_def_dim(ncid, "lon", NC_UNLIMITED, &dimids[2])))
> ERR(retval);
> 
> /* define the variable */
> if ((retval = nc_def_var(ncid, "data", NC_FLOAT, NDIMS, dimids, &varid)))
> ERR(retval);
> 
> 
> /* end define mode */
> if ((retval = nc_enddef(ncid)))
> ERR(retval);
> 
> 
> /* write data */
> if ((retval = nc_put_vars_float(ncid, varid, start, count, stride,
> mydata)))
> ERR(retval);
> 
> 
> /* close the file */
> if ((retval = nc_close(ncid)))
> ERR(retval);
> 
> printf("\n\n*** SUCCESS writing example file %s!\n", FILE_NAME);
> 
> return 0;
> 
> }
> 

Ticket Details
===================
Ticket ID: QCX-463169
Department: Support netCDF
Priority: Normal
Status: Closed


NOTE: All email exchanges with Unidata User Support are recorded in the Unidata inquiry tracking system and then made publicly available through the web. If you do not want to have your interactions made available in this way, you must let us know in each email you send to us.