Ed et al: Here's a simple C program that produces an incorrect netcdf
file with netcdf-4.1
#include <stdio.h>
#include <string.h>
#include <netcdf.h>
#define FILE_NAME "test.nc"
#define NDIMS 2
#define NLAT 10
#define NLON 20
#define LAT_NAME "lat"
#define LON_NAME "lon"
#define START_LAT 25.0
#define START_LON -125.0
int
main()
{
int ncid, lon_dimid, lat_dimid;
int lat_varid, lon_varid;
int dimids[NDIMS];
float lats[NLAT], lons[NLON];
int lat, lon;
int retval;
for (lat = 0; lat < NLAT; lat++)
lats[lat] = START_LAT + 5.*lat;
for (lon = 0; lon < NLON; lon++)
lons[lon] = START_LON + 5.*lon;
retval = nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid);
retval = nc_def_dim(ncid, LAT_NAME, NLAT, &lat_dimid);
retval = nc_def_dim(ncid, LON_NAME, NLON, &lon_dimid);
retval = nc_def_var(ncid, LON_NAME, NC_FLOAT, 1, &lon_dimid, &lon_varid);
retval = nc_put_var_float(ncid, lon_varid, &lons[0]);
retval = nc_def_var(ncid, LAT_NAME, NC_FLOAT, 1, &lat_dimid, &lat_varid);
retval = nc_put_var_float(ncid, lat_varid, &lats[0]);
retval = nc_close(ncid);
return 0;
}
An ncdump of the resulting file looks like this:
ncdump test.nc
netcdf test {
dimensions:
lat = 10 ;
lat = 10 ;
variables:
float lon(lat) ;
float lat(lat) ;
data:
lon = -125, -120, -115, -110, -105, -100, -95, -90, -85, -80 ;
lat = 25, 30, 35, 40, 45, 50, 55, 60, 65, 70 ;
}
which is more than a little weird. Linking the program with either
netcdf-4.0.1 or netcdf-4.1-rc1 produces the correct netcdf file
ncdump test.nc
netcdf test {
dimensions:
lat = 10 ;
lon = 20 ;
variables:
float lon(lon) ;
float lat(lat) ;
data:
lon = -125, -120, -115, -110, -105, -100, -95, -90, -85, -80 ;
lat = 25, 30, 35, 40, 45, 50, 55, 60, 65, 70 ;
}
-Jeff