[netcdfgroup] Netcdf4 error while there is not

Hello,

I have found a problem with netcdf 4.0.1 library (test program at the end.
If you create a field as an unsigned short and write a number outside the
signed short range with nc_put_vara_double there is a -60 status returned
(range error) but the data are correctly written.
Here is the output of the program and of ncdump:
    Creating file netcdf4.nc
    status = 0
    Creating dimension 'dim' = 10
    status = 0
    Creating variable varshort (type ushort, dimension 'dim')
    status = 0
    Writing varshort with nc_put_vara_double
    status = -60

    netcdf netcdf4 {
    dimensions:
        dim = 10 ;
    variables:
        ushort varshort(dim) ;
    data:

     varshort = 32765, 32766, 32767, 32768, 32769, 32770, 32771, 32772,
32773,
        32774 ;
    }


Maybe there is a bug here (if not, please tell me was is wrong in my code).

I have not checked other combinations of type/write routine, but maybe
there is the same behavior with bytes and longs and put_xxx_double.

-- 
Phippe Poilbarbe
CLS - Space Oceanography Division

==============


#include <stdio.h>
#include <netcdf.h>

int main(int argc, char *arvg[])
{
  int status;
  int i;
  int ncid;

  const int dimvalue = 10;
  int dimid;
  int varid;

  double  values_r8[dimvalue];
  unsigned short values_ui2[dimvalue];

  size_t index = 0;
  size_t count = dimvalue;

  printf("Creating file netcdf4.nc\n");
 
  status = nc_create(
        "netcdf4.nc",
        NC_CLOBBER|NC_NETCDF4,
        &ncid);
  printf("status = %d\n",status);
  if (status != 0) goto Error;

  printf("Creating dimension 'dim' = %d\n", dimvalue);
  status = nc_def_dim(ncid, "dim", dimvalue, &dimid);
  printf("status = %d\n",status);
  if (status != 0) goto Error;

  printf("Creating variable varshort (type ushort, dimension 'dim')\n");
  status = nc_def_var(ncid, "varshort", NC_USHORT, 1, &dimid, &varid);
  printf("status = %d\n",status);
  if (status != 0) goto Error;

  for(i=0; i < dimvalue; i++)
    values_r8[i] = 32765.0 + i;
  printf("Writing varshort with nc_put_vara_double\n");
  status = nc_put_vara_double(ncid, varid, &index, &count, values_r8);
  printf("status = %d\n",status);
  nc_close(ncid);
  return 0;

Error:
  return 1;
}

  • 2010 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: