The NCDF_VARPUT procedure writes a hyperslab of values to a netCDF variable. The netCDF file must be in data mode to use this procedure.
NCDF_VARPUT, Cdfid, Varid, Value [, COUNT=vector] [, OFFSET=vector] [, STRIDE=vector]
The netCDF ID, returned from a previous call to NCDF_OPEN or NCDF_CREATE.
The netCDF variable ID, returned from a previous call to NCDF_VARDEF or NCDF_VARID, or the name of the variable.
Data values to be written to the netCDF file. If the data type of Value does not match that of the netCDF variable, it is converted to the correct data type before writing. Value must have a dimensionality less than or equal to that of the variable being written.
An optional vector containing the counts to be used in writing Value. COUNT is a 1-based vector with an element for each dimension of the data to be written. Note that counts do not have to match the dimensions of Value. The default count vector is the dimensionality of Value.
An optional vector containing the starting position to write. The default start position is [0, 0, ...].
An optional vector containing the strides, or writing intervals, between written values of the netCDF variable. The default stride vector is that for a contiguous write, [1, 1, ...].
Suppose that you wish to create a 100x100 byte (0 & 1) checker board:
; Create offsets for even and odd rows: offset_even = [0,0] & offset_odd = [1,1] ; Create count and stride values: count = [50,50] & stride = [2,2] ; Make the "black" spaces of the checker board: black = BYTARR(50,50) > 1B ; Create the netCDF file: id = NCDF_CREATE('checker.nc', /CLOBBER) ; Fill the file with BYTE zeros: NCDF_CONTROL, id, /FILL ; Define the X dimension: xid = NCDF_DIMDEF(id, 'x', 100) ; Define the Y dimension: yid = NCDF_DIMDEF(id, 'y', 100) ; Define the Z dimension, UNLIMITED: zid = NCDF_DIMDEF(id, 'yy', /UNLIMITED) ; Define a variable with the name "board": vid = NCDF_VARDEF(id, 'board', [yid, xid], /BYTE) ; Rename 'yy' to 'z' as the zid dimension name: NCDF_DIMRENAME, id, zid, 'z' ; Put the file into data mode: NCDF_CONTROL, id, /ENDEF ; Use NCDF_DIMID and NCDF_DIMINQ to verify the name and size ; of the zid dimension: check_id = NCDF_DIMID(id,'z') NCDF_DIMINQ, id, check_id, dim_name, dim_size HELP, check_id, dim_name, dim_size
CHECK_ID LONG = 2 DIM_NAME STRING = 'z' DIM_SIZE LONG = 0
Note that the DIM_SIZE is 0 because no records have been written yet for this dimension.
NCDF_VARPUT, id, vid, black, $ COUNT=count, STRIDE=stride, OFFSET=offset_even NCDF_VARPUT, id, vid, black, $ COUNT=count, STRIDE=stride, OFFSET=offset_odd ; Get the full image: NCDF_VARGET, id, vid, output ; Create a window for displaying the image: WINDOW, XSIZE=100, YSIZE=100 ; Display the image: TVSCL, output ; Make stride larger than possible: stride = [2,3] ; As an experiment, attempt to write to an array larger than ; the one we previously allocated with NCDF_VARDEF: NCDF_VARPUT, id, vid, black, $ COUNT=count, STRIDE=stride, OFFSET=offset_odd
% NCDF_VARPUT: Requested write is larger than the available data area.
You will need to change the OFFSET/COUNT/STRIDE, or redefine the variable dimensions. You attempted to access 150 elements in a 100 array.
NCDF_CLOSE, id ; Close the netCDF file.
Introduced: Pre 4.0
NCDF_VARGET, NCDF_VARGET1, NCDF_VARID, NCDF_VARINQ